钱包不存 ETH 也能办事:EIP-2711 当年想直接写进交易的代付、批次与到期 图 1
钱包不存 ETH 也能办事:EIP-2711 当年想直接写进交易的代付、批次与到期 · 图 1

一个提案想同时解决三件事

2020 年 6 月,开发者 Micah Zoltu 提交了 EIP-2711,试图在协议层一口气解决三个日常痛点:钱包里没有 ETH 的人付不了 Gas;想连着办几件事得发好几笔交易互相等待;挂在网络里的交易永远有效、事后想让它自动作废没有通道。它给出的方案是一种新的带类型交易(承接 交易封套是什么?EIP-2718 为什么给交易加类型字节 讲的封套结构),在发送人签名之外允许再叠一个代付人签名,交易体里可以打包一串按顺序执行的子交易,还加了一个到期时间字段。这个提案的最终状态是 Withdrawn(已撤回),从未在任何主网升级中激活,但它是”协议层代付”这条路线上最完整的早期设计,读懂它能帮你看清今天各种代付产品各自继承了哪一块、丢掉了哪一块。

钱包不存 ETH 也能办事:EIP-2711 当年想直接写进交易的代付、批次与到期 图 2
钱包不存 ETH 也能办事:EIP-2711 当年想直接写进交易的代付、批次与到期 · 图 2

双签名:谁的地址花 Gas 一目了然

提案把交易拆成发送人部分和代付人部分。发送人签名决定了常规意义上”这笔交易是谁发的”:提案文本明确,由发送人签名恢复出的地址就是第一调用帧里的 msg.sender、是 tx.origin、扣 nonce 的地址,也是交易带价值时被扣 ETH 的地址。而 Gas 的扣款对象分两种情况:没有代付签名时,Gas 从发送人余额扣;带上了代付签名,就从代付签名恢复出的地址扣。两个签名各签各的载荷,代付人对交易内容的承诺是一次独立的密码学确认,而不是”信任发送人”的口头约定。相比在合约层做转发,这种设计的好处是所有合约不用逐个改造就能被代付,代价是每笔交易的验证规则多了一层分支。

四种子类型与到期字段

提案内部按”要不要代付、要不要自带 Gas 价格”分了四种子类型,把子交易列表、nonce、ChainId、ValidUntil、gasLimit、gasPrice 等字段按组合排进载荷。子交易本身很简单,就是 [to, value, data] 的嵌套数组,同一发送人的多笔操作按顺序执行,回执里也为每个子交易各留一个状态位。两个生命周期字段值得单独说:ChainId 规定为 0 时不限链、非 0 时只在该链有效;ValidUntil 规定为 0 时永不过期,否则交易只能被打包进时间戳不超过它的区块。这等于把”过期作废”写进共识规则,而不是靠节点各自清理内存池。

它为什么被撤回

提案文本里有一处后来显得微妙的选择:它占用了类型为 2 的交易编号。这个编号最终被 EIP-1559 的费用机制(见 EIP-1559 是什么?以太坊费用怎么由基础费和小费决定)使用并在伦敦升级落地,而 2711 自己则在推进过程中被作者撤回。协议层的共识修改要付出巨大的协调成本,打包执行、代付、到期各自又都能用更轻的办法逼近:智能账户路线(ERC-4337,见 ERC-4337 是什么?智能账户怎么执行和付手续费)把批量和到期做进了合约与专用内存池,转发器和代付服务把付费方问题做在了合约层。多线并进之下,“改一次协议”的性价比不复存在,这是它退出主战场的大背景,具体决策过程以提案讨论串记录为准。

和今天代付产品的分界

拿 2711 当标尺,今天的”免 Gas""代付”话术可以被拆得很干净。协议层双签名意味着代付人对每一笔内容单独签过名,责任在密码学上闭环;ERC-4337 的 paymaster 路线里,代付承诺由合约策略与链下服务约定承担(见 代付服务怎么和钱包说话:ERC-7677 给 paymaster 定的标准接口);ERC-2771 转发器路线则改变了合约眼中 msg.sender 的含义(见 ERC-2771 可信转发器:代付 Gas 时合约眼里”谁在发消息”是怎么改的)。三种结构里”谁在付、按什么条件付、超支找谁”的答案完全不同。用户侧的判断动作也因此不同:看到免费宣称时,先查费用到底由哪个地址、哪份合约或哪条链下协议兜底,找不到可核验的承担方,就该把”免费”理解为待兑现的营销。

对普通用户的三点提醒

第一,交易到期、批量执行这些能力今天主要活在外层协议里,声称”以太坊协议已支持交易自动过期”的说法不成立。第二,代付不改变你交出的签名内容,签之前该核的收款地址、授权范围一个字都不能少。第三,同一套”别人替你付”的结构既可以是钱包厂商的善意补贴,也可以是诱导你签危险交易的钩子,区分的办法永远是核对签名内容而不是核对补贴宣传。本文只是机制梳理,不构成投资建议。