ERC-3005 多人批量元交易:一个代付人怎么替一整队人付 Gas
一分钱 Ether 都没有、手里只有代币的用户,过去在以太坊上寸步难行——转账需要先付 Gas,付 Gas 需要先有钱。元交易就是这个死结的一个解法:用户不发消息,只签一份授权书,由别人替他把交易发上链。2020 年 9 月 25 日起草的 ERC-3005 推进了半步:以前的代付要么一次搬一份签名,要么只收同一个发送者的多份,这份 Stagnant 提案把许多个不同人的元交易收进同一笔链上交易里统一验证,摊平每份的固定开销。
一份元交易里必须有什么
代付要成立,签名必须把执行要素钉死。processMetaBatch 处理每份元交易时要求校验九样东西:发送方、接收方、代币数额、代付人酬劳、一份元交易专用的 nonce、过期时间(可以填区块高度或时间戳)、代币合约地址、代付人地址、签名。函数参数表比九项短,因为 nonce、代币地址和代付人可以由合约从上下文与自身状态里推出来。哈希按固定顺序拼接:发送方、接收方、数额、酬劳、nonce、过期时间、代币合约、代付人,keccak 之后交给发送方私钥签名——顺序即防篡改,任何一项被中间人改动,哈希就对不上。
防重放的规则写得吝啬但严格:新交易的 nonce 必须恰好比该发送者在同一代币合约上的上一次成功元交易大 1;禁止与零地址互转;过期即失效。每个合约用 nonceOf 暴露计数器。任何一份子交易校验失败,处理方式在实现里二选一——整批回滚或者跳过坏的继续执行好的,提案把选择权留给实现者,并要求最终结果可被各方核对。

账怎么摊、坑在哪里
从代付人的角度,这是道算术题:一笔链上交易的 21000 Gas 地板费与哈希验证开销由整批分摊,收的酬劳总和高于成本即可运转,批越大单位成本越低。从普通用户角度,结论也很直接:新钱包第一次转代币可以完全不碰 Gas。需要想清楚的是信任结构的变化。你签的不再是自己发出的转账,而是一份交给第三方执行的承诺——过期时间没设好,签名可能在你以为作废之后仍然有效;酬劳字段是暗成本,显示给你的转账数额之外,这笔元交易里还藏着给代付人的抽成;代付人地址被写进签名域是好事,防的是同一份签名被换到另一个中间人手里接手执行,反过来说,没写进去的早期实现就留下了这种移花接木的空间。
后来生态的答案显然是 ERC-4337 那条账户抽象路线:验证与执行分离、Paymaster 补贴 Gas,能力覆盖且超越了这份提案。但代付批量化的思路并未死去:同一套算术被各类赞助服务复用,一次上链补贴一队新用户,成本结构和本文算的那笔账完全一致。区别只是当年由代币合约自己实现的 processMetaBatch,如今住进了账户层的入口合约与 Paymaster 里——验证逻辑从个别代币合约的附加函数,上移成了账户基础设施的标准工位。
把 ERC-3005 当案例读,学到的是一条通用原则:凡是别人替你发上链的交易,都值得先问一遍签名的有效窗口、金额构成与中间人身份。签名有效期的长短决定了你的撤销窗口有多大,酬劳字段的存在与否决定了免费体验的真实成本藏在哪个环节,中间人地址决定了出了故障之后链上记录会指向谁。三个问题都不难问,难的是养成每次必问的习惯。本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。