PeerDAS:一种使用经过实战检验的 P2P 组件的更简单 DAS 方法 - 网络

PeerDAS 旨在通过重用以太坊中已有的 P2P 组件,在 4844 的基础上进一步扩展数据可用性(DA)的规模。文章探讨了如何在不依赖更高级的 DHT 解决方案的情况下,通过具有不同节点类型的相对简单的网络结构实现额外的 DA 扩展,以及模拟了这种解决方案的有效性,包括涉及数据大小、网络节点总数、诚实节点所需承担的最小工作量等参数。

PeerDAS

这是 PeerDAS 的一个大致草图,代表着总体方向。在进一步讨论完善之前,先在早期阶段发布以征求反馈。

这一系列想法源于与 Dankrad、Vitalik、Codex 成员、RIG、ARG 和 Consensus R&D 的对话。从方向上看,这种类型的方法的部分内容在过去几年中也一直在各种途径中进行讨论,例如 Proto 的 PeerDHT

PeerDAS 设计的目的是重用以太坊中已在生产环境中经过充分测试的 p2p 组件,以实现超过 4844 的额外 DA 扩展,同时保持诚实节点的最少工作量与 4844 处于同一范围(每个 slot 下载 < 1MB)。

这是一项探索,旨在更好地了解我们可以从具有各种节点类型分布的相对简单的网络结构中获得什么样的扩展,而不依赖于更高级的类似 DHT 的解决方案。

对此类解决方案有效性的模拟包括参数化以下内容:

  • 数据大小(每个区块的行数和列数,以及样本大小)
  • 网络上的节点总数
  • 诚实节点预期执行的最少工作量(例如,保管和提供来自 X 行和列的样本)
  • 节点容量的分布(即,网络中有多少比例是最低限度的诚实(保管/提供 X),以及超出此范围的(例如,保管/提供网络数据的 10%、25%、100%))以及它们愿意支持的最大样本请求数(即,每个 slot Y 个样本)
  • 诚实/拜占庭比例假设

上述不同的参数化将导致可接受或损坏的配置(例如,数据大小可能太大,以至于无法为给定的网络分布找到足够容量的 peer)。

关于 DAS 的一般说明

重要的是,任何 DAS 解决方案都将依赖于各种类型的节点以及我们可以对它们做出的假设。任何解决方案中值得考虑的节点类型包括:

  • 验证者和用户节点(可以对它们做出诚实保管/服务假设,例如,下载并提供 X 行/列的样本。请注意,可以激励验证者进行保管,但不一定激励他们提供服务)
  • 高容量节点(超过基线诚实节点的某些百分比的数据)
  • 超全节点(100% 的数据)[高容量节点的特例]

然后,DAS 解决方案之间的区别在于——DAS 网络如何组织自身,如何发现 peer 以进行抽样,网络如何利用(或未充分利用)更高容量的节点(例如,该解决方案是否可以支持节点容量的不均衡,或者所有节点看起来都相同)。

PeerDAS 草图

配置

以下是对完整所需参数化的一些简化,仅用于说明目的。

下表中的所有值均为示例值,并不代表对实际参数化的建议。

名称 示例值 描述
NUMBER_OF_ROWS_AND_COLUMNS 32
SAMPLES_PER_ROW_COLUMN 512
CUSTODY_REQUIREMENT 2 诚实节点保管和提供样本的最小行数和列数
SAMPLES_PER_SLOT 75 节点每个 slot 查询的随机样本数
NUMBER_OF_PEERS 70 节点维护的最小 peer 数

工作原理

保管

每个节点下载并保管每个 slot 至少 CUSTODY_REQUIREMENT 行和 CUSTODY_REQUIREMENT 列。节点需要保管的特定行和列是伪随机选择的(稍后会详细介绍)。

节点可以选择保管和服务多于最低诚实要求。这样的节点通过 peer 发现机制明确地公布一个大于 CUSTODY_REQUIREMENT 的数字——例如,在他们的 enr 中(例如,如果节点每个 slot 保管 8 行和 8 列,则 cust: 8)——最高可达 NUMBER_OF_ROWS_AND_COLUMNS(即,一个超全节点)。

节点存储保管的行/列,持续一个 pruning 周期,并响应 peer 对这些行/列的样本请求。

公开、确定性的选择

节点保管的特定行和列是伪随机选择的,它是节点 ID、epoch 和保管大小的函数(示例函数接口:custodied_rows(node_id, epoch, custody_size=CUSTODY_REQUIREMENT) -> List(uint64) 和列变体)——重要的是,任何一方都可以运行此函数,因为输入都是公开的。

注意:增加给定 node_idepochcustody_size 参数会扩展返回的列表(而不是一个全新的 shuffle),这样如果 custody_size 未知,则默认的 CUSTODY_REQUIREMENT 对于节点保管的一个子集来说将是正确的。

注意:即使此函数接受 epoch 作为输入,也可以调整该函数,使其在许多 epoch 内保持稳定,具体取决于网络/子网的稳定性要求。网络的刚性和可用于恢复的子网深度之间存在权衡。为了确保子网可以用于恢复,交错轮换可能需要按照 prune 周期进行。

Peer 发现

在每个 slot,一个节点需要能够随时从任何一组行和列中进行抽样。为此,节点应该找到并维护一组多样且可靠的 peer,这些 peer 可以定期满足其抽样需求。

节点运行一个后台 peer 发现过程,至少维护 NUMBER_OF_PEERS 个具有各种保管分布的 peer(包括 custody_size 和行/列分配)。广告的 cust 大小和公共节点 ID 的组合使这很容易公开访问。

如果抽样失败,应该向上调整 NUMBER_OF_PEERS

注意:虽然高容量和超全节点在满足抽样要求方面具有很高的价值,但节点应保持跨节点容量的分布,以避免过度集中 p2p 图(在极端情况下变为 hub/spoke),并更好地在所有节点之间分配抽样负载。

注意:预计将在上述过程中使用基于 DHT 的 peer 发现机制。信标链网络目前使用 discv5,其方式与描述的用于查找特定证明子网分布的 peer 的方法类似。集成额外的 peer 发现方法(例如,通过 libp2p gossipsub 进行潜在的 peer 发现)是有价值的,以增加对其中一种发现方法受到攻击的广度防御。

行/列 gossip

存在 NUMBER_OF_ROWS_AND_COLUMNS 行和 NUMBER_OF_ROWS_AND_COLUMNS 列 gossip 主题,每个行/列各一个——对于 XY0NUMBER_OF_ROWS_AND_COLUMNS(不包括),分别为 column_Xrow_Y

为了保管特定的行或列,节点加入相应的 gossip 子网。来自其各自行/列的可验证样本在分配的子网上进行 gossip。

重建和交叉播种

如果一个节点没有收到给定行/列的所有样本,但收到的样本足以进行重建(例如 50%+,这是编码率的函数),则该节点应在本地进行重建,并将重建的样本发送到子网上。

此外,节点应发送(交叉播种)他们分配到的给定行/列中缺失的任何通过其他方法获得的样本(辅助 gossip 或重建)。例如,如果节点重建了 row_x 并且也参与了 column_y 子网,其中(X,Y)样本丢失,则将重建的样本发送到 column_y

注意:节点始终维护他们正在跟踪的行和列的矩阵视图,能够双向交叉引用和交叉播种。

注意:有一些时间考虑因素需要分析——节点在什么时候认为样本丢失并选择重建和交叉播种。

注意:可能存在围绕如何发送样本和考虑样本的反 DoS 和服务质量的考虑因素——每个单独的样本是一个消息还是以聚合形式发送。

Peer 抽样

在每个 slot,节点对来自其 peer 的样本进行(本地随机确定)SAMPLES_PER_SLOT 查询。节点利用 custodied_rows()custodied_columns() 来确定从哪个或哪些 peer 请求。如果一个节点在所有行和列上都有足够好的/诚实的 peer,则这有很高的成功机会。

在抽样时,节点向所有根据其 custodied_rows/ custodied_columns 确定保管此样本的 peer 发送一个 DO_YOU_HAVE 数据包,以询问他们是否拥有所有样本。所有 peer 首先用他们拥有的样本的位域来回答。

在收到样本时,节点会将样本传递给任何以前没有此样本的节点,这可以通过 DO_YOU_HAVE 响应得知(但根据其 custodied_rows/ custodied_columns 应该拥有它)。

Peer 评分

由于确定性的保管函数,节点确切地知道一个 peer 应该能够响应什么。如果一个 peer 没有响应其保管的行/列的样本,则节点可能会降低评分或断开与该 peer 的连接。

注意:一个 peer 可能不会响应请求,原因可能是他们不诚实(实际上没有保管数据),因为带宽饱和(本地节流),或者因为他们自己无法获得所有样本。在前两种情况下,peer 不具有一致的 DAS 价值,节点可以/应该寻求优化以获得更好的 peer。在后一种情况下,节点可以根据对该 peer 和其他 peer 的重复 DO_YOU_HAVE 查询进行本地确定,以评估 peer 的价值/诚实度。

DAS 提供商

DAS 提供商是一个始终可用于 DAS 查询的超全(或高容量)节点。对于 p2p 来说,这些节点看起来与其他节点一样,但具有更高的公布容量,并且通常应该能够通过正常的发现潜在地找到它们。

也可以在带外找到它们,并将它们配置到节点中以直接连接和优先连接。例如,一些 L2 DAO 可能会支持 10 个超全节点作为公共产品,节点可以选择将其中一些添加到其本地配置中,以增强其 DAS 服务质量。

这种直接 peering 利用了一种在所有节点上开箱即用的功能,可以补充(并降低攻击性)替代 peer 发现机制。

关于分叉选择的说明

分叉选择规则(本质上是一个 DA 过滤器)与给定的 DAS 设计正交,只是特定设计的效率会影响它。

在任何 DAS 设计中,可能都存在一些关于时间、短期重组的可接受性等方面的自由度。

例如,分叉选择规则可能要求验证者在 slot N 上成功进行 DAS,才能在其分叉选择中包含 slot N 的区块。这是最严格的 DA 过滤器。但是,滞后过滤器也可能是可以接受的,因为知道可能存在一些失败/短期重组,但这不会损害总体安全性。例如,该规则可以是——必须为 N 中的子区块完成 slot N-1 的 DAS 才能包含在分叉选择中。

这种滞后技术及其分析对于任何 DAS 构造都将是有价值的。问题是——你是否可以放宽需要多快地进行 DA,并且在最坏的情况下,不通过证明/最终性来确认不可用的数据,以及这对短期重组和快速确认规则有什么影响。

待办事项:PeerDAS 的模拟和分析

PeerDAS 的关键在于每个节点都可以在每个 slot 找到/维护足够容量的足够 peer,以满足他们的抽样要求。

因此,对于给定的数据大小,我们可以轻松地模拟网络分布(节点数量、节点类型/容量的分布、每个节点可以响应的样本请求数量、最小 peer 数量等),以了解每个 slot 成功进行 DAS 的机会。

我们可以计算/模拟各种参数化和假设的安全数据大小,例如:

  • 一个在 4844 保管要求下大致相同的最小限度诚实节点的同构网络
  • 上述网络,但用 100 个具有 X 查询容量的超全节点来强调
  • 介于两者之间的各种分布

下一步——模拟各种网络分布,以巩固我们对这种方法范围的理解。

  • 原文链接: ethresear.ch/t/peerdas-a...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
以太坊中文
以太坊中文
以太坊中文, 用中文传播以太坊的最新进展