代付链路里那枚多余的签名
以太坊早期的 Gas 代付方案里有一类叫 Gas 站/中继模式:用户把想执行的操作签个名丢给链下中继网络,出块的中继者替他把这笔操作推上链。问题在于,就算中继者只想执行一个和签名无关的合约函数,他也必须发一笔正规交易——哪怕 Gas 价设成零、msg.sender 从头到尾没被合约用过一次,节点仍然要完整跑一遍交易签名的 ecrecover 验证。EIP-2474 在 2020 年 1 月 19 日由 Ricardo Guilherme Schmidt 提出,瞄准的就是这笔纯浪费的验签:既然这笔交易的签名在逻辑上是摆设,那让出块人干脆别签。按仓库原文核验时,该提案处于 Stagnant,从未激活。原文举例引用的 Gas 站类合约即提案语境中的 EIP-1077 角色,那份提案文件后来被搬出主干,本文只按 2474 原文的语境转述。

规则:块首免签调用,偷看发送者即失效
提案给区块受益人(block.coinbase,PoS 时代就是出块验证者)开了一种特殊执行通道:验证者可以在区块最前面安放免签名的合约调用,正常消耗区块 Gas 额度,但调用方不付 Gas 费——费用由被调合约以别的形式付给验证者,比如 EIP-2474 引用的场景里,合约靠交易费差价养活中继服务。这套免签调用有一条生死线:合约若试图读取 msg.sender,执行直接抛无效跳转终止——因为根本没有发送者,就没有发送者可读。免签调用把 tx.origin 设成 block.coinbase 本身、gasPrice 记为零,其余执行语义与普通调用无异。这套设计的防欺诈锚点全压在 tx.origin 上:任何靠 msg.sender 认人的合约自动免疫,能跑的只有本就按「谁来执行无所谓」设计的合约。
为什么它当年看起来够用、后来不够用了
2020 年的语境里这个方案成本极低:不新增交易类型、不动状态结构,只加一条「验证者直调」执行规则。但它有两个绕不过去的问题。第一是信任模型:免签调用跳过了交易签名这道最硬的授权凭证,合法性完全依赖出块人按约定摆放——验证者能进块首塞调用,就能塞什么调用,规则只能约束「合约自己拒绝不配」,无法在协议层证伪。第二是它把 tx.origin 这个本就被安全社区警惕的字段又往前推了一层:链上出现了一批「见 tx.origin 是出块人就放行」的合约逻辑。后来更完备的路线出现——EIP-4337 用专门的入口合约和签名聚合把代付做成可验证、可批量的标准件,见 EIP-4337 之前:EIP-2938 想让以太坊协议直接接纳账户抽象;再往后 7702 的授权列表让授权本身回到可签名结构。免签直调这种「用出块权背书」的形态被逐条替代,2474 停在 Stagnant 是这条演化线的自然注脚。
从浏览器反推:免签调用长什么样
用户视角值得记住几个识别特征。如果 2474 类机制存在,区块浏览器里对应的是一个没有交易哈希、却真实改变了合约状态的执行记录,tx.origin 字段显示为当轮出块地址,Gas 费为零——这类记录在任何一条主网上都不存在,因此现实中你看到「零费已确认」的交易,几乎总是走的是 4337 系或赞助 Gas 通道(用户侧看到 paymaster 字段),或者是测试网补贴,而不是某种免签直调。把「费用为零」直接读成「官方免费通道」是常见误判;Gas 的减免永远发生在协议认可的某种结构里,而不是凭空消失。
一个反直觉的安全教训
这份停摆提案对今天的最大价值反而是反面教材:当年有人提议把交易费用的减免做成「验证者可以塞免签动作」,而这个形态的安全论证全部建立在「合约自己会拒绝不配执行」的假设上。回看历史,绝大多数靠字段自检的防御都被更精巧的调用链绕开过。它提醒普通用户一个判别法:凡声称「这笔操作不收你费」的服务,先问费用从哪个结构字段里出——有 paymaster 授权、有赞助签名、有兑换合约兜底,三者皆无的「免费」,多半在别处埋着成本或风险。
风险提示
本文涉及的提案状态与规则按 EIPs 官方仓库原文核验,该提案未激活,请以仓库当前内容为准。了解代付机制有助于识别费用与授权风险,但不构成投资建议;对来路不明的免Gas操作保持警惕,签名前核对完整调用内容。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。