Safe多签交易不想执行了,怎样真正作废?

 / 
8

在 Safe 多签里点"删除"或"拒绝",不等于这笔交易真的作废了。Safe 官方文档说得很清楚:从队列里删除只是链下操作,交易数据和已有的签名依然有效,任何人只要凑齐签名仍然可以执行它。真正让一笔不想执行的交易失效,唯一可靠的方式是在链上消耗掉它占用的 nonce——发起一笔同 nonce 的"空"交易,收集足够签名并执行,把这个 nonce 用掉,原交易就再也无法上链了。

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

为什么"删除"和"拒绝"不够

Safe 的签名一旦生成,就无法从密码学层面"收回"。你在界面上点拒绝,只是把拒绝的意愿记录在 Safe 的后端服务里,交易本身并没有被销毁。如果这笔交易已经收集了部分签名,任何持有这些签名数据的人——可能是另一个签名者,也可能是曾经接触过交易数据的外部方——都可以补上缺少的签名然后执行它。

一个具体的危险场景:2/2 Safe 里你发起了交易并签了名,然后从队列里删掉。如果你的共同签名者在你删除前复制了交易数据和你的签名,他仍然可以补上自己的签名并执行。如果交易已经集齐全部签名,风险更大:交易队列是公开的,任何人拿到完全签名的交易数据都可以直接执行。

所以 Safe 官方在删除功能旁边加了一段警告,明确建议:对于已经带有签名的交易,不要依赖删除,应该用替换或取消。

真正作废的方法:用同 nonce 交易消耗掉它

Safe 的每一笔交易都有一个 nonce,nonce 严格按顺序递增,每个 nonce 只能被消耗一次。一旦某个 nonce 被一笔已执行的交易占用,所有使用同一个 nonce 的其他交易就永久失效了。

操作路径在 Safe 界面里叫 "Reject transaction"(拒绝交易)。它的实际行为不是"撤销",而是发起一笔新的、空的交易,使用和被拒绝交易相同的 nonce。这笔空交易的目标通常是 Safe 自己的地址,转账金额为 0,数据为空。它唯一的任务就是上链执行,把这个 nonce 用掉。

具体步骤:

  1. 在待处理交易列表中展开那笔不想执行的交易,点击 Reject 按钮。

  2. 用你连接的钱包签名这笔"拒绝交易"。签名本身是链下的,不消耗 gas。

  3. 这笔拒绝交易会出现在交易列表中,和被拒绝的原交易使用同一个 nonce。它需要收集和其他 Safe 交易相同数量的签名才能执行。

  4. 其他签名者到这笔拒绝交易的详情页点击 Confirm。

  5. 集齐所需签名后,点击 Execute。这一步需要支付 gas,因为它是真正的链上交易。

  6. 执行成功后,原 nonce 被消耗,那笔不想执行的交易就永久失效了。

关键点在于:在拒绝交易上链执行之前,原交易仍然是有效的,仍然可能被其他人执行。所以如果这笔交易已经接近签名门槛,应该尽快推进拒绝交易的上链,而不是只把它留在队列里。

没有签名的交易:删除就够了

如果那笔不想执行的交易还没有任何 Safe 签名者签名(只有提议者的签名,或者完全没签),情况就简单得多。提议者可以直接在界面上删除它,不需要走链上 nonce 消耗流程。因为此时没有有效的 Safe 签名可以被别人利用,删除后交易无法被凑齐签名执行。

判断标准很简单:打开交易详情,看签名列表里有没有除了提议者之外的 Safe 所有者签名。如果有,走"Reject transaction"上链消耗 nonce;如果没有,直接删除即可。

完成标准

真正的作废,标志不是原交易从界面上消失,而是拒绝交易成功上链,原 nonce 被消耗。你可以在链上浏览器里查到拒绝交易的交易哈希,状态为成功;回到 Safe 队列,那笔不想执行的交易会显示为已被替换或不再可执行。

如果只是点了删除、拒绝按钮但拒绝交易还没上链,原交易依然处于"可执行"状态。在拒绝交易确认上链之前,不要把它当作已经安全了。

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

参考资料

  1. Safe帮助文档《Reject and delete transactions》 https://help.safe.global/en/articles/40817-reject-and-delete-transactions
  2. Safe帮助文档《Why do I need to pay for cancelling a transaction》 https://help.safe.global/articles/4016097317-why-do-i-need-to-pay-for-cancelling-a-transaction
  3. GitHub文档《SECURE_TRANSACTION_CANCELLATION.md》 https://raw.githubusercontent.com/hadv/vito-interface/refs/heads/feature/safe-message-signing-client/SECURE_TRANSACTION_CANCELLATION.md#1
  4. GitHub提交记录 https://github.com/hadv/vito-interface/commit/a06be81f1cd289a867897893c0e8b14267753879#1
  5. Mirador博客《Safe transaction stuck》 https://mirador.org/blog/safe-transaction-stuck