Safe交易哈希、nonce和签名如何核验? 图 1
Safe交易哈希、nonce和签名如何核验? · 图 1

解释Safe Transaction参数、nonce、EIP-712哈希、阈值确认与按所有者地址排序签名,区分链下提议和链上执行。

Safe链下收集签名很方便,但只有合约nonce与链上执行结果能决定一笔交易是否落地。

易错点:Safe链下收集签名很方便,但只有合约nonce与链上执行结果能决定一笔交易是否落地。

哈希字段

getTransactionHash覆盖to、value、data、operation、safeTxGas、baseGas、gasPrice、gasToken、refundReceiver与nonce,并绑定Safe域。

一份可复现检查单

核验对象本主题动作失败处理
哈希字段从Safe Documentation确认Safe交易哈希由哪些字段组成的正式定义,并保存网络、地址与读取时间定义或版本对不上时,不继续套用本文步骤
nonce并发在原始返回、签名消息或交易指令中定位对应字段,不用界面缩写代替找不到原始值时,把结果标为未验证
签名排序用Safe Signatures复核实现行为,特别记录可选扩展与权限主体实现与规范语义不一致时,按具体部署重新评审
链上执行构造一个失败样例,确认客户端会明确拒绝而不是静默修正失败仍被显示为成功时,停止上线并补充状态校验

记录Safe交易哈希与nonce时,把“输入快照”和“判断结果”分开。该主题的快照包含原始bytes、字段单位、对象地址、区块高度与Safe Documentation版本;结果注明通过的规则和仍未知的链上执行。这样即使Safe交易哈希由哪些字段组成随后变化,也能复现当时的结论。

Safe交易哈希与nonce的测试至少覆盖正常路径、缺少nonce并发、提交前状态改变及客户端不支持当前版本。前几类验证签名排序边界,最后一类确认产品不会删除字段或改走未经用户确认的回退路径。

nonce并发

多个提案使用同一nonce时都能在服务端收集确认,链上却只有先执行的一笔有效。另一笔必须取新nonce并重新签全部字段。

可验证事实

  1. Safe交易哈希承诺to、value、data、operation、Gas与退款参数以及Safe nonce,任一字段变化都会改变待签摘要。
  2. 达到threshold的owner签名必须按owner地址升序编码,合约借此检测重复并验证每个签名者。
  3. 链下Transaction Service中的提议或确认不等于链上执行,最终应核对Safe合约nonce和Execution事件。

签名排序

execTransaction要求签名按owner地址升序编码,既支持EOA签名,也支持ERC-1271与预批准哈希。排序错误或重复owner都会验证失败。

链上执行

模块交易可绕过普通owner阈值。审计Safe时除了owners与threshold,还要枚举modules、guards与fallback handler,不能把多签阈值当成唯一控制面。

证据从哪里来

  1. Safe Documentation:正式接口、字段与规范语义,https://docs.safe.global/advanced/smart-account-concepts
  2. Safe Signatures:实现路径、兼容性或安全边界,https://docs.safe.global/advanced/smart-account-signatures

Safe交易哈希与nonce的资料访问口径为2026-07-17;遇到Draft状态、可升级部署或可变网络参数,应在后续复核日重新读取Safe Documentation。

实现差异

启用模块可绕过普通owner签名路径,评估Safe控制面时必须同时枚举modules和guards。 相邻知识可继续对照ERC-1271验签Safe Module与Guard