calldata 是什么、为什么要单独收费
一笔以太坊交易除了转账金额和签名,还可以附带一段原始字节,称为 calldata——通俗讲就是「给合约看的输入参数」。你调用 swap 时编码的路径、数量、截止时间,全都躺在这段字节里。它和合约存储不同:calldata 不写进状态树,但每个全节点都必须永久保存并分发它。网络为「存和传这些字节」付出真实资源,所以协议按字节单独收费,和指令执行的 Gas 分开计。
计费结构历来分两档:全零的字节很便宜(16 Gas 一档的源头),非零字节贵得多。原因直观:一串零在传输和存储层面可以被极其高效地压缩,随机字节则压不动,成本自然高。

EIP-2028 改了什么数字
EIP-2028 把非零 calldata 字节的费用从 68 Gas 降到 16 Gas,零字节保持 4 Gas 不变(提案文本引用的是当时的参数语境;现行参数请以客户端常量为准)。它随 2019 年 12 月创建、2020 年 2 月的伊斯坦布尔升级在以太坊主网激活。降价幅度接近四分之三,当时给出的理由有两条:一是网络资源研究更新后认为 68 这个数定得太保守;二是更根本的——Rollup 这个新东西正在长大。
为什么这笔账对二层特别关键
Optimistic Rollup 和 ZK Rollup 的安全模型都建立在一件事上:把批量交易的原始数据发布到以太坊主网,让任何人可以在主网数据上重放状态。也就是说,二层每处理一万笔交易,都要在主网写下一大坨压缩后的 calldata。这笔「数据发布费」曾是二层成本结构里的大头——用户的二层手续费里,相当比例其实是在替主网的 calldata 字节买单。把每字节从 68 砍到 16,等于直接给整个二层行业降了成本基础线。后来 Blob 交易(EIP-4844)给数据发布开了更便宜的专用通道,但那条路上线之前,EIP-2028 是二层成本下降最关键的一次单点改动。
一个直觉算术
一笔典型 ERC-20 转账的 calldata 大约 68 字节(4 字节选择器加 32+32 编码参数,其中前导零不少)。粗略看:全部按非零价 16 Gas/字节计算也不到 1100 Gas,在转账总成本(21000 基础 Gas 起步)里只是零头——所以日常用户几乎感觉不到 EIP-2028。但对一个每小时往主网提交几百万字节的 Sequencer 来说,同样字节从 68 降到 16,每小时省下的钱是数量级差别。费用改革对谁最慷慨,看单字节费率和谁的字节最多就够直观了。
零字节为什么便宜这么多
顺带一个容易忽略的现实:压缩假设意味着数据内容的字节分布会影响你的账单。Rollup 提交的压缩数据里零字节比例高,恰好吃到这档折扣;反过来说,如果你的合约把大额随机数据塞进 calldata,每字节都会按非零档收足。链上写数据的工具给出「便宜模式」时,有些其实是在调整字节的稀疏度,而不只是改数量——看账单结构比看宣传话术更诚实。
快速问答
问:calldata 费和存储费什么关系? 答:完全两条账。写入合约存储槽是一次性的昂贵动作(数千 Gas 起、清零有返还机制),calldata 是交易自带的临时输入,不进状态树、不产生状态膨胀,所以定价低得多。想知道项目把钱花在哪,看交易详情里「输入数据」长度就知道它走的是哪条路。
问:68 降到 16 之后还有降价吗? 答:calldata 单价此后基本稳定,后续更大幅度的数据降价由 Blob 通道和后续的 calldata 最小费提案在不同方向上继续调整,参数随网络升级而变化,以当期客户端常量为准。
一次提交的字节体检
把一笔 Rollup 数据提交交易的「输入数据」字段拖进十六进制查看器,你会看到明显的分区:开头的函数选择器和参数区结构整齐,后面的大批数据区压缩痕迹明显。想知道某条二层为什么比另一条便宜,量一量它每批提交的字节数与零字节比例,再对照当期的字节单价,就能算出用户的平均数据摊销。这种体检不依赖任何厂商报表,是普通用户也能做的成本审计——数据定价的透明性,正是按字节计费模式给生态留下的福利。
风险提示
本文是协议机制科普,不构成投资建议。费用参数随网络升级变化,涉及成本测算请以当期官方文档与实测为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。