ERC-7638 批量调用编码:一串调用压成一段字节再交给钱包
给十张 NFT 挨个挂单,或在三个合约之间完成一次换仓,每一步都要一笔独立交易的话,光是 calldata 与基础 gas 就把成本堆高。ERC-7638(Batch Calls Encoding in SCA)提出一种紧凑的批量编码:应用把用户意图交给智能合约钱包扩展,钱包把多个调用压成一串字节,用一次 executeOperation 送进用户的钱包合约执行。标准明确批量既可以做成原子操作,也可以做成非原子操作。按以太坊 ercs 仓库的记录,提案状态为 Draft,创建于 2024 年 2 月 26 日。
字节的排布:二十、三十二、再加一段变长
编码规则没有抽象层,就是一段紧接一段的定长头加变长体。每个 Call 单元先放 to,二十字节的被调合约地址;再放 value,三十二字节、以 wei 计价的随调用转出的 ETH 数量;再放三十二字节的 data length,声明后续 data 有多少字节;最后是按该长度截取的 data,即发给目标合约的编码后函数数据。多个 Call 单元首尾相连,就构成一次批量序列。这种布局的收益来自省掉重复的调用信封:一笔交易只付一次基础开销,路由与签名验证做一遍,剩下的只是把这串字节拆开依次执行。标准同时定义 atomSignCall 用于签名这一串调用,以及 makeAtomSignInvalid 用来作废签名——批量签名一旦被滥用就是多个操作一次性生效,留出显式作废通道是对称的安全配套。

原子与非原子,两种默认值的安全差异
标准给自身划的边界很清楚:这只是一套数据压缩编码,不隐藏也不丢弃数据——批量里每个调用的目标与金额都以明文留在 calldata 里,隐私收益为零,链上观察者依旧能逐笔复原你的操作序列,别把省 gas 的编码误读成防窥探。执行语义的分岔也要提前想好:原子模式把所有步骤捆进一次执行,任何一步回退则全部作废,适合挂单加领取这类必须齐步走的组合;非原子模式允许半途而成,适合批量领取这类容错任务,但事后要逐条确认落到了哪几步。作废通道补上的是最贵的缺口:批量签名的效力覆盖全部子调用,签错了没有反悔路径才是最疼的。
与账户抽象生态里的批量方案对照着读更清楚:ERC-5792 一类钱包调用规范走的是结构化的调用数组,字段各归各位;本提案把同样的信息压进手工拼接的字节流,目标直指 calldata 尺寸与链上验证路径的简化。两者解决的是一类问题,取舍不同——字节编码更省、更靠约定,结构化数组更通用、更好被通用工具理解。钱包端真正决定体验的是解码预览:无论哪种编码,若界面只能显示一串十六进制,用户实际上是在盲签,编码越紧凑,这种盲签的代价越大。
原子批量意味着全部调用在同一执行流里推进,任何一步失败整体回滚,好处是不留半成品状态,坏处是失败时整批重来、前面步骤的调查也白付。非原子批量允许部分成功,适合“领取十个空投里成功几个都行”的容错场景,但用户必须逐条核对最终落到了哪几步。对普通持有人,这类编码的实际接触点通常是钱包的“批量”按钮,值得养成三个习惯:确认批量里每一项的目标合约地址而不是只看第一行摘要;确认原子性开关当前处于哪一档;签名前留意该签名的作废通道是否可用、nonce 状态在哪里查。批量把复杂度压给编码与钱包实现,一次签错也被同样地批量放大。标准仍是草案,编码细节以仓库当前文本为准。本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。