Alert Source Discuss
⚠️ Draft Standards Track: Networking

EIP-7801: etha - 分片区块子协议

引入 etha 子协议,用于提供历史区块数据。

Authors Ahmad Bitar (@smartprogrammer93) <smartprogrammer@windowslive.com>, Giulio Rebuffo (@Giulio2002), Gary Schulte (@garyschulte) <garyschulte@gmail.com>
Created 2024-10-30
Discussion Link https://ethereum-magicians.org/t/eip-7801-etha-sharded-blocks-subprotocol/21507
Requires EIP-7642

摘要

本 EIP 提议创建一个新的子协议 etha,使以太坊节点能够通过位掩码通信可用的区块跨度。每个位代表每个 1_064_960 区块链历史范围内的 106_496 区块跨度。节点使用此位掩码来指示存储的跨度,并承诺在创建未来跨度时存储它们。这允许对等方在不首先连接和查询的情况下,对数据可用性做出明智的决策。此位掩码每 1_064_960 个区块重复一次,以便直接推断数据可用性概率。

etha 子协议具有相同的功能,可以使用从 eth 协议复制的消息类型来提供历史数据,从而实现高效的数据检索。

动机

根据 EIP-4444,节点可以修剪历史数据,而其他节点继续提供它。通过连接和请求区块来确定数据可用性效率低下,会消耗不必要的带宽。本 EIP 通过使节点能够将链历史记录分片为 106_496 个区块段,并通过位掩码指示可用性来解决此效率问题。

通过引入一个单独的子协议 etha,节点可以无缝地交换此信息,并保留提供历史数据的能力,而不会影响现有的 eth 协议版本。

规范

子协议握手

  • 引入一个名为 etha 的新子协议。
  • etha 子协议的握手消息定义如下:
    • 握手数据包:[version: P, networkid: P, blockhash: B_32, genesis: B_32, forkid, blockBitmask]
    • blockBitmask 是一个 10 位的位掩码,每个位代表每 1_064_960 个历史区块中的 106_496 个区块范围。
    • 其余元素的定义与 eth/69 中的定义相同

支持的消息

etha 子协议 必须 包括对 eth/69 协议中以下消息的支持,以方便历史数据服务:

  • GetBlockBodies (0x05): 请求区块体。
  • BlockBodies (0x06):GetBlockBodies 的响应。
  • GetReceipts (0x0f): 请求收据。
  • Receipts (0x10):GetReceipts 的响应。

这些消息的语义和有效负载结构与其在 eth/69 协议中的对应部分相同,从而确保了历史数据服务的兼容性。

节点行为

  • 位掩码初始化:节点 可以 在启动时将 blockBitmask 中的至少一位设置为 on,并回填相应的 106_496 区块跨度。
  • 分片保留概率:节点 必须 根据其位掩码保留新的区块跨度,目标是覆盖至少 10% 的链历史记录。
  • 对未来范围的承诺:在添加新区块时,节点 必须 保留与其所声明的位掩码相对应的跨度。
  • 位掩码空间:106_496 范围的 blockBitmask 每 1_064_960 个区块重复一次,从而可以有效地表示各个 epoch 中的历史数据局部性。

使用 etha 连接后,节点会交换带有 blockBitmask 的握手消息。这种单一握手消除了对其他消息类型的需求。

ENR 扩展

或者,blockBitmask 可以被导出或编码到以太坊节点记录 (ENR) 中,使节点无需握手即可声明区块跨度。例如,blockBitmask 可以从 ENR 的 secp256k1 字段导出。但是,此方法缺乏握手方法的身份验证和可靠性。此外,不能保证您连接的节点支持 etha 子协议。

原理

位掩码方法提供了一种灵活的方式来表示和保留区块数据,同时承诺未来跨度。此机制与 EIP-4444 中提出的修剪方案相一致,同时确保历史数据和未来数据跨度在整个网络中保持可用。

在共识层中,已经对验证子网使用了类似的位列表方法,使其成为表示数据跨度的熟悉而有效的方法。此外,承诺未来跨度可确保更好的可预测性和数据局部性稳定性。

etha 子协议将此功能与 eth 分开,确保节点不会使用 eth 协议上它们不具备的历史范围的请求来轰炸其他节点。

选择 106,496 和 1,064,960 区块的范围大小是因为它们是 Era1 的最大区块范围 8,192 的倍数,这允许使用 Era1 文件进行直接存储和表示。

向后兼容性

etha 子协议独立于 eth 协议。本 EIP 不影响共识引擎或需要硬分叉。

安全考虑

有一些需要考虑的事项:

  • 任何给定分片的数据不可用性可以建模为:P = (0.9)^n,其中 n 是对等方的数量。假设参与 EIP-7801 历史分片的节点是随机分布的,那么对于 25 个对等方,这种几率为 7%。对于 32 个对等方,这种几率降至 3.4%。这假设网络上的大量节点正在服务于至少一个分片。如果大多数客户端默认采用,可能需要这样做才能使完整的分片历史记录可用并在整个网络中充分复制。
  • 随着历史记录的增长,磁盘上保留的分片大小也会增长,从而提高每个节点的存储要求。但是,与当前的链存储要求相比,节点仍然可以从大约 90% 的存储减少中受益,并且它们未来的链存储要求只会按保留所有历史记录的速度的 10% 来扩展。

版权

本文档已获得 CC0 许可;权利通过 CC0 放弃。

Citation

Please cite this document as:

Ahmad Bitar (@smartprogrammer93) <smartprogrammer@windowslive.com>, Giulio Rebuffo (@Giulio2002), Gary Schulte (@garyschulte) <garyschulte@gmail.com>, "EIP-7801: etha - 分片区块子协议 [DRAFT]," Ethereum Improvement Proposals, no. 7801, October 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7801.