用 revert 派活:ERC-5559 把状态写操作弹给链下处理者
一笔调用主网合约的转账,合约不但没有执行,反而回滚了,回滚数据里却附着一整套签名参数和一条网址——这不是故障,这是 ERC-5559 设计好的委托动作。摘要的解释:智能合约可以把各类任务交给外部处理者解决,从而把数据留在主网上的 gas 成本降下来,这些处理者扮演核心合约的延伸。文档创建于 2022 年 6 月 23 日,仓库记录状态为 Stagnant,属于长期无人推进的归档方案,正文明确它可以与 ERC-3668 配套实现——那份标准管读方向的链下解析,本提案补上写方向的缺口。
一次被设计出来的回退
流程从反直觉处开始。客户端照常调用主网合约的状态变更函数,比如示例里的 setAddr(bytes32 node, address a);合约不写任何存储,直接以特定错误回滚,原文的错误形式是 StorageHandledByOffChainDatabase(sender, url, data)。三个参数把接力棒包圆:sender 是按 ABI 编码的结构体,内含域数据,说明这笔操作来自哪个链、哪个合约、哪个函数选择器;url 指出该去哪儿完成操作;data 是编码后的参数。signature 由发送方用 sender 与 data 两个参数按 EIP-712 构造结构化签名——签名在链下提交时才生成,主网合约从头到尾没有为这笔操作收过 gas。调用方拿到回滚数据后,去指定处理者处提交同一份意图,处理者再回执或由协议按约定同步回主网视角。动机部分给的适用画面有两个:把 ENS 域名的解析操作放到二层或链下数据库里管理,像管理原生一层代币一样;或者把数字身份数据存到外部处理者里,像存在主网合约里一样。

两类处理者,两种信任
标准把处理者类型本身也纳入规范,因为类型决定了协议的权限与安全边界。一类是链下数据库处理者,规范给的场景是合约作者希望用户修改自己的记录而不付 gas;代价直白——数据主权在数据库运营方,可用性与诚实性都靠它。另一类是二层处理者,变更发生在二层合约里,数据可验证性由二层机制背书,但主网合约看到的世界要等桥接与证明的节奏。规范专门列了权衡清单:不同处理者类型对应不同的运营成本、终局性保证和去中心化程度——这是这份标准最有用的部分,它强迫实现者在“便宜”之外把另外两个轴摆上台面。
处理者自己的改动也要广播
规范给核心变量定了透明度条款:处理者的链标识与合约地址(二层类)、数据库网址(链下类)这几项核心变量一旦变更,必须发出对应事件,事件名原文列了三条,其中网址变更对应的是 OffChainDatabaseHandlerURLChanged(string indexed previousUrl, string indexed newUrl)。这条要求的下游含义具体:客户端对处理者地址和网址有缓存,变更事件是唯一的失效信号;监听不到这三条事件的集成,等于默认接受“上游悄悄搬家、下游继续往旧址送数据”的故障模式。
归档方案在今天的投影
这份 Stagnant 文本没有推广开来,但它的结构几乎是为今天已存在的每一类“链上合约加链下执行”产品画的:账户抽象的打包器、游戏的侧链结算、NFT 元数据的链下存储,全在这条回退流的延长线上。用它做检查再合适不过:确认一个“主网合约”的真实数据落在哪类处理者上,成本、终局性、去中心化三轴各是什么答案;核对处理者核心变量的变更事件是否在监听范围里;确认那笔由 revert 派发的写操作要求你在链下签的 EIP-712 消息,签名字段里的链号和合约地址与你正在交互的主网地址是否一致——签名域错了,等于授权给了另一个系统的同名函数。本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。