在前面的部分中,我们讨论了节点将数据发送到另一个节点或其他节点组合,但没有具体说明这是如何实现的。我们这样做是为了简化模型并能够清楚地界定不同层之间的核心关注点。
当然,在真正的去中心化系统世界中,网络部分也必须是去中心化的——虽然网络上运行的高级协议是去中心化的,但是如果所有的通信都通过几个中央服务器,这显然不是好方案。举一个具体的例子:在某个安全模型中,包括传统的拜占庭容错设置,节点的建模可能是恶意的,但是缺少相关恶意的具体评估定义。一个安全模型要求必需有>1/3的节点是诚实的。即当诚实节点>1/3的时候,所有节点都可以随时实时地的相互信任的交流。然而,如果边界实际上被恶意的ISP控制,那么模型下的任何分析都会认为其相应的节点是恶意的。更重要的是,即使实际上中心化力量对众多节点没有任意执行权,但是如果底层通信网络是中心化的,就赋予了中心化的各方有能力破坏模型中>1/3的节点,并进一步破坏这个网络的安全假设。
在本节中,我们概述并列举了我们在Polkadot中需要的通信原语,并勾勒出关于我们如何以去中心化的方式实现这些高级设计,同时随着我们不断对量产系统的推进,更多的细节将得到完善。
如上所述,Polkadot 由一个独特的中继链与许多不同的平行链组成,同时中继链为平行链提供安全服务。为此,需要满足以下网络级别功能,大致分为以下方面:
1. 与所有区块链协议一样,中继链需要满足以下功能要求:
a) 接受并分发来自用户的交易和其他外部的数据(统称为外部数据或外部源)
b) 分发收集子协议的工件4.2
c) 分发终态子协议的工件4.3.2
d) 同步先前完成的状态
作为一个重要的示例,平行链可以根据上述结构自行选择执行与否,甚至可能重新使用相同的子协议。波卡的部分实现被构建成了一个单独的程序库,称为“Substrate”,专门进行基础框架构建。
2. 关于中继链和平行链交互,需要:
a) 接受来自平行链收集人产生的平行链区块
b) 分发包含有效性证明的平行链区块元数据
c) 分发平行链区块数据并使其一段时间内可用(见4.4.2),以完成审计
3. 关于平行链间的交互,需要:
a) 在平行链之间分发消息(见4.4.3),特别是从相关发件人到相关收件人的消息(见4.4.3)。
对于上述每个功能要求,我们通过以下方式进行满足:
1(b), 1(c), 2(b) – 工件通过Gossip进行原样广播(即无需进一步编码)
1(a), 1(d), 2(a) - 实际上,一组节点向客户端提供相同的分布式服务。为了接受外部信息或区块,客户端将它们直接发送到服务节点;为了同步,客户端直接从服务节点接收可验证的数据。
2(c) - 特殊情况,如下。简而言之,数据将被擦除编码,以便不同的接收者接收到一个小的数据大小/接收到一小部分数据;碎片信息直接接通过QUIC发送。
3(a) - 特殊情况,如下。简而言之,消息直接通过QUIC发送;在这个过程中,发件箱被重新组合成收件箱,随后又可以批量传输给收件人。
我们将在接下来的几节中更详细地介绍这些内容。最后,再分享一下支持所有子协议的底层技术,即身份验证、传输和发现相关内容。