Alert Source Discuss
⚠️ Review Standards Track: Networking

EIP-7594: PeerDAS - 对等数据可用性抽样

引入简单的 DAS,它利用 gossip 分发和对等请求

Authors Danny Ryan (@djrtwo), Dankrad Feist (@dankrad), Francesco D'Amato (@fradamt), Hsiao-Wei Wang (@hwwhww)
Created 2024-01-12
Requires EIP-4844

摘要

PeerDAS(对等数据可用性抽样)是一种网络协议,允许信标节点执行数据可用性抽样(DAS),以确保 blob 数据已可用,同时仅下载数据的子集。PeerDAS 利用 gossip 进行分发,利用发现来查找特定数据托管的对等节点,并利用对等请求进行抽样。

动机

DAS 是一种将数据可用性扩展到 EIP-4844 水平以上的方法,它不要求所有节点都下载所有数据,同时仍然确保所有数据都已可用。

在被称为“roll-up”的二层系统上下文中,提供额外的数据可用性有助于为 Ethereum 用户带来规模,这些系统的主要瓶颈是一层数据可用性。

规范

我们使用一维纠删码扩展来扩展 EIP-4844 中引入的 blob。每一行都包含 blob 数据及其纠删码。它被细分为单元格,单元格是用它们各自 blob 的 KZG 承诺进行身份验证的最小单元。每一列与一个特定的 gossip 子网相关联,由来自特定索引的所有行的单元格组成。每个节点负责维护和托管一组确定的列子网和数据,作为其节点 ID 的函数。

节点查找并维护一个多样化的对等节点集,并从其对等节点抽样列,以执行每插槽 DAS。

如果一个节点获得至少 50% 的列,它可以重建整个数据矩阵。如果一个节点少于 50%,它可以从对等节点请求必要的列。

详细规范请参见 ethereum/consensus-specs

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

网络

此 EIP 引入了单元格 KZG 证明,用于证明 KZG 承诺在给定索引处打开到单元格。这允许仅从 blob 下载特定的单元格,同时仍然确保相对于相应 KZG 承诺的数据完整性,因此是数据可用性抽样的关键组成部分。但是,计算 blob 的单元格证明是一项昂贵的操作,区块生产者必须为许多 blob 重复此操作。由于证明验证比证明计算便宜得多,并且证明大小与单元格大小相比可以忽略不计,因此我们要求 blob 交易发送者自己计算证明,并将其包含在 blob 交易的 EIP-4844 交易池包装器中。

为此,在交易 gossip 响应 (PooledTransactions) 期间,包装器被修改为:

rlp([tx_payload_body, wrapper_version, blobs, commitments, cell_proofs])

cell_proofs = [cell_proof_0, cell_proof_1, ...]

tx_payload_bodyblobscommitments 与 EIP-4844 中的相同,而 proofs 字段被 cell_proofs 替换,并添加了 wrapper_version。 这些定义如下:

  • wrapper_version - 一个字节,指示使用哪个版本的包装器。 目前的版本设置为 1
  • cell_proofs - 所有 blobs 的单元格证明列表,包括扩展索引的证明,每个 blob 总共有 CELLS_PER_EXT_BLOB 个证明(CELLS_PER_EXT_BLOB 是扩展 blob 的单元格数量,在共识规范中定义

请注意,虽然 cell_proofs 包含所有单元格的证明,包括扩展单元格,但 blob 本身在未扩展的情况下发送(每个 blob CELLS_PER_EXT_BLOB / 2 个单元格)。 这是为了避免发送冗余数据,接收节点可以快速计算这些数据。 换句话说, cell_proofs[i * CELLS_PER_EXT_BLOB + j]compute_cells(blobs[i]) 的单元格 j 的证明,其中 compute_cells(blob) 输出 blob 的所有单元格,包括扩展单元格。

节点必须验证 tx_payload_body 并根据它验证包装的数据。 为此,请确保:

  • tx_payload_body.blob_versioned_hashesblobscommitments 的数量相等。
  • cell_proofs 恰好包含 CELLS_PER_EXT_BLOB * len(blobs) 个单元格证明
  • KZG commitments 哈希到版本化哈希,即 kzg_to_versioned_hash(commitments[i]) == tx_payload_body.blob_versioned_hashes[i]
  • KZG commitments 匹配相应的 blobscell_proofs。 这需要计算所有 blobs 的扩展单元格,并验证所有 cell_proofs。(注意:所有单元格证明都可以一次批量验证)

理由

待定

向后兼容性

测试用例

参考实现

安全注意事项

需要讨论。

版权

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

Citation

Please cite this document as:

Danny Ryan (@djrtwo), Dankrad Feist (@dankrad), Francesco D'Amato (@fradamt), Hsiao-Wei Wang (@hwwhww), "EIP-7594: PeerDAS - 对等数据可用性抽样 [DRAFT]," Ethereum Improvement Proposals, no. 7594, January 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7594.