Alert Source Discuss
⚠️ Draft Standards Track: Core

EIP-7807: SSZ 执行块

将执行块迁移到 SSZ

Authors Etan Kissling (@etan-status), Gajinder Singh (@g11tech)
Created 2024-10-28
Discussion Link https://ethereum-magicians.org/t/eip-7807-ssz-execution-blocks/21580
Requires EIP-6404, EIP-6465, EIP-6466, EIP-7706, EIP-7799

摘要

本 EIP 定义了将执行块迁移到 Simple Serialize (SSZ) 的过程。

动机

通过 EIP-6404 SSZ 交易, EIP-6466 SSZ 收据, 和 EIP-6465 SSZ 提款, 除状态 trie 之外的所有 Merkle-Patricia Trie (MPT) 都被转换为 SSZ。这使得周围的数据结构,在本例中是执行块本身,也可以转换为 SSZ,从而在共识层和执行层之间实现统一的块表示。

  1. 规范化的块哈希: 共识层可以自主计算块哈希,使其能够处理当前需要与执行层异步通信的所有一致性检查(verify_and_notify_new_payload)。这允许尽早拒绝不一致的块,并消除在同步时等待引擎 API 交互的需求。

  2. 优化后的引擎 API: 由于所有交换的数据都支持 SSZ,引擎 API 可以从文本 JSON 编码更改为二进制 SSZ 编码,从而将交换的数据大小减少约 50%,并显着提高编码/解析效率。

  3. 证明支持: 通过 SSZ,执行块头的各个字段变得可证明,而无需存在完整的块头。使用 EIP-7495 SSZ StableContainer,只要各个字段的底层语义没有改变,证明就具有向前兼容性,从而降低了智能合约和验证客户端应用程序的维护要求。

  4. 清理机会: 转换为 SSZ 可以删除 PoW 时代的旧字段和低效的日志布隆机制,并允许引入 EIP-7706 多维 gas 的概念。

规范

本文档中的关键词“必须”,“不得”,“必需”,“应”,“不应”,“推荐”,“不推荐”,“可以”和“可选”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。

ExecutionBlockHeader 容器

执行块表示为单个、规范化的 SSZ 容器。该定义使用 EIP-7495 中定义的 StableContainer[N] SSZ 类型和 Optional[T]

名称 描述
MAX_EXECUTION_BLOCK_FIELDS uint64(2**6) (= 64) StableExecutionBlock 将来可以增长到的最大字段数
class StableGasAmounts(StableContainer[MAX_FEES_PER_GAS_FIELDS]):
    regular: Optional[GasAmount]
    blob: Optional[GasAmount]

class GasAmounts(Profile[StableGasAmounts]):
    regular: GasAmount
    blob: GasAmount

class StableExecutionBlockHeader(StableContainer[MAX_EXECUTION_BLOCK_FIELDS]):
    parent_hash: Optional[Root]
    miner: Optional[ExecutionAddress]
    state_root: Optional[Bytes32]
    transactions_root: Optional[Root]
    receipts_root: Optional[Root]
    number: Optional[uint64]
    gas_limits: Optional[StableGasAmounts]
    gas_used: Optional[StableGasAmounts]
    timestamp: Optional[uint64]
    extra_data: Optional[ByteList[MAX_EXTRA_DATA_BYTES]]
    mix_hash: Optional[Bytes32]
    base_fees_per_gas: Optional[FeesPerGas]
    withdrawals_root: Optional[Root]
    excess_gas: Optional[StableGasAmounts]
    parent_beacon_block_root: Optional[Root]
    requests_hash: Optional[Bytes32]
    system_logs_root: Optional[Root]

class ExecutionBlockHeader(Profile[StableExecutionBlockHeader]):
    parent_hash: Root
    miner: ExecutionAddress
    state_root: Bytes32
    transactions_root: Root  # EIP-6404 transactions.hash_tree_root()
    receipts_root: Root  # EIP-6466 receipts.hash_tree_root()
    number: uint64
    gas_limits: GasAmounts
    gas_used: GasAmounts
    timestamp: uint64
    extra_data: ByteList[MAX_EXTRA_DATA_BYTES]
    mix_hash: Bytes32
    base_fees_per_gas: BlobFeesPerGas
    withdrawals_root: Root  # EIP-6465 withdrawals.hash_tree_root()
    excess_gas: GasAmounts
    parent_beacon_block_root: Root
    requests_hash: Bytes32  # EIP-6110 `ExecutionRequests`.hash_tree_root()
    system_logs_root: Root

请求哈希计算

requests_hash 更改为使用与共识层 BeaconBlockBody 中相同的结构 ExecutionRequests.hash_tree_root()

执行块哈希计算

执行块哈希更改为在所有上下文中都基于 hash_tree_root,包括 (1) BLOCKHASH 操作码,(2) 引擎 API 交互(blockHash 字段),(3) JSON-RPC API 交互,(4) devp2p 网络。

原理

在最初的草案中,只有请求哈希和块哈希更改为基于 SSZ hash_tree_root()。不需要共识层更改。

未来

  • 使用 SSZ Log,可以重新定义提款机制和验证者请求以基于日志(类似于最初的存款,但没有延迟),从而可能消除对 withdrawals_rootrequests_hash 的需求。
    • CL 将插入用于铸币的额外日志 (EIP-7799),并可以获取与提款相关的日志(存款、请求、合并)。该机制将比 EIP-7685 更通用,并且会放弃要求 EL 特殊处理请求,包括 compute_requests_hash
    • 对于客户端应用程序和智能合约,它将简化基于 EIP-7792 的交易历史记录验证。
    • 提款和合并请求的额外费用市场可以集成到多维费用系统中,从而允许删除相应合约存储中的额外排队并降低 gas 费用。相应的合约可能需要使用不规则状态转换进行更新或被替换。
  • 应该更新引擎 API,包括 (1) 可能的提款/请求重构(如上所述),(2) 删除 block_hash 字段,以便将 ExecutionPayload 替换为 ExecutionBlockHeader,(3) 基于 ForkDigest 上下文的二进制编码(通过 HTTP 标头或交错,类似于信标 API)。这减少了编码开销,并且还简化了在组合 CL/EL 进程内实现中共享数据结构。

  • 应该更新网络以基于 SSZ,使用与 EIP-6404 类似的格式,其中包含类型前缀,后跟可能经过 SSZ snappy 压缩的有效负载。

向后兼容性

这会破坏依赖于先前区块头二进制格式的智能合约的兼容性,包括假设通用前缀并通过线性 keccak256 哈希运行整个数据的“通用”实现。

安全考虑

SSZ 块哈希基于 SHA256,并与现有的基于 keccak256 的块哈希共享命名空间。由于这些哈希算法在根本上是不同的,因此预计不会出现明显的冲突风险。

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Etan Kissling (@etan-status), Gajinder Singh (@g11tech), "EIP-7807: SSZ 执行块 [DRAFT]," Ethereum Improvement Proposals, no. 7807, October 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7807.