本文档是关于在以太坊执行层(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 / BlobTransactionfrom_address 是否与 ecrecover 值匹配。from_address 在网络上交换。hash 和 root 值。
- 原文链接: hackmd.io/@etan-status/s...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!