You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safe多签智能合约如何生成签名?EOA签名机制解析

Safe合约中基于EIP-1271的EOA签名验证机制解析

EIP-1271的核心是让合约账户通过实现isValidSignature(bytes32 hash, bytes memory signature)方法返回魔术值0x1626ba7e完成签名验证,但Safe作为多签合约需要同时兼容EOA(外部拥有账户)签名,其机制核心是通过签名中的v值区分签名类型,分支处理EOA的ECDSA签名验证与合约账户的EIP-1271验证,具体流程如下:

1. 签名格式的区分规则

Safe对签名的v值做了特殊定义:

  • 若v为27或28:代表这是一个EOA的标准ECDSA签名
  • 若v为0或1:代表这是一个合约账户的EIP-1271签名

2. EOA签名的验证流程

当Safe收到包含EOA签名的多签请求时,会执行以下步骤:

  • 从拼接的签名数据中提取当前签名的r、s、v字段
  • 因为v为27/28,触发EOA验证分支:调用ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s)函数,传入待验证交易的哈希值与签名字段,恢复出对应的EOA地址
  • 检查恢复出的地址是否在Safe的授权签名者列表中,且该签名者的权重满足当前交易所需的多签阈值
  • 若上述条件满足,则该EOA签名被判定为有效

3. 与EIP-1271的兼容逻辑

对于合约类型的签名者,Safe会触发EIP-1271验证分支:

  • 从签名中提取目标合约地址与对应的签名数据
  • 调用该合约的isValidSignature方法,验证签名有效性
  • 若返回值为EIP-1271规定的魔术值0x1626ba7e,则判定该合约签名有效

这种分支处理方式,让Safe既符合EIP-1271的合约签名验证标准,又兼容了普通用户EOA的常规ECDSA签名习惯,无需让EOA额外实现合约逻辑即可作为多签参与者。

内容的提问来源于stack exchange,提问作者Wmm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:48:24