不能签了。多签钱包的阈值和签名人列表是"可变的链上状态",修改生效后,所有新交易必须满足新的门槛规则,旧交易积攒的签名只适用于旧规则,不会被新规则认可。
阈值修改的底层逻辑
多签合约(如 Safe)验证一笔交易是否可执行,看的是这笔交易本身附带的一个叫nonce的数字。当你把阈值从 2/3 改成 3/5,链上状态发生了变更,但旧交易请求的 nonce 状态已经被"定住"了——它对应的签名要求是修改前的阈值。Safe 合约的 execTransaction 函数会校验当前阈值,而 useUpdateThreshold 这类工具创建的修改提案一旦上链,旧交易在验证环节就直接过不去(来源:Safe 文档)。
情况A:旧交易是"未执行的待签名提案"
如果你在改阈值之前,发了一笔 2/3 的转账提案,并且已经集齐 2 个签名,但还没来得及执行。此时你把阈值改成 3/5,这笔旧提案的状态会变成什么?
链上实际状态:这笔提案仍然存在(存于合约的
pendingTransactions映射里),但它的nonce对应的执行条件是"修改前那一刻的阈值"。当你再去找第 3 个人签名并尝试执行时,合约会先查当前阈值为 3,再查这笔交易的签名为 2,直接拒绝。完成标准:旧提案无法执行,也不作废,它会一直"卡"在待处理列表里,除非你手动取消。Safe 的
createChangeThresholdTx返回的 Safe 交易会调用changeThreshold,只改阈值而不动旧交易(来源:Safe 文档)。
情况B:旧交易已经"打包"但还没执行
这是更极端的情况。如果改阈值之前,2/3 签名已经集齐,交易被提交到执行队列(甚至已经在内存池里),但还没被矿工打包,此时你提前把阈值改了。
结果:这笔交易在被打包时,矿工会用当前的链上状态(阈值=3/5)去校验签名数量(还是 2 个),校验失败,交易上链后状态为
revert,Gas 照扣不误。完成标准:去区块浏览器查这笔交易哈希,状态是
Fail,说明没跑通。
高危风险:旧交易理论上可以在改阈值后通过"再次收集签名"来补足,但这需要所有原签名人配合重新签一次,实际执行成本极高。更常见的坑是:改阈值后忘了取消旧提案,过段时间以为它已经作废了,结果又有人去补签,浪费 Gas 不说,还可能引发流程混乱。
常见失败原因
误以为"阈值修改只影响未来交易":很多新人以为改阈值只是换个设置,之前已经攒够签名的旧交易不会受影响。实际上多签合约的校验逻辑是实时读取状态,不存在"旧交易豁免"这种设计。
没有在改阈值前清理旧提案:如果你在改阈值之前有多笔待签名的旧交易,改完后它们统统无法执行。建议先让所有待签名交易执行完或手动取消,再发起阈值修改。
操作完成后
校验方式:去区块浏览器查你的多签钱包地址,看
ThresholdChanged事件日志,确认新阈值已生效。下一步动作:在发起下一笔交易之前,先在钱包前端刷新待处理列表,如果有旧提案残留,手动点击"取消"或"Reject"清理掉。否则它们会一直占着 nonce,干扰后续交易的排队顺序。



