本文档是关于在以太坊执行层(EL)中逐步实现 SSZ(Simple Serialize)转换的指南。它详细介绍了将交易、交易签名、交易负载、区块构建、收据和提款从 RLP 格式转换为 SSZ 格式的步骤,旨在保持与现有客户端的互操作性,并为未来的优化铺平道路,最终目标是完全采用 SSZ 格式。
StableContainer
规范: EIP-7495: SSZ StableContainer
测试: ethereum/EIPs
对于 EL,需要 StableContainer
,但可以跳过初始的 Variant
和 OneOf
。
StableContainer[N]
的 Merkle 化与常规 Container
相同,但 Merkle 树会被填充到 nextpow2(N)
个成员。
当序列化 StableContainer[N]
时,会添加一个 Bitvector[N]
前缀,用 1/0 表示字段的存在/缺失,顺序按照字段指定的顺序。在编码容器时,会跳过不存在的字段。
当解析时,首先读取 Bitvector[N]
,然后使用它按顺序读取存在的字段。确保引用未知字段的额外位设置为 0,并且在读取缓冲区后没有留下任何数据。
实现说明:https://hackmd.io/Swl71tWeS7WP_f4D8abKHA
目标:
StableContainer
的测试参考实现:
TransactionSignature
规范: EIP-6493: SSZ Transaction Signature Scheme
Transaction
分成两部分,TransactionPayload
(未签名的交易)和 TransactionSignature
(v/r/s)。这种分割是 SSZ 表示的核心。在序列化期间重建 RLP 表示。gasPrice
和 post- EIP-1559 的 max_fee_per_gas
字段,去掉 gasPrice
字段,并将其存储在 max_fee_per_gas
中。带外传递 effective_gas_price
或按需计算(需要来自相应区块的 base fee)。v/r/s
切换到 y_parity/r/s
。按需从 chain_id
+ y_parity
重建 v
。ecdsa_pack_signature
和 ecdsa_unpack_signature
函数,并存储打包后的版本而不是 y_parity/r/s
。按需重建 y_parity/r/s
。from_address
扩展 TransactionSignature
。当使用 ecrecover
计算发送者时,懒加载地填充它。从 from_address
字段读取,而不是在多个位置计算 ecrecover
。目标:
参考实现:
TransactionPayload
规范: EIP-6493: SSZ Transaction Signature Scheme
测试: ethereum/EIPs
compute_sig_hash
和 compute_tx_hash
函数(参考实现)。compute_sig_hash
(未签名的 TransactionPayload
)和 compute_tx_hash
(已签名的 Transaction
)。目标:
规范: EIP-6404: SSZ Transactions Root
transactions_root
的计算替换为基于 SSZ 的计算。目标:
规范: EIP-6493: SSZ Transaction Signature Scheme
规范: EIP-6466: SSZ SSZ Receipts Root
总体过程与交易类似,存在以下显着变化:
gas_used
而不是 cumulative_gas_used
。SSZ <-> RLP 转换器必须在 receipt 列表上而不是单个 receipt 上。contract_address
,因此在转换 receipt 之前,必须先提供交易列表。规范: EIP-6465: SSZ SSZ Withdrawals Root
类似于交易/receipt,除了不需要更改数据结构。
root
字段,其中包含 hash_tree_root(transaction)
,紧挨着现有的 hash
字段。eth_getTransactionByRoot
端点,允许通过 root 而不是哈希进行查找。还允许通过 tx root 查找 receipt。root
包含在 transactions_root
中。Transaction
编码为 JSON。BasicTransaction
/ BlobTransaction
from_address
是否与 ecrecover
值匹配。from_address
在网络上交换。hash
和 root
值。
- 原文链接: hackmd.io/@etan-status/s...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!