PeerDAS 旨在利用以太坊现有的 P2P 组件,在不依赖高级 DHT 解决方案的前提下,扩展数据可用性(DA)的规模。该方案通过节点分片存储和 gossip 协议,允许节点只下载少量数据(<1MB/slot),同时通过模拟不同网络配置(节点数量、容量分布等)来评估其有效性,以达到在保证安全性的前提下实现数据可用性的扩容。
这 是一个代表 PeerDAS 大致方向的草图。在进一步讨论改进之前,这个草案会在早期阶段发布以征求反馈。
这一 系列想法来自于与 Dankrad、Vitalik、Codex 成员、RIG、ARG 和 Consensus R&D 的对话。在方向上,这种类型的方法的部分内容在过去几年中也在各种途径中被讨论过,例如 Proto 的 PeerDHT
PeerDAS 设计的目的是复用以太坊中已经在生产环境中经过充分测试的 p2p 组件,以在 4844 的基础上带来额外的 DA 扩展,同时保持诚实节点所需的最小工作量与 4844 相当(每个插槽下载 < 1MB)。
这是一项探索,旨在更好地了解我们可以在一个相对简单的网络结构中,通过各种节点类型的分布,获得什么样的扩展,而不 依赖于更高级的类似 DHT 的解决方案。
此类解决方案的有效性模拟涉及以下参数化:
上述不同的参数化将导致可接受或损坏的配置(例如,数据大小可能太大,以至于无法为给定的网络分布找到足够容量的对等节点)。
重要的是,任何 DAS 解决方案都将依赖于各种类型的节点以及我们可以对它们做出的假设。任何解决方案中都值得考虑的节点类型包括:
那么,DAS 解决方案之间的区别在于——DAS 网络如何组织自身,如何发现用于采样的对等节点,网络如何利用(或未充分利用)更高容量的节点(例如,该解决方案是否可以支持节点容量的不均衡,或者所有节点看起来都一样)。
以下是对完整所需参数化的一些简化,仅用于说明目的。
表中的所有值都是示例值,不代表对实际参数化的建议。
名称 | 示例值 | 描述 |
---|---|---|
NUMBER_OF_ROWS_AND_COLUMNS |
32 |
|
SAMPLES_PER_ROW_COLUMN |
512 |
|
CUSTODY_REQUIREMENT |
2 |
诚实节点保管和服务样本的最小行数和列数 |
SAMPLES_PER_SLOT |
75 |
节点每个插槽查询的随机样本数 |
NUMBER_OF_PEERS |
70 |
节点维护的最小对等节点数 |
每个节点下载并保管每个插槽至少 CUSTODY_REQUIREMENT
行和 CUSTODY_REQUIREMENT
列。节点需要保管的特定行和列是伪随机选择的(稍后会详细介绍)。
一个节点_可以_选择保管和服务超过最小诚实要求的行和列。这种节点通过对等节点发现机制明确地公布一个大于 CUSTODY_REQUIREMENT
的数字——例如,在他们的 enr 中(例如,如果节点每个插槽保管 8 行和 8 列,则 cust: 8
)——最大值为 NUMBER_OF_ROWS_AND_COLUMNS
(即,一个超全节点)。
一个节点将保管的行/列存储在修剪期间,并响应对等节点对这些行/列上的样本的请求。
节点保管的特定行和列是伪随机选择的,它是节点 ID、epoch 和保管大小的函数(样本函数接口: custodied_rows(node_id, epoch, custody_size=CUSTODY_REQUIREMENT) -> List(uint64)
和列变体)——重要的是,此函数可以由任何一方运行,因为输入都是公开的。
注意:增加给定 node_id
和 epoch
的 custody_size
参数会扩展返回的列表(而不是一个全新的 shuffle),这样,如果 custody_size
未知,则默认的 CUSTODY_REQUIREMENT
对于节点的保管的一个子集将是正确的。
注意:即使此函数接受 epoch
作为输入,也可以调整该函数,使其在许多 epoch 中保持稳定,这取决于网络/子网的稳定性要求。网络的刚性和子网可用于恢复的深度之间存在权衡。为了确保子网可以用于恢复,交错轮换可能需要按照修剪周期进行。
在每个插槽,一个节点需要能够轻松地从任何一组行和列中采样。为此,一个节点应该找到并维护一组多样化且可靠的对等节点,这些节点可以定期满足他们的采样需求。
一个节点运行一个后台对等节点发现过程,维护至少 NUMBER_OF_PEERS
个具有各种保管分布的对等节点(包括 custody_size 和行/列分配)。广告的 cust
大小和公共节点 ID 的组合使得这很容易公开访问。
如果采样失败,应该向上调整 NUMBER_OF_PEERS
。
注意:虽然高容量和超全节点在满足采样要求方面具有很高的价值,但一个节点应该保持跨节点容量的分布,以避免过度集中 p2p 图(在极端情况下变成 hub/spoke),并更好地在所有节点之间分配采样负载。
注意:预计在上述过程中将使用基于 DHT 的对等节点发现机制。信标链网络目前使用 discv5,其方式与描述的用于查找特定证明子网分布的对等节点类似。集成额外的对等节点发现方法是有价值的(例如,通过 libp2p gossipsub 的潜在对等节点发现),以增加对攻击其中一种发现方法的防御广度。
有 NUMBER_OF_ROWS_AND_COLUMNS
个行和 NUMBER_OF_ROWS_AND_COLUMNS
个列 Gossip 主题,每个行/列对应一个主题——对于 X
和 Y
从 0
到 NUMBER_OF_ROWS_AND_COLUMNS
(不包括),分别是 column_X
和 row_Y
。
为了保管特定的行或列,一个节点加入相应的 Gossip 子网。来自它们各自的行/列的可验证样本在分配的子网上进行 Gossip。
如果一个节点没有收到给定行/列的所有样本,但收到了足够重构的样本(例如,50% 以上,这是编码率的函数),该节点应该在本地重构并将重构的样本发送到子网上。
此外,该节点应该发送(交叉播种)他们已通过其他方法获得的(辅助 Gossip 或重构)分配给他们的给定行/列中缺少的任何样本。例如,如果节点重构了 row_x
,并且还参与了 column_y
子网(其中缺少 (X, Y) 样本),则将重构的样本发送到 column_y
。
注意:一个节点始终维护着一个他们正在关注的行和列的矩阵视图,能够相互引用并在任一方向上进行交叉播种。
注意:有一些时序方面的考虑需要分析——节点在什么时间点认为样本丢失并选择重构和交叉播种。
注意:在如何发送和考虑样本方面可能存在反 DoS 和服务质量方面的考虑——每个单独的样本都是一条消息,还是它们以聚合形式发送。
在每个插槽,一个节点对其对等节点进行(本地随机确定的)SAMPLES_PER_SLOT
次样本查询。一个节点利用 custodied_rows()
和 custodied_columns()
来确定要从哪个对等节点请求。如果一个节点在所有行和列上都有足够好的/诚实的对等节点,这有很高的成功机会。
采样时,节点会向根据其 custodied_rows
/ custodied_columns
确定保管此样本的所有对等节点发送一个 DO_YOU_HAVE
数据包,其中包含所有样本。所有对等节点首先回答一个他们拥有的样本的位域。
收到样本后,节点会将样本传递给之前没有此样本的任何节点,这可以通过 DO_YOU_HAVE
响应来得知(但根据其 custodied_rows
/ custodied_columns
应该拥有此样本)。
由于确定性的保管函数,一个节点确切地知道一个对等节点应该能够响应什么。如果一个对等节点没有响应他们保管的行/列的样本,一个节点可能会降低评分或断开与该对等节点的连接。
注意:一个对等节点可能不响应请求,原因可能是他们不诚实(实际上没有保管数据)、带宽饱和(本地限制)或他们自己无法获得所有样本。在前两种情况下,该对等节点不具有一致的 DAS 价值,一个节点可以/应该寻求优化以获得更好的对等节点。在后一种情况下,该节点可以根据对该对等节点和其他对等节点重复的 DO_YOU_HAVE
查询来做出本地决策,以评估该对等节点的价值/诚实度。
DAS 提供者是一个始终可用于 DAS 查询的超全(或高容量)节点。对于 p2p 来说,这些看起来与其他节点一样,但具有很高的广告容量,并且通常可以通过正常的发现方式潜在地找到它们。
也可以在带外找到它们,并将它们配置到节点中以直接连接和优先考虑。例如,一些 L2 DAO 可能会支持 10 个超全节点作为公共产品,节点可以选择将其中一些添加到其本地配置中,以提高其 DAS 服务质量。
这种直接对等连接利用了所有节点今天都支持的开箱即用的功能,并且可以补充(并减少攻击性)替代的对等节点发现机制。
分叉选择规则(本质上是一个 DA 过滤器)与给定的 DAS 设计是正交的,除了特定设计影响它的效率之外。
在任何 DAS 设计中,可能都有一些关于时序、短期重组的可接受性等的自由度。
例如,分叉选择规则可能要求验证者在插槽 N 上成功执行 DAS,才能在其分叉选择中包含插槽 N 的区块。这是最严格的 DA 过滤器。但是,滞后过滤器也可能是可以接受的,因为知道可能存在一些失败/短期重组,但这不会损害总体安全性。例如,该规则可以是——对于 N 中的子区块要包含在分叉选择中,必须为插槽 N-1 完成 DAS。
这种滞后技术及其分析对于任何 DAS 构建都将非常有价值。问题是——你能在多大程度上放宽你执行 DA 的速度要求,以及在最坏的情况下,不通过证明/最终性确认不可用的数据,以及这对短期重组和快速确认规则有什么影响。
PeerDAS 的关键在于,每个节点都可以在每个插槽找到/维护足够容量的足够多的对等节点,以满足他们的采样要求。
因此,对于给定的数据大小,我们可以轻松地模拟网络分布(节点数量、节点类型/容量的分布、每个节点可以响应的样本请求数量、最小对等节点数量等),以了解每个插槽成功进行 DAS 的机会。
我们可以计算/模拟各种参数化和假设的安全数据大小,例如:
接下来 - 模拟各种网络分布,以巩固我们对该方法界限的理解。
- 原文链接: ethresear.ch/t/peerdas-a...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!