解释eip712Domain返回字段、fields位图与扩展数组,说明钱包和索引器如何发现签名域及监听域变化。
ERC-5267解决的是“怎样发现签名域”,不是“这笔签名是否值得签”。
返回值拆解
eip712Domain返回的fields是位图:最低位起依次对应name、version、chainId、verifyingContract和salt。位未设置时,即使返回位置里是空字符串或零值,客户端也不能把该字段加入domain。
先看结论
| 证据项 | 规范结论 |
|---|---|
| 1 | eip712Domain()返回fields位图、name、version、chainId、verifyingContract、salt和extensions。 |
| 2 | fields位图按既定顺序表明哪些标准域字段实际存在,调用方不能把空字符串自动解释为“字段存在”。 |
| 3 | 实现若让域值发生可能影响签名的变化,应发出EIP712DomainChanged事件供客户端重新读取。 |
fields位图
钱包可先读取域,再与待签typed data里的domain逐项比较。chainId错位通常意味着网络选择不一致;verifyingContract不同则可能把签名交给完全不同的验证者。
变更监听
缓存域时应同时保存合约地址、chainId和读取区块。收到EIP712DomainChanged事件后重新读取;代理升级也值得触发复查,因为实现改变可能影响域构造。
客户端怎样实现
| 检查层 | 需要留下的证据 | 阻断条件 |
|---|---|---|
| 返回值拆解 | 从Ethereum Improvement Proposals确认ERC-5267如何读取EIP-712域的正式定义,并保存网络、地址与读取时间 | 定义或版本对不上时,不继续套用本文步骤 |
| fields位图 | 在原始返回、签名消息或交易指令中定位对应字段,不用界面缩写代替 | 找不到原始值时,把结果标为未验证 |
| 变更监听 | 用OpenZeppelin EIP712复核实现行为,特别记录可选扩展与权限主体 | 实现与规范语义不一致时,按具体部署重新评审 |
| 签名前核对 | 构造一个失败样例,确认客户端会明确拒绝而不是静默修正 | 失败仍被显示为成功时,停止上线并补充状态校验 |
记录ERC-5267 EIP-712域读取时,把“输入快照”和“判断结果”分开。该主题的快照包含原始bytes、字段单位、对象地址、区块高度与Ethereum Improvement Proposals版本;结果注明通过的规则和仍未知的签名前核对。这样即使ERC-5267如何读取EIP-712域随后变化,也能复现当时的结论。
ERC-5267 EIP-712域读取的测试至少覆盖正常路径、缺少fields位图、提交前状态改变及客户端不支持当前版本。前几类验证变更监听边界,最后一类确认产品不会删除字段或改走未经用户确认的回退路径。
规范和实现材料
| 来源 | 用途 |
|---|---|
| Ethereum Improvement Proposals | 正式接口、字段与规范语义 |
| OpenZeppelin EIP712 | 实现路径、兼容性或安全边界 |
ERC-5267 EIP-712域读取的资料访问口径为2026-07-17;遇到Draft状态、可升级部署或可变网络参数,应在后续复核日重新读取Ethereum Improvement Proposals。
签名前核对
规范没有替应用增加nonce、deadline或用途限制。域完全一致的消息仍可能被重复提交,是否消费nonce必须回到业务合约验证代码。
仍需单独确认
ERC-5267只负责域的发现,不会证明待签消息安全,也不替应用提供nonce与过期机制。 相邻知识可继续对照EIP-712签名域、ERC-1271合约签名。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。