数据上链但虚拟机读不到:EIP-2242 的 postdata 想拆的那笔账 图 1
数据上链但虚拟机读不到:EIP-2242 的 postdata 想拆的那笔账 · 图 1

为用不到的东西付钱,合不合理

以太坊上给合约传参、给协议留凭证的数据都塞在交易的 calldata 字段里,每个字节都要按规则计 Gas(费用细节见 calldata 是什么?交易数据为什么这么贵)。但有一类数据从头到尾没人要在链上”读”它:二层网络把交易批次 posted 回主网,只是为了让任何人将来能重放核验;存证场景把哈希写链,只是想要一个”某时刻存在过”的记录。程序永远不会在链上读取它们,可 calldata 的计价方式是按”虚拟机要处理这些字节”来设计的。EIP-2242 在 2019 年 8 月提出的思路干脆利落:既然只想买”数据被永久记录”这一件事,就为它单独开一个字段。字段名叫 postdata,交易会多出这个可选字段,数据随区块永久存档,但 EVM 里的任何程序都碰不到它——用提案引用的话说,遵循”不为用不到的东西付费”的原则。

数据上链但虚拟机读不到:EIP-2242 的 postdata 想拆的那笔账 图 2
数据上链但虚拟机读不到:EIP-2242 的 postdata 想拆的那笔账 · 图 2

便宜从哪里来

提案的省钱逻辑建立在虚拟机职责的边界上。calldata 之所以贵,一部分原因不在于链上存了几百字节的历史,而在于 EVM 在执行交易时需要加载、暴露这些数据,让合约能逐字节访问。postdata 把”可访问性”从保证里删掉,只保留”可用性”:字节会进区块、会被每个全节点下载保存、任何人可以用浏览器在原始交易里翻出来,但合约调用它时会发现根本不存在这样一个输入。提案文本在动机部分把 EIP-2028(见 交易数据有多贵:EIP-2028 把每字节从 68 Gas 砍到 16)描述为”降低 calldata 单价、朝鼓励使用历史而非状态方向迈出的一步”,而 postdata 是同方向更彻底的一步——不是降价,而是把不需要执行的部分从执行计费里整体剥离。具体折扣幅度提案给出了估算思路,但按其时代参数为准,本文不做精确换算。

为侧链欺诈证明量身定做

提案反复强调的落地场景是”信任最小化的侧链”。侧链把每批交易的原始数据 postdata 到主网,出块人用主网交易做 attestation;若某段数据造假,任何人可以从主网历史里取出原始字节,构造欺诈证明让主网裁决。这条路线要求主网只对”数据存在且公开可得”负责,不要求虚拟机看懂内容。提案也诚实地划了边界:走有效性证明(validity proof)路线的扩容方案用不了这个字段,因为它们要求数据在被发布的当下就完成链上验证,可访问性省不掉。这个划界和后来 EIP-4844 的 blob 设计(见 Blob 是什么:L2 费用为什么在 EIP-4844 后降了一截)如出一辙——后者同样选择”链下程序短期可验证、长期仅作数据可用性存档”的折中,并最终激活,而 2242 停留在 Stagnant。

一个常见误解:读不到不等于看不见

postdata 容易被望文生义地理解成”加密数据”或”隐藏数据”,提案原文没有这层含义。它防的不是浏览器和全节点——任何人下载区块都能按字节看这些内容——防的是 EVM 执行时的读取与计费。写成链上的任何字节都默认公开,这一条对普通用户是长期有效的常识:把隐私内容写进任何交易字段都等于登报。反方向也要警惕:有产品在链上写一段程序读不到的数据,再宣称”该数据已由链上程序核验”,两者在 2242 的定义下是互相矛盾的。

为什么它没走到终点

协议层新字段意味着所有客户端一致改动、所有交易签名规则重新对齐,而它服务的需求随后被两条更轻的路线分走了:数据可用性上,4844 用带独立计费市场的 blob 落地;链上存证需求则以可接受的溢价继续走 calldata。共识级提案的机会成本在以太坊的升级序列里极高,2242 这类”字段级增量”很难挤进议程,长期无人推进后进入 Stagnant。它留在提案库里的价值是一份干净的问题定义:把数据可用与数据可执行拆成两个商品来定价。本文为机制科普,不构成投资建议。