EIP-1271EIP签名Final(2018-07-25)合约签名验证
让合约也能「签名」:验签方调用 isValidSignature,由合约自己决定接受什么签名。
适用链:全部 EVM 链
为什么重要:多签钱包、ERC-4337 智能账户都是合约,它们没法用 ecrecover。不接 1271 就无法对它们验签。
函数签名与选择器
选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。
| 签名 / 字段 | 选择器 / topic0 | 说明 |
|---|---|---|
| isValidSignature(bytes32,bytes) | 校验通过必须返回 0x1626ba7e,其他任何返回值都视为失败。 |
代码模板
多签账户实现要点
多签账户实现要点Solidity
必须对签名者去重:不做去重的话,同一个人签两次就能满足 2/3 多签阈值。
实现与使用时的常见陷阱
- ✕返回值不是 bool 而是固定的 4 字节魔数,返回 true 之类的值会被判定为无效。
- ✕对 ecrecover 与 isValidSignature 的混合判断要有明确分支:先看长度,再决定走哪条路。
- ✕验证逻辑必须去重签名者,否则多签形同虚设。
相关标准
同属「签名」的其他标准