多签门槛从2/3改成3/5:旧交易还能签吗

 / 
1

不能签了。多签钱包的阈值和签名人列表是"可变的链上状态",修改生效后,所有新交易必须满足新的门槛规则,旧交易积攒的签名只适用于旧规则,不会被新规则认可。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

阈值修改的底层逻辑

多签合约(如 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 不说,还可能引发流程混乱。

常见失败原因

  • 误以为"阈值修改只影响未来交易":很多新人以为改阈值只是换个设置,之前已经攒够签名的旧交易不会受影响。实际上多签合约的校验逻辑是实时读取状态,不存在"旧交易豁免"这种设计。

  • 没有在改阈值前清理旧提案:如果你在改阈值之前有多笔待签名的旧交易,改完后它们统统无法执行。建议先让所有待签名交易执行完或手动取消,再发起阈值修改。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

操作完成后

  • 校验方式:去区块浏览器查你的多签钱包地址,看 ThresholdChanged 事件日志,确认新阈值已生效。

  • 下一步动作:在发起下一笔交易之前,先在钱包前端刷新待处理列表,如果有旧提案残留,手动点击"取消"或"Reject"清理掉。否则它们会一直占着 nonce,干扰后续交易的排队顺序。