跳到正文

研究指南

加密现货研究

合约签名:在相关状态下核验有效性

合约签名的字节不变,也可能在一个状态有效、另一个状态无效。研究ERC1271时,应把结果绑定实际查询的合约、摘要、签名和历史状态,不能用今天的答案自动判定过去应用能否接受请求。

本题重做同一签名在两个观察点的核验,再区分结果支持什么。它不重建完整治理过程,也不从返回值推断签署人的法律身份。

保留完整核验对象

ERC1271的Specification部分定义isValidSignature,针对给定摘要和签名,以bytes4类型的magic value 0x1626ba7e表示通过。规范明确允许状态、时间与签署权限等上下文依赖,并要求核验不修改状态。

记录网络、签名合约地址、确切摘要、原始签名字节、区块哈希和调用上下文。外层交易发送者的EOA签名属于另一对象;应用若依赖合约授权,本地恢复出某EOA地址不等于完成合约决定。

摘要必须是应用实际验证的摘要,保存原消息与域如何生成它。两条可读请求文本相近,也可能哈希不同;复制来的摘要还可能与研究中所述请求脱节。不能只保留人类可读标题。

签名长度和格式由实现处理,不能把某个示例的固定长度视为全部合约签名规则。共享报告可用脱敏编号,但私有底稿应能连接到完整原始输入。

假设主例:owner轮换

设虚构签名合约W采用简单规则:从输入恢复签署者,只有与当前授权owner相同才接受。这是本例实现假设,不是所有ERC1271钱包必须采用的政策。

H一百时,Alice是授权owner,摘要D与签名S通过。到H一百二十,已验证政策更新使Bob成为当前owner。对完全相同D、S再次调用,在假设的当前owner规则下不通过。

观察相关owner状态相同D与S的结果解读
H一百Alice0x1626ba7e此状态下W接受该签名
H一百二十Bob本例返回0xffffffff后续政策下不接受
通过缺历史状态的接口查H一百此次调用未知取回或执行错误历史核验未解决

非magic返回只是本例的拒绝方式,不是规范要求统一使用的失败码。前两条有效观察说明W判断改变,不证明Alice从未授权D,也不自动让过去应用接受行为追溯失效。

两次调用保存为独立记录。状态过渡是解释,不应成为用最新结果覆盖旧结果的理由。若只能取得H一百二十,早期结论应保持未知,不能凭owner轮换叙述替代旧状态查询。

按类型解码返回值

以所需bytes4值作为成功条件,不能接受任意非零值或一般交易成功标志。保存原始返回数据和解码结果,便于检查ABI、填充或截断问题。

区分明确非magic、调用revert、提供方错误和返回数据畸形。revert可能来自签名拒绝处理,也可能因执行额度不足或历史依赖不可取回而无法完成检查。诊断之前,不要统称密码学失败。

调用环境应有充分且有记录的资源。若逻辑读取另一合约、依赖caller或其他上下文,也保存依赖。不同条件下方便执行的一次查询,不必然重现应用当时的检查。

对所谓“同样输入结果冲突”,先核区块哈希、调用者、实现和依赖状态是否真的相同。只比较D与S两个字段而漏掉状态,容易将合理变更误报为不确定系统行为。

不同政策可能保留旧签名

owner轮换不会普遍让旧签名失效。另一实现可能接受预先批准摘要、历史owner快照或其他编码政策,此时D与S在当前owner改变后仍可能通过。

因此要查实际政策及有效版本,不能从标准接口名推规则。代理实现等依赖发生变化时,把每个历史调用连接当时代码和配置。当前ABI或页面说明未必解释过去结果。

政策未解释清楚时,仍可发布窄观察:某块调用返回magic value。但不能进一步声称为何通过,或预测会一直通过。返回结果和机制解释应分别保留核验状态。

核验不等于消费或执行

接受查询不是资产已移动的证据,也不独自说明消息已消费或不能重放。使用签名的应用可能另设nonce、到期、取消或一次性规则。

例如W在H一百接受D,应用却因为订单nonce已用而拒绝请求;另一应用签名通过,但转账因余额条件不满足失败。应分开合约签名核验、应用资格和已提交执行三栏,不能把相同签名通过两次算成两笔经济行动。

研究授权事件时,magic value截图不识别法律自然人、不证明抵押品充足,也不证明已完成损失。要找到应用记录与最终状态,再作数量结论。这样也能明确下一步要补的是状态、签名对象还是执行材料。

记录三个不同时间

签名所称创建时间、被核验状态和研究者执行查询的日期可以不同。假设S在H一百三十才提供给分析者,但成功重建H一百检查,则结果描述H一百,不证明分析者当时已经取得或看过S。证据可得历史与合约接受历史要分别保留。

应用存档也要确定显示的是原始核验结果,还是界面重新用当前状态计算。旧请求页面显示新判断,不必然表示执行时记录被改;先核接口语义,再讨论历史矛盾。若应用保存了原始返回或验证事件,它支持当时决定,若仅给当前查询按钮,则只说明今天重算。

同一报告中可并列“当时应用留存接受”“今天在新状态不接受”和“旧状态独立重核成功”三个陈述。它们可以相容,不需强选一个覆盖另外两个。缺少原始存档时,应写明哪条过渡尚不能独立建立。

可复做核验清单

操作保存材料暂停条件
固定签名对象原消息、域、摘要构造摘要不能连接所称请求
保留签名完整字节与脱敏标识只剩截断截图
选历史状态网络、W、块哈希、实现把当前状态贴旧日期
执行检查上下文、原始返回、bytes4服务错误未解释
比较状态政策过渡和两次结果不同条件被称完全相同
核下游行动应用nonce、资格、回执将核验当执行

政策变化、历史状态补回、摘要更正或同条件出现不同结果后,应重开记录。发布哪个状态接受哪个签名对象,同时保留不可观察时点的不确定性。它提供可审查授权决定,而非永久有效证书。

常见问题

ERC1271通过后会永久有效吗?

不一定。实现可依赖时间或状态,需要保留观察上下文与实际政策。

签名核验通过能证明应用已执行吗?

不能。应用资格、重放处理与已提交执行都需独立证据。

相关阅读