EIP-2242 Transaction Postdata 深度解析:为 Layer 2 数据可用性设计的链上数据发布通道
【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs
导读
EIP-2242(Transaction Postdata)是 2019 年提出的一项 Ethereum 核心层(Core)共识修改提案,核心思路是在交易中新增一个可选的postdata字段,用于把数据发布到链上、但不允许 EVM 读取。本文基于本仓库 EIPS/eip-2242.md 的完整规范,结合仓库内 EIP-2028、EIP-2718、EIP-4844 等关联提案,从设计动机、交易格式、RLP 编码结构、gas 计费到兼容性与后续演进,系统讲解这条"数据可用性通道"的技术全貌,帮助读者理解"数据上链 ≠ 数据可被合约读取"这一范式的来龙去脉。
一、提案背景:区块链作为"数据可用性与仲裁层"
EIP-2242 的提出背景,源自当时以太坊社区正在发生的一场范式转变。在 Eth 2.0 的研究中,Execution Environments(执行环境) 与 stateless clients(无状态客户端) 概念的兴起,让区块链的角色从"通用计算平台"开始向"安全的数据可用性与仲裁层"转变:
- 数据可用性层:为上层系统提供一个全球公认的、随时可检索的数据来源;
- 仲裁层:处理欺诈证明(fraud proofs)或有效性证明(validity proofs),以及数据可用性证明。
作者 John Adler 认为,这一范式同样可以应用到 Eth 1.x 上:不引入 Execution Environments,而是用**信任最小化的侧链(trust-minimized side chains)**来替代。EIP-2242 正是为这种侧链方案提供底层支撑的共识层修改。
值得注意:该提案创建于 2019-08-16,当时采用的字段命名(
startGas、gasPrice)是 EIP-1559 落地前的传统交易字段风格,反映了其历史语境。
二、动机:遵循"不为用不到的东西付费"原则
2.1 EIP-2028 的铺垫:calldata 降费
提案首先引用了同仓库的 EIPS/eip-2028.md(Transaction data gas cost reduction,状态为 Final)。EIP-2028 将 calldata 的非零字节 gas 成本从 68 gas/字节降至 16 gas/字节,是"鼓励使用历史数据而非状态数据"的正确方向:
- On-Chain Scalability:calldata 带宽的提升意味着单块可容纳更多数据;
- Layer 2 扩展:STARKs/SNARKs 证明、欺诈证明的 Merkle 路径传输,以及把数据通过 calldata 发布到主链以作数据可用性(data availability),都能受益;
- 无状态客户端:同样的模型可用于定价状态访问成本。
2.2 问题:EVM 其实不需要"看到"所有链上数据
EIP-2028 降低的是 calldata 的读取成本,但一个更深层的问题被 EIP-2242 指出:并非所有发布到链上的数据都需要被 EVM 执行逻辑处理。例如,侧链区块的数据只是需要被"证明其可用",而不是被主链合约逐字节解读。
因此,遵循"don't pay for what you don't use"(不为用不到的东西付费)原则,需要一种全新的、独立于 EVM 的数据发布方式——这正是postdata字段的使命。
2.3 适用范围:欺诈证明侧链而非有效性证明侧链
提案对适用场景做了明确界定:
- 基于欺诈证明的信任最小化侧链:只需要确保侧链区块提议者已证明"某些数据确实可用",数据的真伪可以在欺诈证明流程中事后验证。这类方案可以直接受益于本提案;
- 基于有效性证明的侧链:要求对发布的数据立即完成认证,因此无法使用本提案的机制,需要留待未来的 EIP 专门处理(即"多线程数据可用性"方向)。
三、规范(Specification):postdata字段的完整设计
EIP-2242 提出一项自FORK_BLKNUM起生效的共识修改。以下内容完整继承自 EIPS/eip-2242.md 的规范章节。
3.1 序列化交易的新格式
在现有交易上追加一个可选字段postdata,序列化后的交易格式为:
"from": bytes20, "to": bytes20, "startGas": uint256, "gasPrice": uint256, "value": uint256, "data": bytes, "nonce": uint256, ["postdata": bytes],要点:
postdata是可选字段(方括号表示可选),仅在需要时追加到交易末尾;- 见证人(witness,即签名者)对上述结构的 RLP 编码 进行签名——即
postdata也纳入被签名的数据范围; postdata中的数据被发布到链上,供 Layer 2 系统后续按历史数据检索,主链 EVM 不参与解读。
3.2postdata的内部 RLP 结构
postdata本身是一个 RLP 编码的两元组(twople):
postdata = RLP(version: uint64, data: bytes)version:版本号,当前规范要求取值为0。引入版本号是为了给未来扩展留出空间——不同的version值可以由未来的 EIP 定义不同的数据解释方案;data:一个 RLP 编码的二进制数据列表。本 EIP不解释data的任何内部结构,仅将其视为二进制大块(binary blob)原样上链。
3.3 Gas 成本规则
postdata的 gas 计费规则非常简洁:
- 发布数据的成本为1 gas/字节;
- 该成本从交易的
startGas中扣除; - 若扣除后剩余 gas非正(non-positive),交易立即以out of gas 异常回滚(revert)。
对比可见:1 gas/字节远低于 EIP-2028 降价后的 calldata 成本(非零字节 16 gas、零字节 4 gas),体现了"仅发布、不计算、不读取"的定价逻辑——正因为 EVM 无需处理这些数据,其 gas 成本可以显著更低。
四、设计权衡(Rationale)
EIP-2242 的设计哲学在 Rationale 一节中概括为:以对现有 EVM 和交易格式"最小且无破坏性"的方式实现目标,同时通过版本号(version)机制为未来可能的扩展(如多线程数据可用性方案)保留兼容空间。
具体体现为三点设计取舍:
| 设计决策 | 权衡考量 |
|---|---|
| 可选字段而非必填字段 | 现有交易完全不受影响,实现向后兼容;只有需要数据发布能力的 Layer 2 系统才追加该字段 |
| 独立字段而非复用 calldata | EVM 无需为无法读取的数据消耗 calldata 的 gas 与处理路径,符合"不为用不到的东西付费" |
| 版本号先行 | 当前version=0不解释数据,未来 EIP 可基于不同版本号引入新的数据解释/认证方案,避免规范反复改动 |
五、向后兼容性(Backwards Compatibility)
EIP-2242 明确给出了兼容性边界:
- 向后兼容(backwards compatible):新的
postdata字段只是可选追加到现有交易末尾,不改变既有交易的编码与语义,因此旧客户端视角下交易格式不变; - 不向前兼容(not forwards-compatible):该改动属于共识层修改,必须通过硬分叉(hard fork)引入,无法在软分叉框架内完成。
六、从仓库看 EIP-2242 的思路延续与演进脉络
EIP-2242 虽然最终停留在 Stagnant 状态,但"数据上链但 EVM 不可读"的思路在以太坊后续提案中被以更成熟的形态继承和发展。以下关联提案均可在本仓库EIPS/目录下找到原文:
6.1 EIP-2718:类型化交易信封(Typed Transaction Envelope)
EIPS/eip-2718.md(状态 Final)定义了TransactionType || TransactionPayload的交易信封结构,用首字节类型标识符区分不同交易类型。它解决了 EIP-2242 时代"新字段只能通过位打包塞进旧编码"的困境——后续所有新交易类型(包括 blob 交易)都基于此信封演进。
6.2 EIP-4844:Shard Blob Transactions——思路的最终实现
EIPS/eip-4844.md(状态 Final)是这一范式的直接继承者:引入"携带 blob 的交易(blob-carrying transactions)",其中包含大量 EVM 执行无法访问、但其承诺(commitment)可以被访问的数据。其动机陈述与 EIP-2242 一脉相承——Rollup 需要低成本的数据可用性空间,blob 交易提供了目标约 0.375 MB/块、上限约 0.75 MB/块的专用数据空间。
对比可见 EIP-2242 与 EIP-4844 的核心一致性:
| 维度 | EIP-2242postdata | EIP-4844blob |
|---|---|---|
| EVM 可读性 | 不可读,仅发布 | 不可访问,仅承诺(KZG 承诺)可读 |
| 用途 | 信任最小化侧链的数据可用性 | Rollup 的数据可用性 |
| 计费 | 1 gas/字节(固定) | 独立 blob gas 市场(EIP-1559 风格费用机制) |
| 状态 | Stagnant | Final(已随 Deneb 升级上线) |
需要说明的是,这是从仓库两份提案文本中可确认的事实性对应关系;EIP-2242 本身并未在正文中预告 EIP-4844,二者分别成文于 2019 与 2022 年,属于同一研究脉络下的先后演进。
6.3 EIP-7623:calldata 成本调整的后续
EIPS/eip-7623.md(状态 Final)在 2024 年进一步调整 calldata 定价,以压缩区块最大尺寸、引导 Rollup 从 calldata 迁移到 blob。它引用 EIP-2028 指出"calldata 成本自 EIP-2028 以来未变",并明确 EIP-4844 的 blob 已成为首选的 DA 方案——从侧面印证了"独立于 EVM 的数据发布通道"这一方向的最终落地形态正是 blob,而非交易内嵌字段。
七、状态评估与未完成项
7.1 Test Cases 与 Implementation 均为 TODO
EIP-2242 规范中的Test Cases与Implementation两个章节均标注为TODO:
- Test Cases 缺失:提案未给出任何测试向量(如
postdata的 RLP 编码示例、gas 扣除边界的测试用例),这使其规范难以被客户端实现直接验证; - Implementation 缺失:未提供任何客户端(如 Geth、Parity)的参考实现链接,也没有交易池、签名验证、RLP 解码等层面的实现草案。
这两项空白是提案长期停留在草案状态的重要原因——缺少可执行验证路径的共识提案难以进入评审流程。
7.2 Stagnant 状态的含义
根据本仓库 EIPS/eip-1.md(EIP Purpose and Guidelines)对状态机的定义:
Stagnant- Any EIP in
DraftorRevieworLast Callif inactive for a period of 6 months or greater is moved toStagnant. An EIP may be resurrected from this state by Authors or EIP Editors through moving it back toDraftor its earlier status.
即:任何处于 Draft / Review / Last Call 状态、超过 6 个月无活动的 EIP 会被移入 Stagnant 状态;作者或编辑可将其移回 Draft 或更早状态以"复活"。EIP-2242 目前即处于该状态,FORK_BLKNUM从未被任何以太坊网络采用。读者在引用时应将其视为历史性研究提案,而非已生效的共识规范。
八、总结
EIP-2242 Transaction Postdata 是一个设计上"小而美"的共识层提案:以最小侵入性的方式(追加可选字段)实现了"数据发布与 EVM 计算解耦"的目标,用 1 gas/字节的低成本定价和版本号机制,为信任最小化侧链提供了数据可用性通道。尽管它因缺少测试用例与参考实现而停滞(Stagnant),但其核心洞察——区块链的价值不仅在于计算,更在于作为不可篡改的全球数据可用性层——深刻影响了以太坊后续的数据可用性演进路线:从 EIP-2028 的 calldata 降费,到 EIP-2718 的类型化交易信封,再到最终落地为 EIP-4844 的 blob 交易与 EIP-7623 的定价收敛。阅读 EIP-2242,是理解以太坊 DA 路线图历史逻辑的一条重要线索。
本提案版权依据 LICENSE.md(CC0)声明放弃相关权利。
【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考