收据搬出默克尔树:EIP-6466 用 SSZ 重写以太坊收据格式 图 1
收据搬出默克尔树:EIP-6466 用 SSZ 重写以太坊收据格式 · 图 1

收据在区块里的位置

每笔以太坊交易执行完都留下一张收据:成功与否、消耗了多少 Gas、触发了哪些日志、日志里带了哪些主题。全部收据按顺序组成一棵默克尔-帕特里西亚树,树根写进区块头。这个结构服务了多年,但它有两个越来越重的包袱:证明太小粒度内容的成本太高,以及编码格式与新一代共识数据结构互不兼容。EIP-6466 想一次性解决这两件,把收据从 RLP 编码迁进 SSZ。

RLP 收据的举证困境

RLP 是”长度前缀+字节串”的递归编码,收据树因此是线性哈希的产物:树里每个节点对应一整条收据。轻客户端想证明”某条日志确实出现在某个交易里”,默克尔路径只能给到收据这一级——要验证日志,必须把整条收据连同树路径一起塞进验证器。对依赖链上验证的二层欺诈证明和跨链桥来说,这意味着每次举证都要把大量无关字节搬上链,成本高且难以裁剪。

SSZ 换来什么

SSZ 是信标链使用的序列化格式:类型有固定轮廓,可变长度部分按定深分块,默克尔化在字段这一级就发生。迁移之后,收据的状态码、Gas 用量、每条日志的地址、主题列表、数据段各自成为独立的默克尔叶子。举证”第几笔交易的第几条日志的主题”只需要给出该叶子到根的路径,体积从”整条收据加路径”缩到”几十字节哈希清单”。同一份结构还让共识层与执行层的数据格式对齐——信标链在数据可用性抽样里处理的区块体引用,从此可以与执行层收据树自然拼接。

草案阶段的现实

该 EIP 目前状态为草案,且依赖链上挂着 6404、7495、7668 等一系列把交易与区块体字段逐块迁向 SSZ 的兄弟提案——它不是一族方案里的第一块砖,而是偏后的一块。替换区块头引用的树根是硬分叉级决定:所有客户端、索引器、二层桥都要在过渡期同时认新旧两套根。读这类提案时,把”设计正确”与”何时落地”分开评估:SSZ 化的方向由数据可用性抽样和一栋栋”数据格式统一”的工程决定,节奏跟着共识层路线图走,不取决于单个提案的优劣。

快速问答

问:SSZ 收据和布隆过滤器是一回事吗? 答:不是。布隆过滤器在区块头里做粗筛、答是存疑;收据树回答的是”某笔交易执行结果到底是什么”,改的是可证明性而不是筛选能力。

问:普通用户会感知到什么? 答:直连节点验证日志的开发者会最先受益;中心化 RPC 用户无感。

问:怎么跟进这类提案进度? 答:看 EIP 仓库里的状态字段、客户端里程碑清单与联合测试网记录,不要只看提案正文。

两种编码的最小对比

RLP 的世界里,字段类型靠长度前缀现场推断,编码紧凑但结构隐形;SSZ 的世界里类型轮廓先行,可变长部分按固定深度分块,默克尔化发生在叶子层。这个差别决定举证粒度:前者像一整卷录像带,查证一个画面要倒带整盘;后者像按帧编号的胶卷,抽帧即可。以太坊把账户与存储先迁进 SSZ、再处理交易与区块体、最后轮到收据,顺序由数据被举证的频率决定。

迁移的连锁清单

一份收据迁格式,牵动一串组件:索引器要同时解析新旧两种树;依赖收据根的二层桥要重新对账;轻量验证合约的校验代码要分支;客户端同步逻辑在过渡期双轨运行。评估任何数据结构提案的落地难度时,统计”谁引用了这个字段”是比读正文更快的尽职调查——引用方越多、跨层越深,过渡期越长,收益兑现越靠后。收据恰好处在索引与证明的交汇点,这份清单因此特别长。

风险提示:本文仅作技术科普,不构成任何投资建议。