POLKADOT: VISION FOR A HETEROGENEOUS MULTI-CHAIN FRAMEWORK自用翻译和笔记

POLKADOT: VISION FOR A HETEROGENEOUS MULTI-CHAIN FRAMEWORK自用翻译和笔记

摘要

当前的区块链架构都存在许多问题,尤其是可扩展性和可扩展性的实用方法。我们认为,这源于将共识架构的两个非常重要的部分——匿名性和有效性——过于紧密地联系在一起。本文介绍了一种从根本上将二者区分开来的架构,即同源多链。
在划分这两个部分的过程中,通过将所提供的整体功能保持在绝对最低的安全性和传输性,我们引入了现场核心可扩展性的实用方法。可扩展性是通过对这两个功能的分而治之的方法来解决的,通过激励不受信任的公共节点来扩展其绑定的核心。
这种体系结构的异构性使许多高度不同类型的共识系统能够在一个不信任、完全去中心化的“联邦”中互操作,从而允许开放和封闭的网络相互之间进行无信任访问
我们提出了一种与一个或多个预先存在的网络(如以太坊)提供向后兼容性的方法。我们相信,这样的系统在整体搜索能够实现全球商业级别的可扩展性和隐私性的实际可实施系统时提供了一个有用的基层组件

Tips:

如果从性质分类的角度来看,共识算法可以根据不同的性质进行分类,常见的性质包括:

  1. 匿名性:匿名性是指节点在共识算法中的身份可以是匿名的或者伪匿名的。一些共识算法可以保护节点的隐私和安全,例如零知识证明算法。
  2. 有效性:有效性是指共识算法需要能够保证交易的有效性,也就是防止双花问题和恶意攻击。例如,PoW算法需要通过计算复杂的哈希值来获得区块的验证权,保证了交易的有效性。
  3. 可扩展性:可扩展性是指共识算法需要能够适应网络规模的增长,保证系统的性能和吞吐量。例如,DPoS算法通过委托投票机制,可以有效地扩展网络规模。
  4. 可信性:可信性是指共识算法需要能够保证系统的可信性和安全性。例如,PoS算法通过让持有代币的用户参与共识过程,可以增加系统的安全性和可信度。
  5. 公平性:公平性是指共识算法需要能够保证公平竞争,防止某些节点获得过大的权力。例如,PoW算法通过工作量证明机制,保证了节点在竞争中的公平性。

PREFACE

这是对一个可能的方向的技术“愿景”总结,可以在进一步发展区块链范式时采取,并对为什么这个方向是合理的进行一些思考。它在开发的这个阶段尽可能详细地列出了一个系统,该系统可能会对区块链技术的多个方面进行具体改进
它不是一个正式的或其他形式的规范。它既不是全面的,也不是最终的设计。它并不打算涵盖框架的非核心方面,如API、绑定、语言和用法。这显然是实验性的;在指定了参数的情况下,它们可能会发生变化。针对社区意见和批评,将增加、完善和删除机制。本文的大部分内容可能会被修改为实验证据和原型设计,以提供关于哪些有效,哪些无效的信息。
本文件包括对协议的核心描述,以及可用于改进各个方面的指导思想。可以预见的是,核心描述将被用作概念证明的初始系列的起点。最终的“1.0版”将基于这一完善的协议,以及已被证明是项目实现目标所必需的传统想法。

INTRODUCTION

区块链在“物联网”(IoT)、金融、治理、身份管理、网络去中心化和资产跟踪等多个领域表现出了巨大的实用前景。然而,尽管有着宏大的技术前景,但我们还没有看到现有技术在现实世界中的重大部署。我们认为这是由于现有技术堆栈的五个关键问题:

  • 可扩展性: 系统在处理单个事务时在处理、带宽和存储方面花费了全球多少资源,在峰值条件下可以合理处理多少事务?
  • 可隔离性: 在同一框架下,多方和多个应用程序的不同需求能否达到接近最优的程度?
  • 可开发性: 工具的工作效果如何?API是否满足了开发人员的需求?有合适的文档材料吗?那里有正确的整合吗?
  • 治理: 网络能否保持灵活性,随着时间的推移而变化和适应?决策是否具有足够的包容性、合法性和透明度,以提供对中央集权系统的有效领导?
  • 适用性: 这项技术本身是否真的是一种迫切的需求?是否需要其他“中间件”来弥补与实际应用程序的差距?

在目前的工作中,我们的目标是解决前两个问题可扩展性和可隔离性。也就是说,我们相信Polkadot框架可以为每一类问题提供有意义的改进。

现代高效的区块链实现,如奇偶校验(Parity Technologies Ltd.开发的,避免数据篡改或毁坏)以太坊客户端,在性能良好的消费者硬件上运行时,每秒可以处理超过3000笔交易。然而,目前现实世界的区块链网络实际上被限制在每秒30笔(EHT2.0 每秒几千条)左右。这种限制主要源于这样一个事实,即当前的同步一致性机制需要在预期处理时间上有很宽的时间安全余量(防止分叉),而希望支持较慢的实现。这是由于潜在的共识架构:状态转换机制,或各方整理和执行交易的方式,其逻辑从根本上与共识“规范化”机制相联系,或各方就许多可能的、有效的历史之一达成一致的方式。

这同样适用于比特币和以太坊等工作证明(PoW)系统,以及NXT和Bitshares等权益证明(PoS)系统:所有这些系统最终都会遭受同样的障碍。这是一个帮助区块链取得成功的简单策略。然而,通过将这两种机制紧密耦合到一个协议单元中,我们还将具有不同风险状况、不同可扩展性要求和不同隐私需求的多个不同的应用程序和应用程序捆绑在一起。一种规模并不适合所有人。
通常情况下,为了获得广泛的吸引力,一个网络采用了一定程度的保守主义,这会导致最小公约数效应——只服务于少数人,并最终导致创新、表现和适应能力的下降,有时甚至会急剧下降。(这句话中的“保守”指的是网络对新思想、新技术、新用户等保持谨慎和保守态度。这种“最小公约数”效应意味着网络只满足最基本的需求,而不会引入新的特性和功能,从而忽视了部分用户的需求和创新的可能性。这最终会导致网络无法跟上时代的发展,从而失去用户和市场份额
有些系统,比如Factom,完全放弃了状态转移机制。然而,我们需要的很多功能都需要能够按照共享状态机转移状态。放弃状态转移机制解决了一些问题,但它并没有提供另一种解决方案。
因此,很明显,作为一种可扩展的去中心化计算平台的途径,探索的一个合理方向是将共识架构与状态转换机制解耦。这就是Polkadot作为可扩展性解决方案所采用的策略。

协议、实现和网络

与比特币和以太坊一样,Polkadot同时提到了网络工作协议和运行该协议的(迄今为止预设的)主要公共网络。Polkadot往往是一个自由开放的项目,协议规范由知识共享许可证管理,代码由FLOSS许可证管理。该项目以开放的方式开发,并接受任何有用的贡献。一个RFC系统(Request for Comment,开放的制定互联网标准的流程),就像Python增强建议一样,将允许在协议更改和升级方面进行公开合作。
我们对Polkadot协议的最初实现将被称为Parity Polkadot平台,并将包括完整的协议实现和API绑定。与其他Parity区块链实现一样,PPP被设计为一种通用的区块链技术堆栈,既不适用于公共网络,也不适用于私人/财团运营。它的开发因此得到了多个方面的资助,包括英国政府的拨款。

注:

Polkadot网络上的主要客户端有以下几种:

  1. Parity Polkadot客户端:由Parity Technologies开发和维护的完整节点客户端,支持Polkadot和Kusama等平台。
  2. Substrate Polkadot客户端:由Web3基金会开发的完整节点客户端,支持Polkadot和其他基于Substrate框架的区块链平台。
  3. Polkadot JS客户端:由Web3基金会开发的一组工具和库,包括完整节点客户端和轻量级节点客户端,支持Polkadot和其他Substrate框架的区块链平台。
  4. MathWallet Polkadot客户端:由MathWallet团队开发的轻量级节点客户端,支持Polkadot和其他区块链平台。
    /end

尽管如此,本文还是在公共网络的文本下描述了Polkadot。我们在公共网络中所设想的功能是所需的替代(例如,私有和/或联盟)设置的超集。此外,在这种情况下,可以更清楚地描述和讨论Polkadot的全部范围。这确实意味着读者应该意识到,可能描述了某些机制(例如与其他公共网络的互操作),当在非公共(“许可”)情况下部署时,这些机制与Polkadot不直接相关。(因为在公共网络中,需要比在私有和/或联盟情境中更多的功能,但有些如与其他公链的互操作性可能在非公共网络中用不到

前人工作(重要性不大)

至少两年来,人们一直在私下非正式地提议将基本共识与状态转移脱钩。在以太坊初期,Max Kaye是这一战略的支持者。
下面那段的人话:一个名为Chain fibers的可扩展性更复杂的解决方案,最早于2014年6月提出,后来于同年发表。该解决方案提出了一个单一的中继链和多个同质链,提供透明的跨链执行机制,并通过交易延迟来支付去中心化的代价——需要协调系统不同部分的交易需要更长的时间来处理。Polkadot从Chainfibers和后续对话中吸取了很多架构思想,但在设计和提供方面存在很大差异。
一个更复杂的可扩展解决方案ChainFibers可以追溯到2014年6月,并于第一年晚些时候首次发布,它提出了一个单一中继链和多个多功能链的理由,提供了一个透明的链间执行机制。对于需要协调系统不同部分的粗略事务延迟事务,需要更长的时间来处理,因此需要支付去相干费用。Polkadot在很大程度上借鉴了这一点以及与不同人群的后续对话,尽管它在设计和规定上有很大不同。
虽然在生产中并没有可与 Polkadot 理论相媲美的系统,但已经提出了几种具有一定相关性的系统,尽管在任何实质性的细节水平上都很少。这些提议可以分解为放弃或减少全局相干状态机概念的系统,那些试图通过同构碎片提供全局相干单例机的系统,以及那些只针对异构的系统。

没有全局状态的系统:

Factom是一个在没有相应有效性的情况下证明规范性的系统,有效地允许记录数据。由于避免了全局状态以及由此带来的扩展困难,它可以被认为是一个可扩展的解决方案。然而,如前所述,它所解决的问题集严格来说要小得多。
Tangle是一种新的共识系统方法。与其将事务排列成块,并在严格链表上形成共识,以给出状态变化的全球规范排序,它在很大程度上摒弃了重结构排序的思想,并通过显式引用来推动依赖转换动作的有向无循环图,后面的项有助于规范化前面的项。对于任意的状态变化,这个依赖图很快就会变得难以处理,然而对于更简单的UTXO模型2来说,这变得非常合理。由于系统只是松散地相互关联,并且事务通常是相互独立的,因此大量的全局并行性变得很自然。使用UTXO模型确实会将Tangle限制在一个纯粹的价值转移“货币”系统中,而不是任何更通用或可扩展的系统。此外,如果没有严格的全局一致性,与其他系统的交互就变得不重要了,因为这些系统往往需要对系统状态有绝对的了解。

异构链系统:

Side-chains是比特币协议的一个适当补充,它将降低主比特币链和附加侧链之间的无信任交互。没有规定侧链之间存在任何程度的“丰富”互动:互动将仅限于允许侧链成为彼此资产的定制者,用当地术语来说,这是双向peg。最终愿景是建立一个框架,通过将比特币与其他具有比比特币协议所允许的更具异国情调的状态转换系统的链挂钩,可以为比特币提供额外的(如果是外围的)功能。从这个意义上说,侧链处理的是Extensibility,而不是Scalability。

注:

extensibilit 和 scalability 都有可扩展性的区别,但是其应用场景和实现方式有所不同。

"Extensibility"在区块链中通常指的是能够方便地扩展区块链的功能和应用场景。例如,在比特币中,通过添加新的操作码(OP_CODE)或脚本语言,可以扩展比特币的应用场景,实现更多的功能,例如多重签名、原子交换等。类似地,在以太坊中,可以通过编写智能合约来实现更多的功能,例如去中心化应用程序(DApps)、非同质化代币(NFTs)等。这些扩展功能可以使区块链更加灵活和实用,能够支持更多的应用场景和业务需求。

"Scalability"则通常指的是区块链系统能够支持更大的交易量和用户规模,而不会导致性能和可靠性的下降。在区块链中,随着交易量的增加,区块链网络会变得越来越拥挤,交易确认时间和交易费用也会增加,这会限制区块链的应用场景和用户规模。为了提高区块链的可伸缩性,需要采用各种技术手段,例如分片、侧链、状态通道等,来拓展区块链的容量和性能。
/end

事实上,根本没有关于侧链的有效性的规定;代表侧链持有的来自一个链(如比特币)的代币只有通过侧链激励矿工规范有效转换的能力才能得到保护。比特币网络的安全性无法轻易转换为代表其他区块链工作。此外,确保比特币矿工合并挖矿(即将其规范化能力复制到侧链的规范化能力上),更重要的是,验证侧链过渡的协议不在本提案的范围内。

Cosmos是一个提出的与侧链相同的多链系统,将中本聪PoW共识方法替换为Jae Kwon的Tendermint算法。本质上,它描述了多个链(在区域中操作),每个链都使用Tendermind的单个实例,并通过一个主中继链进行无信任通信。这种链间通信仅限于数字资产的转移(“Token”),而不是任意信息,然而,这种链内通信确实有数据的返回路径,例如向发送者报告转移状态。
分区链的验证集,特别是激励它们的方法,就像侧链一样,仍然是一个未解决的问题。一般的假设是,每个分区链本身都将持有一个价值代币,其通货膨胀被用来支付验证器的费用。仍处于设计的早期阶段,目前该提案缺乏对实现全球有效性的可扩展确定性的经济手段的全面细节。然而,与实施强粘性的系统相比,区域和轮毂之间所需的松散粘性将允许区域链的参数具有额外的灵活性。

Casper(以太坊2.0 PoS算法)

到目前为止,Casper和Polkadot之间还没有进行全面的审查或并排比较,尽管人们可以对两者进行相当全面(因此也不准确)的描述。

Casper是对PoS共识算法如何基于参与者押注哪一个分叉最终会成为规范的重新构想。我们充分考虑了确保它对网络分叉的鲁棒性,即使在延长的情况下也是如此,并且在基本以太坊模型的基础上具有一些额外的可扩展性。因此,迄今为止,Casper往往是一个比Polkadot及其前身复杂得多的协议,并且与基本的区块链格式有实质性的偏离。它在未来将如何迭代,以及最终部署后会是什么样子,目前尚不清楚。

虽然Casper和Polkadot都代表了对新协议的兴趣,在某种意义上,也代表了对其的增强,但它们的最终目标和部署路径之间存在着实质性的差异。Casper是一个以以太坊基金会为中心的项目,最初旨在对协议进行PoS修改,不希望创建一个基本可扩展的区块链。至关重要的是,它被设计成一个硬分叉,而不是任何更具扩展性的分叉,因此所有以太坊客户和用户都需要升级或保持在不确定的分叉上。因此,部署变得更加困难,这是分散项目中固有的,在分散项目中需要密切协调。

Polkadot在几个方面有所不同;首先,Polkadot被设计成一个完全可扩展和可扩展的区块链开发、部署和交互测试平台。它在很大程度上是一个经得起未来考验的工具,能够在没有过于复杂的去中心化协调或硬分叉的情况下,利用新的区块链技术。我们已经设想了一些用例,如加密联盟链和块时间非常低的高频链,这些用例在目前设想的以太坊的任何未来版本中都是不现实的。最后,它和以太坊之间的耦合非常松散;以太坊方面没有必要采取任何行动来实现两个网络之间的无信任交易转发。

简言之,虽然Casper/Ethereum 2.0和Polkadot有一些短暂的相似之处,但我们认为它们的最终目标有很大不同,而且在可预见的未来,这两种协议可能最终会在互惠互利的关系下共存,而不是竞争。

Summary

Polkadot是一种可升级的异构多链。这意味着,与之前专注于为潜在应用程序提供不同通用性程度的单链的区块链实现不同,Polkadot 的设计完全不提供固有的应用程序功能。相反,Polkadot提供了基石“中继链(relay - chain)”,在其上可以并排托管大量可验证的、全局一致的动态数据结构。我们将这些数据结构称为“平行”链或链,尽管它们在本质上没有特定的区块链需求。

换句话说,除了两个非常重要的点之外,Polkadot可以被认为等同于一组独立的链(例如,包含以太坊、以太坊经典、Namecoin和比特币的集合):

  • 共享安全
  • 去信任链间可交易性

这些就是为什么我们认为Polkadot是“可缩放的”。原则上,要部署在Polkadot 上的问题可以基本上平行化,并通过大量的副链进行扩展。由于每个副链的所有方面都可以由Polkadot网络的不同部分并行进行,因此该系统具有一定的扩展能力。Polkadot提供了一个相当简单的基础设施留下了许多复杂性,需要在中间件级别进行广告处理。这是一个有意识的决策,旨在降低开发风险,使精致的软件能够在短时间内开发出来,并对其安全性和完整性有良好的信心。

Polkadot 的哲学

Polkadot应该提供一个绝对坚如磐石的基础,在这个基础上建立下一波共识系统,从生产能力成熟的设计到新生的想法,都是贯穿风险范围的。通过在安全、隔离和通信方面提供强有力的保证,Polkadot可以允许平行链自己从一系列属性中进行选择。事实上,我们预计各种实验性区块链每天都会推动被认为是敏感的属性。

我们看到类似比特币或Z-cash的保守、高价值链与价值较低的“主题链”(这样的营销,很有趣)和测试网共存,费用为零或接近零。我们看到完全加密、“黑暗”的联盟链与以太坊等高功能、开放的链共存,甚至为其提供服务。我们看到实验性的基于虚拟机的新链,如主观的耗时浪费链,被用作从更成熟的类似以太坊的链或更受限制的类似比特币的链外包困难的计算问题的手段。

为了管理链升级,Polkadot将内在地支持某种治理结构,可能基于现有的稳定政治体系,并具有类似于黄皮书委员会的双重方面。作为最终的权威,潜在的可保留代币持有者将拥有“公投”控制权。为了反映用户对开发的需求,但开发者对合法性的需求,我们预计一个合理的方向是由“用户”委员会(由绑定验证器组成)和由主要客户开发者和生态系统参与者组成的“技术”委员会组成两院。代币持有者将保持最终的合法性,并形成一个绝对多数来扩大、重新确定、取代或解散这一结构,这是我们毫不怀疑的最终需要:用吐温的话来说,“政府和尿布必须经常更换,原因也是一样的”。

尽管在更大的一致性机制中,重新表征对于重排列通常是微不足道的,更具质量的变化,如替换和扩充,可能需要非自动化的“软法令”(例如,通过块号的规范化和正式指定新协议的文件的散列),或者需要核心共识机制包含正式丰富的语言来描述其本身可能需要改变的任何方面。后者是最终目标,然而,选择前者更有可能是为了制定合理的开发时间表。

Polkadot的主要原则和我们评估所有设计决策的规则是:

  • 最小:Polkadot应该具有尽可能少的功能性。
  • 简单:基本协议中不应该存在超出合理范围的额外复杂性卸载到中间件中,通过平行链放置或在以后的优化中引入。
  • 通用:不应在副链上放置不必要的要求、约束或限制;Polkadot应该是共识系统开发的试验台,可以通过使扩展尽可能适合的模型进行优化。
  • 鲁棒性:Polkadots应该提供一个基本稳定的底层。除了经济稳健之外,这也意味着分散,以最大限度地减少高回报攻击的载体。

Polkadot的参与者

维护Polkadot网络有四个基本角色:Polkadot 网络的参与者有四种角色:Nominator 提名人、Collator 收集人或者核对人,Fisherman 钓鱼人或者渔夫、Validator 验证人。在Polkadot的一个可能的实现中,后一个角色实际上可以分解为两个角色:基本验证人和可用性保证人。
image-20230512132003950

验证人

验证者收费最高,有助于在 Polkadot 网络上封存新区块。 验证者的角色取决于存入足够高的保证金,尽管我们允许其他保证方指定一名或多名验证者代表他们行事,因此验证者保证金的一部分可能不一定由验证者本身拥有,而是由这些提名人。(提名人普通DOT持有者)

在Polkadot网络中,验证节点是负责维护整个网络的安全性和共识的节点。验证节点需要运行一个高可用性和带宽充足的Relay Chain客户端实现。在每个区块生成时,验证节点可能会被选为验证和认可一个被提名的平行链(parachain)上的新区块。该过程涉及接收、验证和重新发布候选区块。平行链的提名是确定性的,但在很长时间之前是几乎无法预测的。

由于验证节点无法合理地维护所有平行链的完全同步数据库,因此预期验证节点将把提议新平行链区块的任务委托给第三方,称为收集者(collator)。收集者是为特定平行链负责收集交易、生成区块,并向验证节点提供候选区块。验证节点将根据收集者提供的候选区块进行验证和认可,并参与Relay Chain的共识过程。

一旦所有新的准链块都被其指定的验证器子组正确地验证,验证器就必须批准中继链块本身。这包括更新事务队列的状态(本质上是将数据从一个副链的输出队列移动到另一个副链路的输入队列),处理已批准的中继链事务集的事务,并批准最终块,包括最终的副链更改。

一个验证器没有履行他们在我们选择的共识算法规则下寻找共识的义务,这是双关语。对于最初的、无意的失败,这是通过扣留验证器的奖励来实现的。反复的故障会导致他们的保证金减少(通过烧币)。可证明的恶意行为,如双重签名或试图提供无效阻止,会导致整个保证金的损失(部分被烧毁,但大部分被交给了举报人和诚实的行为者)。

从某种意义上说,验证者类似于当前PoW区块链的矿池。

Nominator 提名人

提名人是为验证人的担保债券出资的股份持有方。他们除了投入风险资本和保证他们信任特定的验证器(或其集合)在维护网络时负责任地行动之外,没有其他作用。根据他们贡献的保证金增长,他们的存款会按比例增加或减少。

接下来,与收集者一起,提名者在某种意义上类似于当今PoW网络中的矿工。

收集者

交易收集人(简称收集人)是协助验证人生产有效平行链区块的一方。 他们为特定的平行链维护一个“全节点”; 这意味着他们保留了所有必要的信息,以便能够以与矿工在当前 PoW 区块链上所做的方式大致相同的方式编写新块和执行交易。 在正常情况下,他们将整理并执行交易以创建一个未密封的区块,并将其与零知识证明一起提供给目前负责提出平行链区块的一个或多个验证者。

收集者、提名者和验证者之间关系的确切性质可能会随着时间的推移而改变。 最初,我们希望收集人与验证人密切合作,因为只有少数(可能只有一个)交易量很小的平行链。 初始客户端实现将包括 RPC,以允许平行链收集者节点无条件地为(中继链)验证器节点提供可证明有效的平行链块。 (链和交易变多)随着维护所有此类平行链的同步版本的成本增加,我们希望看到更多的基础设施到位,这将有助于将职责分离给独立的、经济动机的各方。

随着Polkadot网络的发展,预计会出现竞争收集最多交易费用的收集者池。这些收集者池可能与特定的验证节点签订合约,在一段时间内为验证节点提供服务,并获得一部分奖励收益。另外,独立的收集者也可以以竞争性的方式提供有效的平行链区块,并立即获得奖励的一部分作为回报,类似于自由职业者。这样的市场机制可以促使收集者之间的竞争,提高系统的效率和安全性。

类似地,分散的提名人池可以让多个已绑定的参与者协调和共享验证节点的责任。提名人池的出现可以帮助提高网络的去中心化程度,并确保更多参与者的开放参与。这样的池化机制可以增加网络的韧性,使得验证节点的选择更加公正和分散。

总结起来,该段话强调了在Polkadot网络中可能出现的收集者池和提名人池,并解释了它们的优势。收集者池可以提供更好的交易费用收集能力和服务质量,而提名人池可以增加网络的去中心化和参与度。这些池化机制有助于创建一个更加开放、竞争性和去中心化的系统,从而提高整个Polkadot网络的效能和安全性。

渔夫

与其他两个活跃的部分(验证者和提名人)不同,渔民与区块授权过程没有直接关系。相反,他们是独立的“赏金猎人”,其动机是获得一次性的巨额奖励。正是由于渔民的存在,我们预计不当行为事件很少发生,而且这种情况只是由于担保方在密钥安全方面疏忽大意,而不是出于恶意。这个名字来自于预期的奖励频率、参加的最低要求和最终的奖励规模。

渔民通过及时证明至少有一个保税方的违法行为来获得奖励。非法行为包括签署两个分别具有相同批准金额的区块(双签),或者在平行链的情况下,帮助批准一个无效区块。为了防止过度奖励或妥协,以及对会话密钥的不当使用,提供单个验证器非法签名消息的基本奖励是最低的。随着来自其他验证器的更多确凿的非法签名被提供,这意味着真正的攻击,这种奖励逐渐增加。根据我们的基本安全断言,即至少三分之二的验证器是善意的,渐近线被设置为66%。

渔民有点类似于现在区块链系统中的“全节点”,需要的资源相对较少,不需要承诺稳定的运行时间和带宽。 渔民的不同之处在于他们必须缴纳小额保证金。 这种联系可以防止女巫攻击浪费验证者的时间和计算机资源。 它可以立即提取,可能不会超过几美元,并且可能会因发现行为不端的验证者而获得丰厚的回报。

设计概述

本节旨在对整个系统进行简要概述。下文将对该系统进行更深入的探讨。

Alt

共识:

在平行链上,通过一种现代的异步拜占庭容错(BFT)算法,在一组相互认可的有效区块上实现了低级别的共识。该算法受到了简单的 Tendermint 和更复杂的 HoneyBadgerBFT 的启发。后者提供了在网络基础设施存在故障的情况下,通过一组主要是善意的权威或验证者,实现高效和容错的共识。

对于一个权威证明(PoA)式的网络来说,这一点就足够了,然而,Polkadot被认为可以在完全开放和公开的情况下部署为一个网络,而不需要任何特定的组织或可信的权威来维护它。因此,我们需要确定一组验证器并激励他们诚实。为此,我们使用了基于PoS的选择准则。

PoS:

我们假设网络将有一些方法来衡量任何特定账户的“股份”。为了便于与现有系统进行比较,我们将测量单位称为“令牌”。不幸的是,由于多种原因,这个词并不理想,尤其是作为一个简单的与账户相关的标量值,并没有个体的概念。

我们设想通过提名权益证明 (NPoS) 方案不频繁地(每天最多一次,但可能很少,每季度一次)选举验证者。 激励可以通过按比例分配来自代币基础扩张的资金(每年高达100%,但更有可能在10%左右)以及收取的任何交易费用。虽然货币基础扩张通常会导致通货膨胀,但由于所有代币持有者都有公平的参与机会,如果代币持有者愿意参与共识机制,他们所持代币的价值就不需要随着时间的推移而减少。特定比例的代币将成为质押过程的目标;有效的代币基础扩张将通过基于市场的机制进行调整,以达到这一目标。(质押越多,通胀越低,与Cosmos的通胀模型很像

验证者因其利害关系而紧密相连;退出验证人的债券在验证人的职责终止后很长一段时间(可能在3个月左右)仍然有效。这种长期的债券清算期允许未来的不当行为受到惩罚,直到对链进行定期检查。不当行为会导致惩罚,例如减少回报,或者在故意损害网络完整性的情况下,验证器会将其部分或全部股份输给其他验证器、线人或整个利益相关者(通过焚烧)。例如,试图批准分叉的两个分支的验证器(有时被称为“短程”攻击)可以通过后一种方式识别和发布。

长期无抵押攻击通过一个简单的“checkpoint”闩锁来规避,该闩锁可以预先释放超过特定链深度的危险链重组。为了确保新同步的客户端不会被欺骗到错误的链上,将出现定期的“硬分叉”(最多与验证人的债券清算同期),将最近的检查点块哈希硬编码到客户端中。这与减少“有限链长”的足迹或成因区块的周期性重新播种措施配合得很好。
这段话提到了如何防止长期无抵押攻击(long-range ”nothing-at-stake“ attacks)以及确保新同步的客户端不会被欺骗进入错误的区块链。

首先,通过简单的”checkpoint“机制,防止发生超过特定链深度的危险链重新组织,从而规避了长期无抵押攻击。这个机制在特定的链深度之前设置了一个检查点,超过这个深度的链重新组织将被阻止。

其次,为了确保新同步的客户端不会进入错误的链,定期进行”硬分叉“(hard forks)操作。这些硬分叉将在验证者抵押金解除期限之内进行,并将最新的检查点区块哈希硬编码到客户端中。这样做可以确保新同步的客户端能够准确地连接到正确的链上。

此外,还采取了进一步减少占用空间的措施,如”有限链长度“或周期性重置创世区块。这些措施可以帮助减小区块链的占用空间,并提供更高的效率。

简而言之,这段话描述了在Polkadot中如何通过”checkpoint“机制、硬分叉和有限链长度等手段来防止长期无抵押攻击,并确保新同步的客户端连接到正确的链上,以提高系统的安全性和可靠性。

平行链和收集者

每个平行链都获得与中继链类似的安全功能:平行链的区块头被密封在中继链块中,确保在确认后不会发生重组或“双花”。 这与比特币的侧链和联合挖矿提供的安全保障类似。 然而,Polkadot 也提供了强有力的保证,即平行链的状态转换是有效的。 这是通过将一组验证器以密码方式随机分割成子集来实现的; 每个平行链一个子集,每个块的子集可能不同。 这种设置通常意味着平行链的出块时间至少与中继链的出块时间一样长。 确定分区的具体方法不在本文档的范围之内,但可能基于类似于RanDAO的提交-揭示框架,或者基于加密安全哈希下每个子链的先前块组合的数据。

在Polkadot中,子链的验证者需要提供一个被保证有效的子链区块候选人(否则将被没收抵押金)。有效性涉及两个重要点:首先,它是内在有效的,即所有状态转换都被正确执行,并且所有外部数据(例如交易)都是有效的并可以包含在其中。其次,任何与候选区块外部数据相关的数据(例如外部交易)都具有足够高的可用性,以便参与者可以下载并手动执行它。

验证者可以只提供一个不包含外部交易数据的“”区块,但这样做可能会冒险获得较少的奖励。他们与子链中的收集者(collators)一起工作,收集者将交易汇总成区块,并提供一个非交互式、零知识证明,证明该区块是其父区块的有效子区块(并获取任何交易费用作为回报)。

验证者和收集者之间通过子链中的传播协议进行协作,确保有效的区块被正确构建和传播,以确保整个Polkadot网络的安全性和一致性。验证者负责验证和确认区块的有效性,而收集者负责收集交易并生成有效的子链区块。这种协作机制确保了Polkadot的整体运行和跨链通信的有效性。

在Polkadot中,关于垃圾邮件防治的方式是由子链协议自行指定的:在中继链中没有“计算资源计量”或“交易费用”的基本概念。中继链协议也没有直接对此进行强制执行(尽管不太可能采用没有良好机制的子链)。这是明确地对可能存在与以太坊不同的链的可能性的认可,例如像比特币那样拥有更简单费用模型或其他尚未提出的垃圾邮件防治模型的链。

Polkadot的中继链本身可能会存在作为类似以太坊的账户和状态链,可能是EVM(以太坊虚拟机)的衍生物。由于中继链节点需要进行大量的其他处理,交易吞吐量将通过较高的交易费用和(如果我们的研究模型需要)区块大小限制来最小化。这样做是为了平衡中继链节点的工作负载,并确保网络的安全性和稳定性。

链间通信

Polkadot的关键组成部分是跨链通信。由于 parachain 之间可以建立某种信息通道,我们可以将 Polkadot 视为可扩展的多链系统。在 Polkadot 中,通信非常简单:在一个 parachain 中执行的交易可以(根据该链的逻辑)影响将交易发送到第二个 parachain 或者中继链。类似于在生产区块链上的外部交易,它们是完全异步的,并且它们没有固有的能力将任何信息返回到其起源地。这种跨链通信的能力使得 Polkadot 可以实现不同链之间的互操作性和数据共享。通过这种方式,Polkadot的各个链可以相互连接,共同构成一个更大的网络。

image-20230512163709998 ![Alt](https://img-blog.csdnimg.cn/img_convert/817b836892ac5d1e290410efc9184b0f.png#pic_center)

为了确保最小的实现复杂性、最小的风险和对未来 parachain 架构的最小限制,这些跨链交易在实质上与标准的外部签名交易没有区别。交易具有一个源段,提供了识别 parachain 的能力,并且可以使用任意大小的地址。与比特币和以太坊等常见的当前系统不同,跨链交易不附带任何形式的支付或费用;任何此类支付必须通过源 parachain 和目标 parachain 上的协商逻辑进行管理。像以太坊的 Serenity 版本提出的系统将是管理此类跨链资源支付的简单方式,但我们假设其他方案可能在适当的时候出现。这种跨链交易的灵活性和自由度使得 Polkadot 可以适应不同的区块链应用,并为各个链之间的互操作性提供了更大的可能性。

跨链交易使用基于 Merkle 树的简单排队机制来解决,并确保数据的完整性。由于跨链交易是由不同的 parachain 发送和接收的,因此在relay-chain维护者的任务是将一个 parachain 的输出队列中的交易移动到目标 parachain 的输入队列中。这些交易在relay-chain上被引用,但它们本身不是relay-chain上的交易。为了防止一个 parachain 向另一个 parachain 发送大量的交易,要发送一个交易,需要满足目标 parachain 的输入队列在上一个区块结束时不太大。如果在区块处理后目标 parachain 的输入队列太大,被认为是“饱和状态”,则在后续区块中将无法路由到该 parachain 的交易,直到队列大小回到限制以下。这些队列由relay-chain进行管理,允许 parachain 之间确定彼此的饱和状态;这样,对于无法将交易发布到处于停滞状态的目标 parachain 的失败尝试可以同步报告。(虽然由于没有返回路径,如果由于这个原因而导致次级交易失败,无法将其报告给原始调用者,需要采取其他方式进行恢复。)

Polkadot 和 Ethereum

由于以太坊的图灵完整性,我们预计Polkadot和以太坊有足够的机会相互互操作,至少在一些容易推断的安全范围内是这样。简而言之,我们设想来自Polkadot的事务可以由验证器签名,然后输入以太坊可以通过交易转发智能合约进行解释和制定。在另一个方向上,我们预计将使用来自“中断合约”的特殊格式日志(事件),以允许快速验证是否应转发特定消息。

Polkadot到以太坊

通过选择 BFT 共识机制,验证者由一组通过批准投票机制确定的利益相关者组成,我们能够与不经常更改且数量适中的验证者达成安全共识。在一个总共有 144 个验证者的系统中,一个块时间 4 秒和 900 个区块的最终确定性(允许报告、惩罚和修复双重投票等恶意行为),区块的有效性可以合理地通过97个签名(144个签名中的三分之二加一)和随后的60分钟验证期来证明,在验证期内不会提出质疑。

以太坊能够托管一个“闯入合约”,该合约可以维持 144 个签署方并由他们控制。 由于椭圆曲线数字签名 (ECDSA) 恢复在 EVM 下仅需要 3,000 gas,并且由于我们可能只希望验证发生在绝大多数验证者(而不是完全一致)上,以太坊的基本成本确认了一个 来自 Polkadot 网络的指令被正确验证为不超过 300,000 气体——仅占总区块气体限制 5.5M 的 6%。 增加验证器的数量(处理数十条链所必需的)不可避免地会增加此成本,但是随着技术的成熟和基础设施的改进,人们普遍预计以太坊的交易带宽会随着时间的推移而增长。 加上并非所有验证者都需要参与的事实(例如,只有最高风险的验证者可能被要求执行此类任务),该机制的限制扩展得相当好。

假设这些验证者每天轮换一次(这是相当保守的——每周甚至每月可能是可以接受的),那么网络维护这个以太坊转发桥的成本将是每天大约 540,000 gas,或者以目前的 gas 价格,45 美元 每年。 单独通过网桥转发的基本交易成本约为 0.11 美元; 当然,额外的合同计算会花费更多。 通过将交易缓冲和捆绑在一起,可以轻松分摊闯入授权成本,大大降低每笔交易的成本;如果转发前需要 20 笔交易,那么转发基本交易的成本将降至 0.01 美元左右。

这种多重签名合约模型的一种有趣且更便宜的替代方案是使用门限签名来实现多边所有权语义。 虽然 ECDSA 的门限签名方案计算量大,但其他方案(例如 Schnorr 签名)的方案非常合理。 以太坊计划引入原语,使此类方案在即将到来的 Metropolis 硬分叉中的使用成本更低。 如果能够使用这种方法,将 Polkadot 交易转发到以太坊网络的 gas 成本将大大降低至接近零的开销,超出验证签名和执行基础交易的基本成本。

在这个模型中,Polkadot的验证器节点除了对消息进行签名之外,几乎不需要做其他事情。为了将传输操作实际路由到以太坊网络,我们假设验证器本身也将驻留在以太坊网络上,或者,更有可能的是,向将消息转发到以太坊网络上的第一个参与者提供小额奖金(奖金可以很容易地支付给交易发起人)

以太坊到Polkadot

将交易从以太坊转发到Polkadot使用了简单的日志概念。当以太坊合约希望将交易发送到Polkadot的特定parachain时,它只需调用一个特殊的“break-out合约”。break-out合约将接受可能需要的任何付款,并发出一个日志指令,以便通过Merkle证明和对相应块头的有效性和规范性进行验证其存在。

在这两个条件中,验证块头的有效性可能是最直接的证明。原则上,唯一的要求是每个需要该证明的Polkadot节点(即被指定的验证节点)都在运行一个完全同步的标准以太坊节点实例。不幸的是,这本身就是一个相当重的依赖。更轻量级的方法是通过提供以太坊状态trie的部分来简单证明块头的正确评估,并检查日志(包含在块收据中)的有效性。这种类似SPV的证明可能仍然需要大量的信息;方便的是,它们通常根本不需要:Polkadot内部的保证金系统将允许保证金的第三方提交块头,但如果其他第三方(如“fisherman”,见6.2.3)提供了无效的证明(具体是状态根或收据根是伪造的),它们将面临失去保证金的风险。

在像以太坊这样的非最终化PoW网络上,无法对规范性做出确凿的证明。为了解决这个问题,试图依赖任何类型的链依赖因果关系的应用程序需要等待一定数量的“确认”,或者直到相关交易在链中达到特定的深度。在以太坊上,这个深度从1个块(对于价值最低且没有已知网络问题的交易)到1200个块(初始Frontier版本用于交易所)不等。在稳定的“Homestead”网络上,这个数字大多为120个块,我们可能会采用类似的参数。

因此,我们可以想象我们的Polkadot与以太坊接口具有一些简单的功能:能够接受来自以太坊网络的新块头并验证PoW,能够接受一些证明,证明特定日志是由以太坊侧的break-out合约在足够深度的块头上发出的(并在Polkadot内部转发相应的消息),最后能够接受证明,证明先前接受但尚未执行的块头包含无效的收据根。

为了将以太坊的头部数据(包括SPV证明和有效性/规范性的证明)传递到Polkadot网络中,需要一种激励机制来促使数据的转发。一种简单的方法是通过向能够转发有效头部的有用块的参与者支付费用来实现。这些费用可以由以太坊网络收取的手续费资助。验证人被要求保留与最近几千个块相关的信息,以便能够管理分叉情况,可以通过协议内在的方式或在中继链上维护的合约来实现。

这种激励机制确保了将以太坊头部数据转发到Polkadot网络的验证人获得奖励。验证人负责保留有关最近块的信息,以便管理分叉并处理潜在的与协议相关的问题。从以太坊侧收取的手续费资助了转发有用且有效的以太坊头部的奖励,为验证人参与该过程提供了额外的激励。

Polkadot和比特币

比特币与 Polkadot 的互操作性对于 Polkadot 来说是一个有趣的挑战:所谓的“双向锚定(two-way peg)”将是两个网络都需要的一种有用的基础设施。然而,由于比特币的限制,安全地提供这样的锚定是一个复杂的任务。从比特币到 Polkadot 的交易原则上可以通过类似以太坊的过程来完成:由 Polkadot 验证人以某种方式控制的“break-out地址”可以接收转移的代币(以及与其一起发送的数据)。SPV证明可以由受激励的预言机提供,并结合确认周期,为识别非规范区块(可能意味着交易被“双花”)提供奖励。然后,理论上,任何在“break-out地址”中所拥有的代币将由相同的验证人控制,以便稍后进行分散。

然而,问题在于如何从一个轮换的验证人集合中安全地控制存款。与能够基于签名组合做出任意决策的以太坊不同,比特币的限制较多,大多数客户端只接受最多三个参与方的多重签名交易。在当前的协议下,将这个限制扩展到36个或者最终可能需要的数千个参与方是不可能的。一种选择是修改比特币协议以实现这种功能,然而在比特币世界中,通过所谓的“硬分叉”来进行改变在最近的尝试中被证明是困难的。

一种可能性是使用门限签名(threshold signatures),这是一种密码学方案,允许将一个可单独标识的公钥有效地由多个秘密“部分”控制,其中一些或全部必须被使用以创建有效的签名。不幸的是,与比特币的ECDSA兼容的门限签名在计算上非常昂贵且具有多项式复杂度。其他方案如Schnorr签名提供更低的成本,然而它们何时被引入比特币协议中的时间尚不确定。

由于存款的最终安全性取决于一些绑定的验证人,另一个选择是将多重签名的密钥持有人减少到只有一组严密绑定的验证人,从而使得门限签名成为可行的选择(或者至少可以使用比特币的本地多重签名)。当然,这样做会减少可以在验证人行为非法时扣除的总保证金金额,但这是一种渐进的降级措施,只是设定了两个网络之间可以安全运行的资金金额的上限(或者在验证人发起攻击成功时的损失百分比)。

因此,我们认为在两个网络之间建立一个相当安全的比特币互操作性的“虚拟平行链”并不是不切实际的,尽管这需要一项重大的工作,时间线不确定,并且很可能需要该网络中利益相关者的合作。

深度协议

该协议大致可以分为三部分:共识机制、平行链接口和链间交易路由。

中继链操作

中继链(relay-chain)很可能是一个类似以太坊的基于状态的链,其中状态映射地址到账户信息,主要包括余额和(为了防止重放)交易计数器。在这里放置账户有一个目的:提供对系统中每个身份所拥有的股份进行会计核算。

然而,也会存在一些明显的差异:

  • 合约不能通过交易部署;出于避免在中继链上支持应用功能的考虑,将不支持公开部署合约。
  • 计算资源使用(”gas“)不会被计费;由于对公共使用的函数将是固定的,对gas计费的理由不再适用。因此,在所有情况下都将采用统一的费用,允许更高性能的动态代码执行和更简单的交易格式。
  • 支持上市合约的特殊功能,允许自动执行和网络消息输出。

在可能存在VM且基于EVM的中继链情况下,为了确保最大的简洁性,将对其进行一些修改。它可能会有一些内置合约(类似于以太坊中地址1-4的合约),用于管理特定于平台的职责,包括共识合约、验证节点合约和平行链合约。

如果不使用EVM,则最有可能的替代方案是WebAssembly(wasm)后端。在这种情况下,整体结构类似,但无需内置合约,因为Wasm可作为通用语言的目标,而不是像EVM那样受限和不成熟的语言。

对于目前以太坊协议的其他可能偏离,也有很大的可能性。例如,对交易收据格式的简化,允许在同一个区块内并行执行互不冲突的交易,就像Serenity系列变更提出的那样。

可能会部署类似Serenity的“纯”链作为中继链,但这种情况不太可能发生。这样的链可以通过特定的合约来管理类似抵押代币余额的事物,而不是将其作为链协议的基本部分。目前,我们认为这不太可能提供足够大的协议简化,无法弥补开发过程中的额外复杂性和不确定性。

在管理共识机制、验证节点集、验证机制和平行链方面,需要一些小的功能模块。这些功能模块可以在一个整体协议下一起实现。然而,出于增强模块化的考虑,我们将其描述为中继链的“合约”。这意味着它们是中继链的共识机制管理的对象(按照面向对象编程的概念),但不一定是以类似EVM的操作码编写的程序,也不一定可以通过账户系统进行单独访问。

Staking Contract

这个合约维护着验证人集合,并负责以下功能:

  • 管理当前的验证人账户
  • 管理可以在短时间内成为验证人的账户
  • 管理将代币质押给验证人的账户
  • 维护每个验证人的属性,包括质押数量、接受的奖励率、地址和短期身份信息

该合约允许账户注册成为一个被质押的验证人,并提供相应的要求。它还允许账户对某个验证人进行提名,并允许已存在的被质押的验证人注销其验证人身份。该合约还包括验证和规范化机制的实现。通过这个合约,Polkadot网络能够管理验证人集合,并确保验证人的入选和退出过程的顺利进行。

质押代币的流动性

质押代币的流动性是一个重要问题。在网络维护操作中,希望尽可能多的质押代币参与质押,因为这直接将网络安全与质押代币的“市值”联系起来。可以通过通胀货币并将收益分配给参与验证人角色的人来激励质押代币的流通。然而,这样做会带来一个问题:如果代币被锁定在质押合约中,受到降低的惩罚,那么如何保持足够的流动性以进行价格发现呢?

对此,一个解决方案是允许一个简单的衍生合约,以质押代币为基础来保证可替代的代币。但是,在无信任的情况下实现这一点是困难的。此外,这些衍生代币无法被等同对待,就像欧元区政府债券无法被等同对待一样:存在着基础资产失败并变得毫无价值的风险。对于欧元区政府债券,可能存在违约风险。对于由验证人质押的代币,验证人可能会恶意行事并受到惩罚。

按照我们的原则,我们选择最简单的解决方案:并非所有代币都被质押。这意味着一部分代币(例如20%)将强制保持流动性。尽管从安全性的角度来看这并不完美,但这不太可能对网络的安全性产生根本性的影响;与“完美情况”下100%质押相比,仍然可以追回80%的通过没收保证金可能获得的赔偿。

通过逆向拍卖机制,可以相对简单地确定质押代币和流动代币之间的比例。实际上,有意成为验证人的代币持有者会向质押合约发布报价,说明他们愿意参与的最低支付率。在每个会话开始时(会话可能定期发生,例如每小时一次),验证人角色将根据每个意向验证人的质押和支付率来填充。一个可能的算法是选择那些提供的报价最低且质押金额不超过目标总质押金额除以验证人角色的数量,并且不低于该金额的一半下限的人。如果无法填满所有验证人角色的位置,可以反复降低下限以满足条件。

提名

"提名"是指以可信的方式将自己的质押代币委托给活跃的验证人,使其承担验证人的职责。提名通过批准投票系统进行。每个潜在提名人可以向质押合约发布指令,表达出他们准备将自己的质押委托给哪些验证人身上。

每个会话期间,提名人的质押将被分散并由一个或多个验证人代表。分散算法旨在优化具有等值总质押数量的一组验证人。提名人的质押将处于验证人的有效责任范围内,并根据情况获得利息或遭受处罚减少。

质押金没收/销毁

某些验证人的行为会导致其质押金受到惩罚性的减少。如果质押金降低到不可接受的最低限度以下,会提前结束当前会话并开始下一个会话。一些可受惩罚的验证人不当行为的例子包括:

  • 作为平行链组的一部分,无法就平行链块的有效性达成共识
  • 主动签署无效平行链区块;
  • 无法提供之前投票为有效的出口负载
  • 在共识过程中处于不活跃状态;
  • 在竞争分叉上验证中继链区块。

某些不当行为的情况威胁到网络的完整性(例如签署无效的平行链区块和在分叉上验证多个分支),因此会通过完全减少质押金的方式将验证人有效地驱逐出网络。而在其他不那么严重的情况下(例如在共识过程中的不活跃)或无法精确分配责任的情况下(成为无效组的一部分),可以对质押金的一小部分进行罚款。后一种情况下,这种方式可以与子组的变动结合使用,以确保恶意节点遭受的损失远远超过受到牵连的善良节点。

在某些情况下(例如多分叉验证和无效子区块签署),验证人本身很难检测到彼此的不当行为,因为对每个平行链区块进行持续验证将是一项艰巨的任务。在这种情况下,有必要征求验证过程之外的外部方的支持来验证和报告此类不当行为。报告这种活动的方将获得奖励;他们的术语“fishermen”源于获得此类奖励的不太可能性。

由于这些情况通常非常严重,我们设想任何奖励都可以轻松从没收的质押金中支付。总体上,我们更倾向于将销毁(即减少至零)与重新分配相平衡,而不是尝试全面重新分配。这样可以增加代币的整体价值,在一定程度上对整个网络进行补偿,而不仅仅是与发现有关的特定参与方。这主要是作为一种安全机制:涉及的大量资金可能会导致极端和急剧的行为激励,如果报酬金额大于错误验证人的直接质押金,就可能产生一种错误的激励,即恶意行为并报告自己以获取奖励。可以通过两种方式来应对这个问题,一是通过对成为验证人的最低直接质押金要求进行明确规定,二是通过教育提醒提名者,少质押的验证人没有太大的动力表现良好。

这种方式下,所要求的金额通常不会超过错误验证人的直接质押金,以避免出现误导性的激励机制。否则,可能会导致人们故意制造错误并自己报告以获得奖励。这种情况下,奖励金额应足够大,使得对网络的验证工作变得值得,但同时不应过大,以抵消对某个不幸的验证人进行“工业级”犯罪黑客攻击的成本。

总之,这种质押金没收/销毁机制旨在惩罚验证人的不当行为,维护网络的完整性和安全性,并确保奖励的适度性,以保持验证过程的公正性和可靠性。

平行链注册表

每个平行链在Parachain Registry(平行链注册表)中进行定义。它是一个相对简单的类似数据库的结构,包含了每个链的静态动态信息。

静态信息包括链索引(一个简单的整数),以及验证协议的标识,用于区分不同类别的平行链,以便验证者能够运行正确的验证算法来提出有效的候选区块。最初的概念验证将专注于将新的验证算法放入客户端本身,从而每次添加一个新类别的链时都需要进行协议的硬分叉。然而,最终可能可以以一种既严格又高效的方式指定验证算法,使得客户端能够在没有硬分叉的情况下有效地与新的平行链进行交互。一种可能的方法是使用诸如WebAssembly之类的已经成熟、本地编译、平台中立的语言来指定平行链的验证算法。然而,是否真正可行还需要进一步的研究,但如果可行的话,它将带来摆脱硬分叉的巨大优势。

动态信息包括必须获得全局一致的交易路由系统的各个方面,例如平行链的入口队列。注册表只能通过完全公投才能添加平行链;这可能会在内部进行管理,但更有可能将其放在外部公投合约中,以便在更通用的治理组件下进行重复使用。有关注册额外链和其他较不正式的系统升级所需的投票要求参数(例如任何需要达到的法定人数,需要多数通过的要求)将在“总宪法”中列出,但最初可能会遵循相当传统的路径。具体的制定超出了本文的范围,但例如,要通过,可能需要超过三分之二的超级多数,并且有超过总系统投票三分之一以上的正面投票。

其他操作包括暂停和移除平行链。希望暂停永远不会发生,但它被设计为一种保障措施,以防止平行链的验证系统出现一些无法解决的问题。可能需要暂停的最明显情况是,在实现方面存在关键的差异,导致验证者无法就有效性或区块达成一致。鼓励验证者使用多个客户端实现,以便能够在债券没收之前发现此类问题。

由于暂停是一种紧急措施,它将由动态验证者投票来执行,而不是通过公投。重新启用可以由验证者或公投来实现。

完全移除平行链只能在公投后进行,并且需要相当长的宽限期,以便有序地过渡到独立的链或成为其他共识系统的一部分。宽限期可能为几个月,根据需要在平行链注册表中为每个链设置不同的宽限期,以使不同的平行链根据其需求享受不同的宽限期。

密封中继区块

Sealing(封闭)基本上是指规范化的过程,即将原始数据映射为某种基本的、独特而有意义的形式。在PoW链中,封闭实际上等同于挖矿。在Polkadot中,它涉及从验证人那里收集有关特定中继链块及其代表的平行链块的有效性、可用性和规范性的签名声明。

底层BFT共识算法的机制超出了本文的范围。我们将使用一种基本原语来描述它,假设存在一个创建共识的状态机。最终,我们期望受到一些有前途的BFT共识算法的启发,包括Tangaora(Raft的BFT变体)、Tendermint和HoneyBadgerBFT。

该算法必须同时就多个平行链达成一致,因此与通常的区块链共识机制不同。我们假设一旦达成共识,我们就能够记录该共识,并由其中任何参与者提供不可否认的证据。我们还假设在协议内部的不当行为通常可以归结为包含有不当行为参与者的小组,以最小化处罚时的附带损害。

这个证据采用我们的签名状态声明的形式,并与其他某些字段一起放置在中继链块的头部,其中包括中继链的状态Trie根和交易Trie根。

封闭过程发生在单一的生成共识机制下,同时处理中继链块和构成中继内容的平行链块。平行链不会被其子组单独“提交”,然后稍后收集起来。这导致中继链的过程更加复杂,但允许我们在单个阶段完成整个系统的共识,最大限度地减少延迟,并满足路由过程中相当复杂的数据可用性要求。

每个参与者的共识机器的状态可以建模为一个简单的(二维)表格。每个参与者(验证人)都有一组信息,以其他参与者的签名声明(“投票”)的形式提供,这些信息涉及每个平行链块候选项以及中继链块候选项。信息集合由两个数据组成:

  • 可用性:该验证人是否具有从该块获得的外部交易后信息,以便能够正确验证后续块上的平行链候选项?他们可以投票1(已知)或0(尚未知)。一旦他们投票1,他们就承诺在此过程的其余部分以相同方式投票。后续不遵守此规则的投票将成为处罚的依据。

  • 有效性:平行链块是否有效,以及是否有所有外部引用数据(例如交易)可用?这只与被分配为投票的平行链上的验证人相关。他们可以投票1(有效)、-1(无效)或0(尚未知)。一旦他们投票非零,他们就承诺在此过程的其余部分以此方式投票。后续不遵守此规则的投票将成为处罚的依据。

所有验证人都必须提交投票;投票可以根据上述规则重新提交。共识的进展可以被建模为在每个平行链上同时发生的多个标准BFT共识算法。由于这些共识机制有可能受到相对较小的恶意参与者集中在单个平行链组中的干扰,整体共识存在作为后备方案的目的,将最坏情况从僵局限制为仅出现一个或多个无效的平行链块(并对负责的方进行一轮处罚)。

单个块的有效性的基本规则(允许整个验证器集合作为一个整体来确定它是否成为从规范中继引用的唯一准链候选者):

  • 必须有至少三分之二的验证人投赞成票,没有人投反对票
  • 必须有超过三分之一的验证器对出口队列信息的可用性进行投票。

如果在有效性投票中至少有一个正面投票和一个负面投票,则会创建一个异常情况,整个验证人集合必须投票以确定是否存在恶意方或意外分叉。除了有效和无效的投票外,还允许第三种投票,相当于对两者都投票,表示节点持有冲突的意见。这可能是因为节点的所有者运行了不同意见的多个实现,这可能指示协议中可能存在歧义。

在对完整的验证人集合的所有投票进行统计后,如果输掉的意见占胜利意见的一小部分比例(可以进行参数化;最多一半,可能明显较少),则假定这是一个意外的平行链分叉,并自动将该平行链暂停参与共识过程。否则,我们假设这是一种恶意行为,并对投票支持异议意见的少数派进行惩罚。结论是一组证明了规范性的签名。然后可以封存中继链块,并开始封存下一个块的过程。

密封中继块的改进

封存方法虽然能够对系统的操作提供强大的保证,但在扩展方面并不特别出色,因为每个平行链的关键信息必须由超过三分之一的验证人来保证可用性。这意味着随着添加更多链条,每个验证人的责任范围也会增加。

虽然在开放共识网络中数据可用性本质上是一个尚未解决的问题,但有办法减轻对验证人节点的负担。一个简单的解决方案是意识到,虽然验证人必须承担数据可用性的责任,但他们实际上不需要存储、通信或复制数据本身。次级数据存储,可能与编译这些数据的收集器相关(甚至可能是同一个实体),可以通过验证人提供部分利息/收入来保证可用性。

然而,尽管这可能在某种程度上提供了中间的可扩展性,但它仍无法解决根本问题;由于添加更多的链条通常需要额外的验证人,网络资源的消耗(尤其是带宽)随着链条数量的增加而呈平方增长,这在长期来看是不可持续的。

最终,我们可能会不断面临一个基本限制,即为了使一个共识网络被认为是可用和安全的,持续的带宽需求应该是验证人总数乘以总输入信息的数量级。这是因为一个不受信任的网络无法正确地将数据存储任务分布到许多节点上,这与可分布处理任务截然不同。

引入延迟(Introducing Latency)

为了缓解这个规则,可以放宽即时性的概念。通过要求33%+1的验证人最终而不是立即对可用性进行投票,我们可以更好地利用指数级的数据传播,并平衡数据交换中的峰值。一个合理的假设(尽管没有证明)是:

latency=participants×chains

在当前模型下,系统的规模随着链的数量增加而增加,以确保处理任务的分布;因为每个链至少需要一个验证人,并且我们将可用性的证明固定为验证人数量的一个常数比例,所以参与者的数量也随着链的数量增加。我们得到:

latency=size^2

这意味着随着系统的增长,网络上所需的带宽和获得可用性的延迟(也可以表示为最终确定之前的区块数)与其平方成正比。这是一个相当大的增长因子,可能会成为一个重要的障碍,并迫使我们采用"非平坦"的范式,例如将几个"Polkadot"组合成一个层次结构,通过一棵中继链树进行多级路由

公众参与

另一个可能的方向是通过微型投诉系统征集公众参与过程。类似于渔民,可能会有外部方参与验证人声称的可用性的监督。他们的任务是找到一个无法证明其可用性的验证人,并向其他验证人提出微型投诉。可以使用PoW或质押保证金来减轻女巫攻击,女巫攻击可能会使系统几乎无用。
通过引入公众参与和外部监督,系统可以从更广泛的社区中受到监督,提高对验证人的责任和可用性的保证。这可以增加系统的可靠性和安全性,并减少滥用和作恶的风险。同时,使用PoW或质押保证金可以防止恶意用户滥用系统,并确保只有真正有兴趣和诚信的参与者能够参与到投诉和监督的过程中。

可用性担保人

另一种可能的方法是提名第二组经过质押的验证人作为“可用性担保人”。这些验证人与普通的验证人一样需要进行质押,甚至可以从同一组验证人中选取(尽管如果选择同一组验证人,应该在较长期的时间内进行选择,至少每个会话周期)。与普通验证人不同的是,它们不会在不同的平行链之间切换,而是形成一个单一的团队,对所有重要的跨链数据的可用性进行确认。

这种方法的优势在于放宽了参与者和平行链之间的等价关系。基本上,平行链可以增加(随着原始链的验证人集合增长),而参与者,特别是参与数据可用性确认的参与者,可以保持至少是次线性的甚至可能是恒定的数量。这样可以减轻系统的可伸缩性问题,使得在增加平行链的同时,参与者数量不会过多增加,从而提高系统的效率和性能。

偏好的收集者(Collator Preferences)

在该系统中,确保在任何给定的平行链中有多个合理选择的收集者(collator)创建区块是一个重要方面。如果一个收集者主导了一个平行链,那么一些攻击变得更加可行,因为外部数据不可用的可能性不太明显。

一种选择是通过伪随机机制人为地加权平行链区块,以促进各种各样的收集者。首先,作为共识机制的一部分,我们要求验证人倾向于选择被确定为“较重”的平行链区块候选者。同样,我们必须激励验证人尽力提供他们能找到的最重的区块候选者——这可以通过使他们的奖励的一部分与其候选者的权重成比例来实现。

为了确保收集者有合理公平的机会使其候选区块在共识中被选择为获胜者,我们通过与每个收集者相关的随机函数来确定平行链区块候选者的特定权重。例如,通过计算汇收集地址与在创建区块时确定的某个密钥安全的伪随机数(一个概念上的“中奖票”,与比特币类似,算离确定伪随机数之间的距离)之间的异或距离。这有效地使每个汇编者(或更具体地说,每个汇编者的地址)在其他人中随机有机会使其候选区块在总体上“获胜”。

为了减轻单个整理者“最小化”靠近中奖彩票的地址从而成为每个区块的最爱的女巫攻击,我们会给整理者的位置增加一些惯性。这可能很简单,只需要求他们在地址中有一个基准金额的资金。更优雅的方法是根据与所涉及地址中存放的资金数量接近获胜票的程度来权衡其接近程度。虽然还没有进行建模,但很可能这种机制使得即使是非常小的利益相关者也能作为收集者做出贡献。

超重块(overweight block)

如果验证者集合遭到入侵,他们可能会创建并提议一个虽然有效但执行和验证时间过长的区块。这是一个问题,因为验证者集合可以合理地创建一个需要很长时间才能执行的区块,除非某个特定的信息已经被知晓,从而提供了一种捷径,例如对一个大素数进行因式分解。如果一个单独的收集者知道那个信息,那么他们在让其他人忙于处理旧区块的同时,会在让自己的候选区块得到接受方面具有明显的优势。我们将这些区块称为过重区块。

保护系统免受验证者提交和验证超重块的影响与对无效块的保护方法类似,但还有一个额外的注意事项:由于执行一个区块所需的时间(判断它是否超重)是主观的,对违规行为的投票最终会分为三种情况。一种可能性是区块明确不是超重块 - 在这种情况下,超过三分之二的验证者宣布他们可以在某个限制内执行该区块(例如,在两个区块之间允许的总时间的50%内)。另一种情况是区块明确是超重块 - 如果超过三分之二的验证者宣布他们无法在该限制内执行该区块。最后一种可能性是验证者对该问题意见分歧较大。在这种情况下,我们可以选择进行相应的惩罚。

为了让验证者能够预测何时可能提出一个超重块,要求他们为每个区块发布自己的性能信息可能是明智的。在足够长的时间内,这将使他们能够了解自己的处理速度与评判他们的同行相比的情况,并对自己的性能进行评估。

“收集人保险”(Collator Insurance)

验证者仍然面临一个问题:与PoW网络不同,要检查收集者的块的有效性,他们必须实际执行其中的交易操作。恶意的收集人可能会向验证人提供无效或超重的块,这会给他们带来困扰,浪费他们的资源,并带来潜在的机会成本。

为了缓解这个问题,我们提出了验证人的简单策略。首先,发送给验证人的 平行链(parachain) 区块候选者必须由具有资金的中继链账户签名;如果没有经过签名,验证人应立即将其丢弃。其次,这些候选者应按照一定的优先级排序,优先级是通过将账户中的资金数量(在某个上限内)与(AND)收集人过去成功提议的区块数量(还要考虑之前的惩罚),以及与之前讨论的中奖票的接近程度的组合(例如乘法)来确定的。这个上限应该与验证人在发送无效区块的情况下支付的惩罚金额相同。

为了让收集人不愿意向验证人发送无效或超重的候选区块,任何验证人都可以在下一个区块中放置一笔包含有关违规行为的交易,将违规收集人账户中的部分或全部资金转移到受害验证人的账户中。这种交易会优先于其他交易,以确保收集人在受到惩罚之前无法移除资金。所转移的资金金额作为损害赔偿是一个尚未建模的动态参数,但很可能是验证人区块奖励的一部分,以反映造成的困扰程度。为了防止恶意验证人任意没收收集人的资金,收集人可以通过与随机选择的验证人组成的陪审团对验证人的决定提出上诉,并支付一小笔保证金。如果陪审团支持验证人的决定,保证金将归他们所有。如果陪审团不支持验证人的决定,保证金将退还,并对验证人进行罚款(由于验证人处于更为崇高的地位,罚款可能相当可观)。

链间交易路由(重点搞懂)

跨链交易路由是中继链及其验证人的重要维护任务之一。它是指管理从一个源跨链(source parachain)作为期望输出到另一个目标跨链(destination parachain)作为不可变输入的交易路径逻辑,而无需任何信任要求。

我们精心选择了上述措辞;特别值得注意的是,我们并不要求源跨链中必须有一笔交易明确授权这个过程。我们对模型的唯一限制是,跨链必须将这些交易作为其整体区块处理输出的一部分提供,这些交易是区块执行的结果。

这些交易被组织成多个先入先出(FIFO)队列;这些队列的数量被称为路由基数(routing base),大约为16个。值得注意的是,这个数字代表了我们可以支持的跨链数量,而无需采用多阶段路由(multi-phaserouting)。最初,Polkadot将支持这种直接路由方式,但我们将概述一种可能的多阶段路由过程(“超级路由”)作为扩展初始一组跨链的手段。

我们假设所有参与者都知道接下来两个区块n和n+1的子分组情况。总结起来,路由系统按照以下阶段进行操作:

  • 收集者S:与Validators[n][S]成员联系
  • 收集者S:对于每个子分组,确保至少有一个Validators[n][s]成员与其联系
  • 收集者S:对于每个子分组,假设出口队列egress[n−1][s][S]可用(从上一个区块传入的所有针对’S‘的交易数据)
  • 收集者S:为S组合区块候选b:(b.header, b.ext, b.proof, b.receipt, b.egress)
  • 收集者S:将proof信息proof[S] = (b.header, b.ext, b.proof, b.receipt)发送给Validators[n][S]
  • 收集者S:确保外部交易数据b.ext可供其他收集者和验证人使用
  • 收集者S:对于每个子分组,将egress信息egress[n][S][s]=(b.header, b.receipt, b.egress[s])发送给下一个区块V alidators[n+1][s]中接收子分组的成员
  • 验证人V:预连接下一个区块的相同集合成员:令N=Chain[n+1][V],连接所有满足Chain[n+1][v]=N的验证人v
  • 验证人V:为本区块整理所有数据的进入:对于每个子分组,检索egress[n−1][s][Chain[n][V]](n-1队列,目的地为s子组,也即平行链的验证者集合V),从其他验证人v中获取满足Chain[n][v]=Chain[n][V]的数据。可能经过随机选择的其他验证人进行尝试的证明。
  • 验证人V:接受该区块的候选人证明proof[Chain[n][V]]。投票验证区块的有效性。
  • 验证人V:接受下一个区块的候选人出口数据:对于每个子分组,接受egress[n][s][N]。投票验证区块的出口可用性;再次发布给感兴趣的验证人v,使得Chain[n+1][v]=Chain[n+1][V]。
  • 验证人V:直到达成共识为止。

在上述描述中,以下是参数的含义:

  • egress[n][from][to]: 表示在第n个区块中,从源(from)跨链至目标(to)的传出(egress)队列信息。它记录了在特定区块中从一个平行链(from)发送到另一个平行链(to)的交易队列信息。

  • CollatorS: 表示一个属于平行链S的收集人(Collator)。收集人是负责收集和打包平行链上交易的节点。

  • Validators[n][s]: 表示在第n个区块中,属于平行链s的验证人(Validators)集合。验证人是负责验证和打包交易的节点,参与网络共识过程。

  • Chain[n][v]: 表示在第n个区块中,验证人v被分配给的平行链(Chain)。它指定了验证人在特定区块上所负责的平行链。

  • block.egress[to]: 表示一个区块中从某个源平行链跨链至目标平行链to的传出队列(egress queue)信息。

收集人(Collators)通过他们的区块成为规范区块(canonical blocks)来收取(交易)费用,因此他们有动机确保对于每个下一个目标平行链,该子群的成员被告知来自当前区块的传出队列。验证人(Validators)仅需要就(平行链)区块达成共识,因此他们对于哪个收集人的区块最终成为规范区块并不关心。理论上,验证人可以与收集人勾结,减少其他收集人的区块成为规范区块的机会,但这很难实现,因为验证人会随机选择用于平行链的验证人,并且可以通过减少支付给持续占用共识过程的平行链区块的费用来防范这种情况。

外部数据的可用性(External Data Availability)

对于旨在通过网络分配工作负载的去中心化系统来说,确保平行链的外部数据实际可用是一个长期存在的问题。问题的核心是可用性问题,该问题指出,由于既不可能获得非交互式的可用性证明,也不可能获得任何类型的不可用性证明。对于BFT系统来说,要正确地验证任何正确性依赖于一些外部数据的可用性的转换,可接受的拜占庭节点的最大数量加上一,必须系统的证明数据可用。
(在分布式系统中,确保外部数据的可用性是一个具有挑战性的问题。非交互式可用性证明指的是在不需要与外部数据源进行交互的情况下证明数据的可用性。然而,对于分布式系统来说,由于外部数据源可能是分布在网络中的其他节点上,无法通过单个节点的证明来确认整个网络中数据的可用性。

类似地,无法进行任何类型的非可用性证明,是因为无法证明数据的不可用性。由于分布式系统中的节点数量众多且分散,无法对每个节点进行监视和验证其是否能提供所需的数据。即使某个节点无法提供数据,也无法确定是由于节点故障、网络问题还是恶意行为导致的。)

对于像Polkadot这样的系统来说,要想正确地扩展,这就带来了一个问题:如果一定比例的验证人必须证明数据的可用性,并假设验证人在声明数据可用之前想要实际存储数据,那么,我们如何避免带宽/存储需求随着系统大小(以及验证器数量)的增加而增加的问题呢?一个可能的答案是有一组单独的验证器(可用性担保人),其数量随着整个Polkadot的规模而提前增长。

我们还有一个辅助策略。作为一个群体,收集人有着内在的激励来确保所选择的平行链的所有数据可用,因为如果数据不可用,他们就无法生成更多的区块来收取交易费用。收集人也组成一个群体,其成员的组成是多样化的(由于平行链验证人群组的随机性),加入这个群体并证明自己的成员身份是不容易的。因此,最近的收集人(也许是最近几千个区块的收集人)被允许向验证人发起关于特定平行链区块外部数据可用性的挑战,并提供一小笔保证金作为抵押。

验证人必须联系那些作证的、看似有问题的验证人子群组中的成员,并要么获取并将数据返回给收集人,要么通过作证证明数据不可用(直接拒绝提供数据被视为没收保证金的违规行为,因此违规的验证人可能会断开连接),并联系其他验证人进行同样的测试。在后一种情况下,收集人的保证金将被返还。

一旦达到可以进行这种非可用性证明的验证人的法定人数,他们就会被释放,对违规的子群组进行惩罚,并回滚区块。

事务路由(post routing)

在Polkadot中,每个parachain的区块头(header)都包括一个egress-trie-root(如图3)。这是一个包含路由基数(routing base)各个bin的Merkle Trie的根节点,每个bin都是一个连接列表,包含了对应目标(destination)parachain的egress消息(post)。通过在parachain验证人之间提供Merkle证明,可以证明特定parachain的区块在特定目标parachain的egress队列中具有特定的消息。

在处理一个parachain区块开始时,其他parachain的egress队列将合并到我们的区块的ingress队列中。我们假设一个强大的、可能是CSPR(密码安全伪随机)的子区块排序,以实现确定性操作,对任何parachain区块配对不偏袒。Collator计算新的队列并根据parachain的逻辑排空egress队列。

ingress队列的内容明确(explicitly)写入parachain区块。这有两个主要目的:首先,它意味着parachain可以在与其他parachain隔离的情况下进行可信的同步。其次,如果整个ingress队列不能在单个区块中处理完,它简化了数据物流的处理;验证人和collator能够处理后续区块,而无需特别获取队列的数据。

如果parachain的ingress队列在区块处理结束时超过了阈值,那么它在中继链上被标记为饱和状态,并且不再接收任何进一步的消息,直到队列被清空。Merkle证明用于证明collator在parachain区块的证明中的正确操作。

评判(Critique)

这种基本机制的一个小缺陷是“post-bomb”攻击。这种攻击是指所有parachain向特定的parachain发送最大数量的post(消息)。虽然这会一次性占用目标的ingress队列,但并不会造成超过标准交易拒绝服务(DoS)攻击的伤害。

在正常运行时,假设有N个parachains、N×M个总验证人和每个parachain的L个collator,我们可以将每个区块的总数据路径分解为:

  • 验证人:对于parachain集中的其他验证人,为M-1+L+L: M−1 用于平行链集中的其他验证者,L 用于每个提供候选平行链块的收集者,第二个 L 用于下一个块的每个收集者,需要前一个块的出口有效载荷。(后者实际上更像是最坏情况下的操作,因为整理者很可能会共享此类数据。)
  • collator:与每个相关parachain区块验证人的连接为M+kN:M 用于连接到每个相关的平行链块验证器,kN 用于将出口有效负载播种到每个平行链验证器组的某个子集以用于下一个块(可能包括某些优选的collator)。

因此,每个节点的数据路径会随着系统整体复杂性的增加而线性增长。虽然这是合理的,因为系统规模扩大到数百个或数千个parachain时,一些通信延迟可能会被吸收,以换取较低的复杂性增长率。在这种情况下,可以使用多阶段路由算法:以引入存储缓冲区和延迟为代价减少瞬时路径的数量。

超多维数据集路由(Hyper-cube Routing)

它是基于上述基本路由机制的扩展。这种机制的核心思想是,随着平行链数量的增加,不是通过增加节点连接性来实现,而是通过以对数方式增长。在传递到最终目的地时,消息可以在多个平行链的队列之间传输。路由本身是确定性和简单的。

具体来说,Hyper-cube routing模型中,我们通过限制入口/出口队列中的bin数量来开始。这些bin的数量并不等于平行链的总数,而是由一个称为routing-base(b)的参数决定。随着平行链数量的变化,routing-base会被固定,而另一个称为routing-exponent(e)的参数会增加。在这种模型下,消息的数量随O(b^e)增长,而路径保持恒定,传递的延迟(或所需的区块数量)随O(e)增长。

我们的路由模型是一个维度的超立方体,每个面都有b个可能的位置。每个区块,我们沿着一个轴路由消息。我们以循环轮询的方式交替选择轴,从而保证 e 块的最坏情况交付时间。

在处理平行链时,如果在入口队列中发现需要发送到其他平行链的消息,它们会立即被路由到相应的出口队列的bin中,具体的路由维度由当前区块号确定。这个过程会引起每一跳的额外数据传输,但这本身是一个问题,可以通过使用某种替代的数据有效负载传递方式来缓解,例如在消息中仅包含引用而不是完整的数据负载。

具有 4 个平行链,b = 2, e = 2 的系统的此类超立方体路由示例可能是:

image-20230514163827549

这里的两个维度很容易看出是目标索引的前两位; 对于第一个块,单独使用高阶位。 第二个块处理低位。 一旦两者都发生(以任意顺序),那么post将被路由。

最大化偶然性(Maximising Serendipity)

该提案的一个修改是,将固定总数为c^2 - c个验证器,每个子组中有c - 1 (c为平行链数量)个验证器。每个区块,在验证器与平行链之间不会出现无序的重新分配,相反,在每个平行链子组中,每个验证器将在下一个区块被分配到一个独特且不同的平行链子组。这将导致以下不变性:在任意两个区块之间,对于任意两个平行链的配对,存在两个验证器交换了平行链的责任。虽然这无法提供关于可用性的绝对保证(即使是善意的验证器也偶尔会离线),但它仍然可以优化一般情况。

这种方法并非没有复杂性。增加一个平行链也将需要对验证器集进行重新组织。此外,由于验证器数量与平行链数量的平方有关,验证器数量在开始时非常小,并且在约50个平行链后增长速度过快,变得难以维护。但这些并不是根本性的问题。首先,在验证器集中进行重新组织是必要的,无论采用何种方法,验证器集都需要定期进行调整。关于验证器集的规模问题,当验证器数量太少时,可能会有多个验证器分配给同一个平行链,从而对总验证器数量应用一个整数因子。可以使用类似于第6.6.4节中讨论的超立方体路由的多阶段路由机制,以减轻在存在大量平行链时需要大量验证器的需求。

平行链验证(Parachain Validation)

验证人的主要任务是作为具备充足抵押的参与者,提供对平行链区块的有效性进行证明,包括但不限于状态转换、包含的外部交易、处理入口队列中的等待消息以及出口队列的最终状态。验证过程本身相对简单。一旦验证人完成对上一个区块的封闭,他们可以开始准备下一轮共识的候选平行链区块。

首先,验证人从平行链的收集者(接下来会进行描述)或其他验证人那里获取候选区块。候选区块的数据包括区块头、上一个区块的头部、包含的外部输入数据(对于以太坊和比特币来说,这些数据可以称为交易,但原则上可以是任意用于特定目的的数据结构),出口队列数据以及用于验证状态转换的内部数据(对于以太坊来说,这些是执行每个交易所需的各种状态/存储 Trie 节点)。实验性证据表明,对于最近一个以太坊区块的完整数据集,大小最多为几百KB。

同时,如果尚未完成,验证人最初将尝试从前一个区块的验证人获取与前一个区块转换相关的信息,并随后从所有签署了数据可用性的验证人那里获取信息。

一旦验证人收到候选区块,他们会在本地对其进行验证。验证过程包含在平行链类的验证人模块中,这是一个与共识相关的软件模块,需要为 Polkadot 的任何实现编写(尽管原则上,具备 C ABI 的库可以在实现之间共享,但由于只有一个“参考”实现,安全性可能会降低)。

该过程首先获取前一个区块的头部,并通过最近协商的中继链区块来验证其身份,确保其哈希值被记录在其中。一旦确认了父区块头部的有效性,就可以调用特定的平行链类的验证函数。这个验证函数接收一些数据字段(通常是之前提到的那些字段),并返回一个简单的布尔值,表示该区块的有效性。

大多数验证函数会首先检查可以直接从父区块派生出的头部字段(如父哈希、区块号等)。然后,根据需要,它们会填充任何内部数据结构,以便处理交易和/或消息。对于类似以太坊的链,这意味着使用节点填充trie数据库,以便完全执行交易。其他类型的链可能具有其他的准备机制。

完成准备工作后,将执行入站消息和外部交易(或其他外部数据表示的内容),并按照链的规范进行平衡处理。(一个合理的默认做法可能是要求在服务外部交易之前先处理所有的入站消息,但具体应根据平行链的逻辑决定。)通过此执行过程,将创建一系列出站消息,并验证这些消息确实与收集者的候选区块相匹配。最后,将校验正确填充的区块头部与候选区块的头部是否一致。

当获得完全验证的候选区块后,验证者可以对其头部的哈希进行投票,并将所有必要的验证信息发送给其子组中的其他验证者。

平行链收集者

平行链的收集者(collators)是未绑定的运营商,他们在当前的区块链网络中承担了类似矿工的任务。它们专门用于特定的平行链。为了运行,它们必须同时维护中继链和完全同步的平行链。

“完全同步”的确切含义将取决于平行链的类别,但它始终包括平行链的入口队列的当前状态。以以太坊为例,它还涉及至少维护最近几个区块的Merkle树数据库,但也可能包括其他各种数据结构,例如用于账户存在性的Bloom过滤器、家族信息、日志输出和区块编号的反向查找表。

除了保持两个链的同步外,收集者还必须通过维护一个交易队列并接受经过正确验证的来自公共网络的交易来“捕捞”交易。有了队列和链,它可以为每个区块选择的验证者创建新的候选区块(由于中继链同步,它们的身份是已知的),并通过对等网络提交它们以及各种附加信息,如有效性证明。

作为回报,收集者会收取与所包含的交易相关的所有费用。围绕这种安排有各种经济因素。在竞争激烈的市场中,如果存在大量收集者,交易费用可能与平行链的验证者共享,以鼓励包含特定收集者的区块。同样,一些收集者甚至可能提高所需支付的费用,以使区块对验证者更具吸引力。在这种情况下,将形成一个自然的市场,支付更高费用的交易将跳过队列并更快地包含在链中。

网络

传统区块链(如以太坊和比特币)的网络功能要求相对简单。所有的交易和区块都以简单的无向传播方式进行广播(gossip)。同步过程较为复杂,特别是对于以太坊来说,但实际上这种逻辑主要包含在对等策略中,而不是协议本身,协议主要涉及一些请求和响应消息类型。

虽然以太坊在当前的协议提供方面取得了一些进展,通过devp2p协议可以在单个对等连接上多路复用许多子协议,从而使得对等节点同时支持多个p2p协议,但以太坊协议的部分仍然相对简单,并且整个p2p协议仍然未完成,缺少重要功能,如QoS支持。可悲的是,创造一个更广泛应用的“Web 3”协议的愿望在很大程度上失败了,只有那些明确从以太坊众筹中获得资金的项目在使用它。

Polkadot的要求相对更加复杂。Polkadot不是一个完全统一的网络,而是具有几种类型的参与者,每个参与者对其对等节点构成有不同的要求,并且有几个网络“通道”,其中的参与者往往讨论特定的数据。这意味着需要一个更加结构化的网络覆盖层和支持此类结构的协议。此外,为了方便将来新增各种新的“链”类型,可能还需要一种新颖的覆盖层结构来实现扩展性。

在讨论网络协议的细节之前,我们可以对网络参与者的需求进行初步分析。我们可以将网络参与者大致分为两组:中继链(relay-chain)和平行链(parachains),每组都包含三个子集。同时,我们还可以指出,每个平行链参与者只对自己所在的平行链内的通信感兴趣,而不涉及其他平行链的参与者。

中继链参与者:

  • 验证人(Validators):用P表示,按照平行链的不同划分为P[s]的子集。
  • 可用性保证者(Availability Guarantors):用A表示(在基本协议形式中,这可能由验证人来承担)。
  • 中继链客户端(Relay-chain clients):用M表示(需要注意的是,每个平行链集合的成员通常也会是中继链客户端的成员)。

平行链参与者:

  • 平行链收集器(Parachain Collators):用C[0]、C[1]等表示。
  • 平行链渔民(Parachain Fishermen):用F[0]、F[1]等表示。
  • 平行链客户端(Parachain clients):用S[0]、S[1]等表示。
  • 平行链轻客户端(Parachain light-clients):用L[0]、L[1]等表示。

一般来说,特定类别的通信主要在以下参与者之间进行:

  • P|A <-> P|A:验证人/可用性保证者之间需要建立良好的连接以实现共识。
  • P[s] <-> C[s]|P[s]:每个给定平行链组的验证人将与该平行链的收集器以及其他验证人进行信息交流,以发现和分享区块候选者。
  • A <-> P[s]|C|A:每个可用性保证者需要从分配给它的验证人收集与共识相关的跨链数据;收集器也可以通过向可用性保证者宣传其区块来优化其达成共识的机会。一旦可用性保证者获得数据,它将将其分发给其他类似的保证者以促进共识。
  • P[s] <-> A|P[s‘]:平行链验证人需要从先前集合的验证人或可用性保证者收集附加输入数据。
  • F[s] <-> P:在报告时,渔民可以向任何参与者提出索赔。
  • M <-> M|P|A:一般的中继链客户端从验证人和可用性保证者获取数据。
  • S[s] <-> S[s]|P[s]|A:平行链客户端从验证人/可用性保证者获取数据。
  • L[s] <-> L[s]|S[s]:平行链轻客户端从完整客户端获取数据。

为了确保高效的传输机制,采用类似以太坊的devp2p的“扁平”覆盖网络,其中每个节点不会(非任意地)区分其对等节点的适应性,可能不适合。所以,一个合理可扩展的对等选择和发现机制很可能需要包含在协议中,并且需要积极的规划和前瞻,以确保适当类型的节点在适当的时间“偶然”连接。

对于每类参与者,对等节点的组成策略将有所不同:对于一个适当扩展的多链系统,收集器需要不断重新连接到相应选定的验证人,或者需要与一部分验证人达成持续协议,以确保在它们在大部分时间内对该验证人没有用处时不会断开连接。收集器还会自然地尝试与可用性保证者集保持一个或多个稳定的连接,以确保其共识敏感数据的快速传播。

可用性保证者主要致力于相互之间和与验证人之间的稳定连接(用于共识和它们所证明的关键性平行链数据),以及与一些收集器(用于平行链数据)和一些渔民和完整客户端(用于分发信息)的连接。验证人通常会寻找其他验证人,尤其是同一子组中的验证人,以及能够提供平行链区块候选者的任何收集器。

渔民、一般的中继链和平行链客户端通常会尽力保持与验证人或保证者的连接,但也会与其他类似自身的节点保持连接。平行链轻客户端类似地,会尽力与平行链的完整客户端保持连接,如果可能的话,还会与其他平行链轻客户端保持连接。

对等网络的问题

在基本的协议提案中,验证器的选集是随机选取的,这可能导致非对等节点之间需要传递数据时存在困难。为了解决这个问题,可以依赖一个良好连接且分布均匀的对等网络,确保跳跃距离(从而最坏情况下的延迟)仅随着网络规模的对数增长(例如,采用Kademlia协议可能有所帮助),或者引入较长的区块时间以允许必要的连接协商,以维持反映节点当前通信需求的对等节点集。

然而,这两种解决方案都存在问题:强制网络采用长区块时间可能使其对某些应用和链变得无用。即使是一个完全公平和连接良好的网络,随着网络规模的扩大,由于不感兴趣的节点不得不转发对它们无用的数据,也会导致带宽的浪费。

因此,为了尽量减少延迟,一个合理的优化方法是限制这些 parachain 验证器集的变动性,例如仅在一系列区块中重新分配成员(例如,每分钟更改一次连接),或者通过逐步增量的方式进行成员轮换(例如,一次更换一个成员,例如,如果每个 parachain 分配了15个验证器,则平均每分钟会完全更换一次集合)。通过限制节点间的更替次数,并通过部分可预测性的 parachain 集合提前建立有利的对等连接,我们可以确保每个节点始终保持一组永久的偶然选择的对等节点。

有效网络协议的路径

最有效和合理的开发工作很可能集中在利用现有的协议而不是自行开发新协议上。存在几个基于对等网络的协议可供我们使用或扩展,包括以太坊的devp2p协议、IPFS的libp2p协议和GNU的GNUnet协议。对这些协议及其在构建支持特定结构保证、动态对等节点导向和可扩展子协议的模块化对等网络方面的相关性进行全面审查,超出了本文档的范围,但它将是实施Polkadot的重要步骤。

议定的实用性

链间交易支付

放弃像以太坊的gas这样的整体计算资源核算框架,虽然获得了更多的自由和简洁性,但这也引发了一个重要问题:没有gas,如何避免一个平行链强制另一个平行链进行计算?虽然我们可以依靠交易-post入队缓冲区来防止一个链通过交易数据(data)向另一个链发送垃圾信息,但协议中没有提供类似的机制来防止交易处理/计算(processing)的垃圾信息攻击。

这是一个留给更高层次的问题。由于链可以自由地将任意语义附加到传入事务后数据上,因此我们可以确保在开始之前必须支付计算费用,类似以太坊Serenity所提倡的模型,我们可以想象在一个平行链中存在一个“break-in”合约,允许验证者以某种特定的处理资源量为代价换取付款的保证。这些资源可以以类似gas的方式衡量,但也可以是一种全新的模型,比如主观执行时间或类似比特币的固定费用模型。

单独看,这并没有太多用处,因为我们无法假设链下调用者可以获得与"break-in"合约所认可的任何价值机制相对应的价值。然而,我们可以想象在源链上存在一个次级的"break-out"合约。这两个合约共同形成了一个桥梁,相互识别并提供价值等价性(可以使用可用于双方的抵押代币来结算支付余额)。调用另一个这样的链将意味着通过这个桥梁进行代理,这将提供在链之间协商价值转移的手段,以支付目标平行链上所需的计算资源。

添加平行链

虽然添加一个平行链是一个相对廉价的操作,但它并非免费。更多的平行链意味着每个平行链上的验证人数量减少,最终导致更多的验证人,每个验证人的平均质押金额降低。尽管通过渔夫可以缓解攻击平行链的成本较低的问题,但不断增长的验证人集合实质上增加了延迟,这是由底层共识机制的机制决定的。此外,每个平行链带来的验证算法负担过重的潜在风险可能给验证人带来困扰。

因此,验证人和/或持有权益的社区将会从新增加的平行链中提取一定的"代价"。这个链的市场可能会看到以下两种可能的增加方式:

  • 存在可能净贡献量为0的链(在锁定或销毁代币方面)可以成为其中一部分(例如:联盟链、狗链、特定应用链);
  • 提供内在价值的链,通过增加其他地方难以获得的特定功能(例如:机密性、内部可扩展性、服务绑定)。

本质上,利益相关者社区需要通过财务激励或希望将功能丰富的链添加到中继中来激励添加子链。

可以设想,添加的新链将有一个非常短的移除通知期,允许在没有任何损害中长期价值主张的风险的情况下对新链进行试验。

结论

我们已经概述了一种可扩展的、异构的多链协议的方向,该协议有潜力与某些现有的区块链网络实现向后兼容。在这样的协议下,参与者以开明的自利行动来创建一个整体系统,该系统可以以异常自由的方式进行扩展,而不会给现有用户带来传统区块链设计所带来的成本。我们已经对所需的架构进行了大致概述,包括参与者的性质、他们的经济激励以及他们必须参与的流程。我们已经确定了一种基本设计并讨论了它的优势和局限性;因此,我们还有进一步的方向可以减轻这些限制,并朝着一个完全可扩展的区块链解决方案迈进。

缺少材料和悬而未决的问题

网络分叉始终是由于协议的不同实现而可能发生的情况。如何从这种异常情况中恢复并未进行讨论。鉴于网络必然具有非零的最终化期,从中恢复出来不应该是一个大问题,但需要在共识协议中进行仔细的集成。

对于债券没收和奖励提供,目前还没有深入探讨。目前我们假设奖励是基于胜者通吃的原则进行分配:这可能不是对于渔夫最好的激励模型。一个短期的提交-揭示过程将允许许多渔夫来竞争奖励,从而实现更公平的奖励分配,然而该过程可能导致在发现不端行为方面增加额外的延迟。

致谢

非常感谢所有帮助这本书形成模糊形象的读者。特别是彼得·查班、比约恩·瓦格纳、肯·卡普勒、罗伯特·哈伯迈尔、维塔利克·布特林、雷托·特林克勒和杰克·彼得森。感谢所有提出想法或提出想法的人,Marek Kotewicz和Aeron Buchanan值得一提。感谢其他人一路上的帮助。所有的错误都是我自己的。这项工作的部分内容,包括对共识算法的初步研究,部分由英国政府在创新英国计划下资助。

译自

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值