Gas 能存进合约账户里吗:EIP-3322 的三个操作码和退款上限之墙 图 1
Gas 能存进合约账户里吗:EIP-3322 的三个操作码和退款上限之墙 · 图 1

先补背景:退款是怎么运作的

以太坊不直接退 ETH,所谓退款是一段免收的 Gas 额度:一笔交易开始时,执行中攒下的退款计数在交易结束时换算成实际消耗的一部分。清某个存储槽可以拿退款在费用高峰抵掉一部分开销,于是链上催生过一个职业——凌晨三四点Gas 便宜时专门清别人不要的存储,用省下的手续费作为报酬。理解这层换算机制,才能看懂 EIP-3322 想做什么:它想把退款从「交易内的一次性抵扣」变成「可以跨交易储蓄的库存」。

Gas 能存进合约账户里吗:EIP-3322 的三个操作码和退款上限之墙 图 2
Gas 能存进合约账户里吗:EIP-3322 的三个操作码和退款上限之墙 · 图 2

三个操作码的分工

EIP-3322 在 2020 年 3 月 4 日由 William Morriss 提交,给合约账户加一个无符号的退款计数器,初始为零,配三条指令。SELFGAS(0x49):把本账户当前计数器值压上栈,计价与 SELFBALANCE 相同。STOREGAS(0x4b):弹出一个数额,花费固定 5000 加上该数额本身的 Gas,把这笔钱「存」进账户计数器——相当于把未来才能兑现的退款额度现在预付进去。USEGAS(0x4a):弹出一个数额,取它与账户计数器中较小者转入当前执行环境的退款计数器,固定花费 5000——把库存拿出来抵现在的账。提案的算盘写在动机里:Gas 价格有波峰波谷,写入类操作的退款率却相对固定,让合约在高价时支取低价时攒下的额度,整体成本曲线就能被熨平。

撞上的现实之墙

这道设想撞上的最大现实是 2021 年 8 月随伦敦升级生效的 EIP-3529:它大幅压缩了每笔交易可获得的退款,上限降到交易总用量的五分之一,动机部分直指退款机制造成的扭曲——清存储的收益让「本不必付全价的存储写入搭了顺风车」,而清理激励的受益者只是少数专业玩家。方向恰好相反:3322 想把退款做成可储存、可跨交易调配的资产;3529 在压缩退款本身。按 EIPs 仓库原文核验时,3322 状态为 Stagnant。此外它的指令编号也没能保住:0x49 这个槽位同样出现在 2021 年 9 月那份撤回的账户抽象提案 EIP-2938 的 PAYGAS 候选清单里,而 0x49 在现实时间线里还曾被别的功能讨论——编号争夺史本身,就是它停摆多年的旁证。

这笔期货账到底怎么算

用一笔具体推演还原提案的经济学。某合约先执行一次存储清理,得到 R 点退款额度;按 3322 的玩法它本可立刻把 R 兑换进账户库存,留待Gas 高峰用 USEGAS 支取。现实规则下 R 只能在本交易内按上限生效,没抵完的部分作废。3322 试图消灭「作废」二字:把退款从流水变成余额。批评者也正是在这里落笔——退款若可跨交易调配,等于给投机性 Gas 套利开了账户,账单在时间轴上的再分配会加剧拥堵时段的博弈。提案与反提案的两份文本都写得克制,分歧全在世界观:退款该是清理行为的即时报酬,还是合约的长期资产。

用户视角的三条常识

第一,钱包估算里的 Gas 从来不含任何「账户内余额」,主网没有给普通账户配 Gas 库存,任何教程声称「你的合约里存有可提取的 Gas」都可按诈骗话术处理;Gas 余额化唯一现实的近似,是充值型 L2 与 Gas 补贴服务,那是经济层设计,不是这条提案说的 EVM 机制。第二,存储清理类「Gas 返现」服务的收益在 3529 之后大幅缩水——清理仍有奖励,但比早期小得多,这条规则变化值得所有引用旧数据的教程修正,可参考 清存储还能退 Gas 吗?EIP-3529 把退款上限砍到五分之一 里的旧新对照。第三,费用高企时合约开发者能用的现实工具仍然是时间——批量操作选低峰、退款敏感逻辑别赌上限——而不是任何存Gas 的按钮。

为什么这份提案仍值得读

停摆不等于无价值。EIP-3322 是「Gas 作为可管理资源」这条思路最完整的早期文本,此后关于 Gas 市场、费用保险、批量证明的民间设计,几乎都在回答它提出的问题:公共账本能否给资源加一层时间缓冲。它给出的答案(用三条操作码)失败了,但它提出的问题至今挂在每个写合约账单的人面前。

风险提示

本文涉及的指令编号、提案状态与机制描述按 EIPs 官方仓库原文核验,可能随社区推进变化,请以仓库当前内容为准。Gas 机制理解有助于控制使用成本,但不构成投资建议;链上费用以实际交易回执与官方计价规则为准。