该子协议解决章节4.4.2中描述的网络可用性和有效性相关话题。
考虑到可扩展性,Polkadot不要求每个人对整体系统的状态进行存储,准确的说,即不需要所有区块都存储网络的全部状态。相反,每个平行链区块通过擦除码被分成几个碎片,这样每个验证人都有一个碎片,总共有N个碎片。出于安全因素考虑,擦除阈值设置为ceil(N/3)。所有碎片信息由指定的收集人提交。且最初都可以在相关的平行链验证人处获得,(在这个角色中,平行链验证人也被称为初检员)然后这些分片信息将根据以下步骤进行分发:
1. 分发 - 每个平行链验证人最初都想要其中一个碎片,而平行链验证人也必须按一人一分片的要求进行分发;
2. 检索 - 审批检查者(即中继链验证人)需要确认有ceil(N/3) 的验证人有他们的碎片,并且其中部分中继链验证人将尝试进行碎片检索;
3. 进一步检索 -作为可选项,其他非验证方也可能想要执行进一步检查,例如响应钓鱼人警报,再次提出ceil(N/3)分片的需求。
这个子协议的目的是确保ceil(N/3)这个阈值可行,以及可以在合理的时间内得到相关验证人中检索,直到至少完成了后面几个阶段的时候。我们将遵循一个类似bittorrent的协议,但有以下区别。
- 对于分发和检索,接收者的集合是已知的。因此,除了bittorrent的pull语义之外,碎片可以通过已经拥有碎片的验证人提前推送;
- 哨兵节点背后的验证人将使用这些作为节点作为代理,而不是直接发送;
- 与中心化的追踪器不同,像谁拥有什么碎片信息这样的追踪,会通过中继链的Gossip网络进行传播。
对于初检员的预期是可以完全或者大部分连接;这也是校对协议的前提要求。审批员也应该完全或大部分连接,以帮助检索过程更快地完成。
除此之外,节点可以按照协议认为合适的方式与任何其他节点进行通信,类似bittorrent。为了防止DoS攻击,他们应该实施类似bittorrent的资源限制,此外节点应该相互验证并且只与其他验证人通信,包括初检员和审批员。后期可选阶段的非验证方会被授予身份验证令牌以达到可以通信的目的。关于负载均衡议题,例如节点在随机选择中如何避免对其他节点的意外覆盖,我们在单独文件中进行详细讨论。
我们认为此部分组建不适合使用结构化叠加拓扑学的原因有以下几点:
1. 每个碎片是发送给特定的人员,而不是每一个人
2. (a)想要获得特定数据碎片的人,需要知道从哪里获取 – 例如从验证人,初检员处获得
2. (b)其他想要随机非特定数据的人 – 例如审查员,希望任意1/3的碎片都可以重构
叠加拓扑学的应用场景要求刚好与上述情况完全相反:
1. 各数据碎片几乎会发给全员
2. 或者,人们需要特定的数据碎片,但不需要知道从哪里获取
例如,bittorrent有类似的要求要求类似但没有采用结构化叠加,它通过需求偏差进行点对点的连接。