自 2016 年 Gavin Wood 首次构思 Polkadot 去中心化区块链平台以来,研究人员和开发人员一直在致力于改进、更新和完善 Polkadot。我们刚刚发表的《Polkadot 概述及其设计注意事项》在原白皮书的基础上进行了扩展,对波卡协议进行了更新和最全面的综述。

波卡最早出现在 2016 年,当时 Gavin Wood 发表了白皮书,概述了其背后的技术愿景和基本的原理。

他指出,尽管区块链技术是有前景的,但存在一些问题,导致它在现实世界中还没有重要的落地。Polkadot 旨在解决这些问题,并创建一个可扩展(可随需求增长)的区块链架构,在一个强大的共享安全系统中,具有不同功能的不同区块链可以共存并相互通信,为下一代互联网奠定基础。

新的《Polkadot 概述及其设计注意事项》论文在白皮书的基础上,对 Polkadot 及其设计考虑进行了扩展,对 Polkadot 的设计组件和子程序进行了全面的更新。我们在这里简单分享一些。

一句话总结

Polkadot 是一个可扩展的异构多链区块链。这意味着它由一个协作的去中心化区块链网络组成,这个网络叫做中继链,它与并行运行的分片链即平行链交互。这些平行链可以看作是中继链的客户端,中继链的目的是保护和协调平行链。

治理

Polkadot 有一个复杂的治理系统,所有 DOT( Polkadot 的原生代币)持有者都有发言权。议案可由 DOT 持有人或理事会提出。两者都需要通过一次质押权重(stake-weighted)的全民公投来达成一致。

所有 DOT 持有人都可以登记参加理事会。理事会由 23 名成员组成,定期一个月。它的作用只是代表 DOT 利益相关者,提交重要提案,在特殊情况下,取消毫无争议的危险或恶意提案。

与公开提案相比,理事会提案的好处是要求在全民投票中通过的赞成票数量更少。理事会的提议需要得到理事会绝大多数成员的支持,没有否决权。危险或恶意的提案只有在全体一致表决后才能取消。

技术委员会(由在 Polkadot 中实现或指定项目的团队组成)的存在,其唯一目的是检测代码中的错误等问题,并快速跟踪链的紧急升级或更改。成员可由理事会以多数票增加或取消。

财政部(Treasury )资金的使用最终由所有 DOT 持有者通过全民公投来控制。财政部筹集资金的方式是通过转移一些验证人奖励(来自通胀增发的部分),一小部分交易费用和 slash 惩罚(由恶意或不称职的验证人支付的罚款)。这些资金用于系统和更广泛的生态系统(市场营销、社区活动和合作)的顺利运行。

NPoS 机制

提名权益证明(NPoS)是对权益证明(PoS)的一种改编,在这种情况下,所有的代币持有人都可以支持大量但有限的验证人(在 genesis 中预计为数百个)。选定的验证人负责运行中继链。

这允许大量的 stake 去支持验证人,远远高于任何单个用户的持有量。由于提名人与他们支持的验证人共享可能的 slash 惩罚和经济回报,所以提名人被被激励去选择具有良好业绩和安全实践记录的验证人。

使用比例代表制(proportional representation),所有提名人中的一些少数人都可以按照他们的 stake 比例选出一些验证人,不存在少数人被低估的情况。

因此,NPoS 不仅比工作证明(PoW)效率高得多,而且比没有质押委托、且只有少数拥有大量代币的人才能做验证人的 PoS 方案更安全、更去中心化。

有关 Polkadot 中 NPoS 的更详细描述,另请参阅学术论文《提名权益证明中的验证人选举》 https://arxiv.org/abs/2004.12990 和 Medium 的文章《NPoS 机制如何在 Polkadot 中运行》。

区块生产和共识

使用 NPoS 选择出来的验证人负责通过混合共识接收、验证和重新发布中继链上的块,该共识协议将最终性工具(GRANDPA)从块生产机制(BABE)中分离出来。

这种组合允许 1) BABE 的概率最终性,因为它的链选择规则,在一定时间后,区块将以接近 1 的概率完成,2) GRANDPA 的可证明和确定的最终性,在这里最终的块永远保持最终性。

组合这些机制可以避免在不知不觉中跟随错误的分叉(概率最终性的风险),并允许块的快速最终,因为较慢的最终性机制可以单独最终块,而不会导致较慢的交易处理或暂停。

有效性和可用性

简言之,平行链收集人生成一个有效性证明(PoV)块并将其发送给平行链验证人,后者将其区块头签名为有效。具有足够签名的区块头被添加到中继链块中。

创建平行链区块后,平行链 blob(PoV 块和一组传出消息)需要一段时间才能使用,以确保非对抗性验证人(即好的验证人)可以检查其有效性。为了使验证人能够共同保证可用性,会使用一个擦除编码系统。这将 PoV 块分发给所有验证人。

Polkadot 有三级有效性检查。

首先,当平行链验证人验证 PoV 块时,它们签名并将平行链 blob 的擦除代码分发给每个验证人。

第二,作为钓鱼人的节点(可能主要是充当收集人)将报告无效。

第三,一些随机分配的验证人检查有效性。如果出现了大问题,也没有向他们提供该块,他们可以使用在第一级中分布的足够数量的擦除代码片段(即第一点中提到的分发)来重建 PoV 块。

如果验证人看到其他验证人给出的无效报告,则可以通过分布式擦除代码片段重建 blob。如果存在一定数量的失效报告和验证人在中继链块中没有平行链块头的擦除代码段的报告,则中继链块将不会最终确定。

如果在中继链上发现任何无效的平行链块,则其验证人将被 slash 惩罚。将一个无效块放入 Polkadot 的预期成本是高于支持单个平行链的 stake 数量,这会起到了威慑作用。

如果中继链块所指的所有平行链块都有足够的有效性报告,并且没有任何挑战,那么中继链块就可以由 GRANDPA 最终确定。

跨链消息传递

跨链消息传递(XCMP)可以让消息以安全、无信任的方式、快速、有序地在不同的平行链之间传递。XCMP 的主要目标之一是为在平行链之间传递的消息提供一致的历史记录。

这包括两部分:

一致的历史记录:平行链块输出队列上的元数据包含在中继链上,稍后由另一个接收的平行链进行消息验证。可靠传递:与此元数据对应的消息正文需要从发件人分发到收件人。

使用基于 Merkle 树的简单排队机制来解析消息的顺序,以确保准确度。