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_body
、blobs
和 commitments
与 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_hashes
、blobs
和commitments
的数量相等。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
匹配相应的blobs
和cell_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.