以太坊同时维护两套序列化标准:执行层用 RLP,共识层用 SSZ。这不是历史包袱,而是两种截然不同的设计哲学应对不同需求的结果。
一、为什么需要序列化
区块链网络中,所有数据结构需要在三个场景之间流转:
- 网络传输:节点间发送区块、交易、attestation
- 数据库存储:在磁盘上持久化状态
- 密码学哈希:计算区块哈希、状态根、签名
好的序列化方案需要:
- 确定性:相同的数据总是产生相同的字节序列(这对哈希至关重要)
- 紧凑性:减少存储和传输开销
- 可验证性:支持对部分字段的证明(对轻客户端至关重要)
RLP 和 SSZ 在这三点上有截然不同的侧重。
二、RLP:递归长度前缀编码
2.1 设计思想
RLP(Recursive Length Prefix)是以太坊早期专门设计的极简序列化方案。它只定义了两种基本类型:
- 字节串(byte string):任意长度的字节序列
- 列表(list):任意嵌套的字节串/列表的序列
这种极简主义使 RLP 的规范只需几页纸即可描述完整。
2.2 编码规则