21000 不再是一块铁板:EIP-2780 想把交易的固定底费拆成资源账单 图 1
21000 不再是一块铁板:EIP-2780 想把交易的固定底费拆成资源账单 · 图 1

一个从 2015 年用到今天的常数

以太坊自启动以来给每笔交易收一笔固有成本(intrinsic gas):不管这笔交易什么都不干还是转出资产,签名恢复、账户读写这些基础动作打包价 21000 Gas。这个常数写进了无数钱包的估算器、区块浏览器的反算公式和老用户的肌肉记忆。但”打包价”意味着偏差:给一个已存在地址转 0 以太币,和一笔会创建新账户的转账,消耗的状态资源完全不同,却付同一份底费。EIP-2780 的 Abstract 一句话点题:把平的 21000 拆成按资源计价的显式项。

21000 不再是一块铁板:EIP-2780 想把交易的固定底费拆成资源账单 图 2
21000 不再是一块铁板:EIP-2780 想把交易的固定底费拆成资源账单 · 图 2

拆解后的三块基石

2780 的账本以三个命名项打底:TX_BASE_COST 为 12000,覆盖一次 ECDSA 签名恢复、发送方账户的读取与写入、以及交易字节入块;COLD_ACCOUNT_ACCESS 为 3000,按冷访问费率给接收方账户”摸一下”——即便它其实已被预热,也固定收冷价,好让底层费用不依赖状态读取;TX_VALUE_COST 为 6000,覆盖转账触发的余额写入与事件日志。普通以太坊转账恰好是 12000 加 3000 加 6000 等于 21000——提案特意在示例表里保住这个数,让最常用路径的历史直觉不被打破。

真正的新账在”谁撑大状态谁补票”

拆分之后浮出水面的,是包价时代被摊平忽略的成本:创建账户。一笔转账如果让一个全新地址出现在状态树里,除了执行 Gas 还要补交状态 Gas,示例表中这项是 183,600——对应一个新账户叶子的字节数乘以每字节状态单价。此前只有合约内部调用创建账户才付这笔钱,顶层转账搭了便车。另一个分账点在 EIP-7702 设置代码授权的新地形上:每条授权按执行与状态两项分别计费。定价原则从”事前为最坏情况预留”改为”运行时按实际发生收费”——付得起入块费用但付不起运行时项的交易会像调用帧内耗尽 Gas 一样被打包后回滚。

一份 2020 年提案的二次生命

2780 其实早在 2020 年 7 月 11 日就由 Matt Garnett 等人提出,最初的动机只是”降低交易固有成本”。让它重生的是一系列费用重定价提案:它现在的前置依赖列表里挂着状态 Gas 定价与访问成本改价等新提案,等于六年前的问题在新技术地基上重讲了一遍。目前状态是 Review(评审中),提案自己标注所有数字均为暂定值,会随客户端性能优化继续调整——它没有排进任何已确认的升级。

对钱包和 Gas 估算器意味着什么

2780 的 Backward Compatibility 一节罕见地点名了整条工具链:钱包、RPC 服务、Gas 估算器,以及任何假设固有成本等于 21000 的逻辑,全部需要更新。对普通用户,感知层面可能有三个变化:给全新地址转账的最低成本略高于给老地址转账;收据反算实付费用的方法不变,但不同交易形态的固有项加法不再相同;区块浏览器的 Gas 单位换算等基础解释仍成立,见 以太坊Gas费怎么估算?。在此之前,所有”以太坊已把底费改成按资源收”的说法都不成立。

现阶段怎么核对费用

升级落地前,判断当前网络收费口径的办法不变:以钱包显示的估算与回执上的 Gas 用量乘以实际单价为准,机制解释类文章(包括本文)都不构成数字依据。还有一类误读值得提前排掉:拆底费不等于”转账变贵”或”Gas 大降价”,它是将同一批成本换个记法并补上新账户的状态票——对高频使用老地址的用户几乎无感,对批量创建新地址的合约部署方则是实打实的账。历史上每次 Gas 语义微调(例如 calldata 费用下限 EIP-7623 生效的那一轮),都伴随估算器与钱包的一次同步;若 2780 最终进入某次升级,你大概率只在钱包更新日志和区块浏览器的帮助页里见到它,而不需要在自己的设备上做任何操作。风险提示:本文为 Gas 机制与提案分析,不构成投资建议;费用数字以当前网络与最新提案文本为准。