1. 区块链的命运共同体
2. 中继链区块生产与最终确定
2.1、区块生产:BABE+Aura
2.2、可证明最终性:GRANDPA
2.3、最佳链的扩展原则
3. 中继链交互中的共识机制
3.1、BFT共识算法
3.2、NPOS共识方案
3.3、共识角色及其交互关系
3.4、共识机制的特征性能
4. 经济博弈保障全网共享安全
4.1、波卡中的共享安全模型
4.2、经济博弈保障共享安全
中继链是波卡网络的主链,基于中继链连接各条平行链,搭建起异构多链网络。这些平行链共享中继链的共识、安全,并基于XCM/XCMP实现了跨链互操作和可组合。
从系统构成来说,作为一条区块链,中继链的基本组成单元是“区块”,中继链是随着区块生产和最终区块确定而产生的;从功能作用来说,中继链是一个分布式账本,一方面区块里记录着被验证有效、具有最终确定性的数据和状态,即全网的一致共识;同时因为共识数据可验证,具有有效性、确定性等特性,为系统带来了安全保障。
可以看出“区块”、“共识”和“安全”之间的关系:区块是共识过程的表达方式和共识结果的呈现形式,而共识是区块封装的主体内涵和意义所在。区块打包的过程本质就是共识形成的过程,也是把基本数据变得有意义的过程,并在此过程中构建起全网的安全特性。可以说,区块的表达和呈现形式、共识形成的流程和机制从实现上构成了网络的安全属性,而网络的安全性则反过来为区块生产、共识形成和基于此二者构建的整个区块链网络运行提供了安全保障。总之,区块、共识和安全三者之间是区块链在呈现形式、主体内涵和特征性能上的一体多面,是具有内生关系的命运共同体,具有正向作用和正向反作用,是一条区块链最基础的、最核心的功能特性。如图1-1所示。
图1-1 区块链的命运共同体
在波卡网络中,当一条平行链与中继链连接时,其将共识出块和自身的安全让渡给了中继链,中继链上的区块不仅包含了中继链自身的区块,也包含了所有平行链提交的区块。中继链的共识就是全网的共识,中继链的安全保障也成为了所有平行链的共享安全。
所以,当讨论“共识”这一主题时,我们可以转换为这样一些思考角度:
● 中继链区块是如何产生和最终确定的?
● 是什么样的共识流程和机制?
● 共识过程有哪些参与角色,相互是什么作用关系?
● 上述问题的实现为波卡的共识机制带来哪些特性?
● 波卡如何在打包区块形成共识的过程中形成了全网的共享安全?
为了回答上述问题,并且不让读者过早地在细节中迷失,能够建立起整体视图和聚焦核心要点,本文以中继链为主线,按照如下的逻辑结构展开以帮助大家理解“共识”这一主题:
● 首先,从结果看全局。中继链作为全网公共账本其本身就是全网共识的结果,理解了中继链是如何产生和确定的,由此可建立起共识的整体视图。这里聚焦的内容就是中继链区块的生产和链的最终确定。
● 其次,从过程看要点。中继链是波卡的主网,也是异构多链的基础设施,波卡网络的运行过程就是中继链与平行链之间的交互过程,在此过程中去发现相关的共识要素,理解共识如何建立和发挥作用。相关内容涉及到共识算法、实现方案、共识角色和整个共识机制表现出来的特征性能。
● 最后,我们将呼应“区块链命运共同体”这一模型构建,希望厘清中继链由“形式+内涵”内生而来的“安全”如何成为了全网的共享安全,其中的发挥关键作用的策略是什么。这部分内容涉及到共享安全模型和共识中的经济博弈。
上述的问题和逻辑结构形成了本文的目录结构和重点内容。
中继链由不断延展的基本组成单元“区块”构成,这些区块需要被不断生产出来;但在同一时间范围内,可能生产出多个候选区块,需要一套机制来进行决策,哪个区块能够代表该条区块链当下的最终状态,以此确定区块的有效性和数据的可用性,并为各个平行链的交互提供确定性的支持。
具有确定的最终状态是区块链作为“状态机”最为基本的要求,这意味着在去中心化网络中几乎每台计算机都必须就某个初始状态达成一致,然后就初始状态的确定性操作日志达成一致,以便它们到达相同的最终状态。波卡的共识机制就是帮助去中心化网络像一台计算机一样运行。
在波卡网络中存在BABE和GRANDPA两种协议,BABE是区块生产算法,是区块生产引擎,而GRANDPA是最终性算法,对候选区块做出选择而最终完成链。
2.1、区块生产:BABE+Aura
当前波卡网络区块生产机制实际采用的是BABE+Aura的混合体,BABE负责选举出主验证人,Aura选举出次验证人。波卡计划在未来用Sassafras替换BABE+Aura。这里主要介绍BABE+Aura。
BABE是一种基于时间“插槽”的区块生产算法,其中涉及到时间纪元(Epochs)、时隙(Slots,槽)、区块创作者(Author,即被选举出来的验证人)几个要素。
BABE将时间分解为多个纪元,每个纪元又被分解为一组时隙,如图2-1所示。在波卡网络中,每个时隙6秒长,这是出块的目标时间,BABE将选择一个或多个区块创作者在每个插槽中创作一个区块。
图2-1 BABE中的纪元与时隙
每个插槽都可以有一个主验证人和次验证人。主验证人是BABE通过可验证随机函数(VRF)随机分配的,由其负责在分配到的插槽中创造区块。正因为VRF是随机的,有时会存在没有分配到主验证人的插槽(空槽),为了保证一致的出块时间,则需要Aura产生次验证人填充空槽。Aura采用循环系统轮流分配次验证人,当没有主验证人时,次验证人负责出块。
BABE因为采用可验证随机函数选举出验证人,具有高度隐私性。在这种情况下没有人预先知道谁是被选举出来的验证人,直到验证人将区块生产出。这种机制使得攻击者事前有针对性地攻击变得不可行,由此带来了安全性。但BABE的缺点是选举效率低,在相当长时间内可能选举不出验证人,从而浪费验证人时间,并导致系统吞吐量稍差。Aura的选举机制则相反,不具有隐私性,但选举效率高。所以BABE+Aura的混合机制即具备了隐私性,保障了安全,也能获得更好的效率和吞吐量;同时因为总是能生产出新区块,使链具有了概率最终性。
同时,也因为主验证人由随机函数随机分配,存在一个插槽被分配多个主验证人的情况,从而导致一个插槽产生多个候选区块。分叉出现了,这该怎么办?这不是BABE和Aura的事,它们只负责高效生产区块,候选区块的最终决策交给了GRANDPA。You know, grandpa always knows who his baby is(你知道,爷爷总是知道他的宝贝是谁)。
2.2、可证明最终性:GRANDPA
GRANDPA是波卡网络中的最终性算法,它从BABE模块中导入候选区块,并确定哪一组区块是最终的,从而确定性地选择链,完成链的最终安全性。
在一轮中完成多个区块验证并取得最终性
GRANDPA算法会找到具有足够票数的最高区块编号,以将其视为最终区块。此过程允许在一轮中完成多个块。
图2-2 GRANDPA的实现机制
如图2-2所示,这是GRANDPA在一轮中完成多个区块验证并取得可证明最终性的示例。左边灰色方块是已经确定的区块,红色方块是新确定的区块,灰色加上红色区块代表了已经完成最终性的区块链,正常情况下后续产生的新区块应该次第添加到其末端。右边灰色条块是动态选举出来的验证人。粉色方块是由BABE产生的多个候选区块(它们应该是因为同一插槽被分配了多个主验证人而产生),它们与不同的红色区块连接,形成了三条可能的区块链。
那么谁才是确定的最终链?GRANDPA需要通过投票确认哪组粉色候选区块连接了上一轮最终区块从而确定谁是正确的那条链。
可证明最终性确定的具体过程如下:
1. 最高区块广播:新确定的区块(红色)的主验人广播上一轮最终的最高区块哈希。
2. 预投票:在等待网络延迟后,每个验证人都会为其认为应该是已确定的最终最高区块广播“预投票”。在绝大多数验证人诚实的情况下,验证人会把最高的最终区块哈希广播出去,从而确认哪些粉色候选区块在最长链上进行扩展。这个新链可能比最后一个已确定的最终链长几个块。
3. 预提交:每个验证人根据预投票集计算可以最终确定的新的最高区块。如果预投票集扩展了最后一个最终确定的链,那么每个验证人都会对该链进行“预提交”。
4. 提交:每个验证器等待接收足够的预提交(2/3以上)以在新确定的链上形成提交消息,并广播给其他节点。
以上过程表明,GRANDPA在链上而不是在区块上完成证明,达成可证明最终性。在GRANDPA中,只要超过2/3的验证人证明一个包含某个块的链,所有指向该块的块都将立即完成证明,大大提升了区块证明和完成链最终性的效率;并且一旦完成证明,最终性就不可逆转,使得规范链具有了普遍一致性,所以GRANDPA使得规范链具有了可证明最终性。
负责任的安全:当不同链中的两个块被最终确定时,如何解决?
当不同链中的A和B两个块被最终确定时,就会发生安全违规。问题是两条相互冲突的链条是如何达成最终结果的?BFT系统始终建立在错误验证器的最大数量是验证器总数的一小部分的要求之上,在波卡中是1/3。发生这样的情况,说明至少1/3的验证人对这两条链进行了投票。GRANDPA具有“负责人的安全”机制,可以检测出问题的来源-哪些验证人投票给了两个链。
这时,参与的验证人需要回答两个问题:
●筛选出投B的验证人集合:为什么在投票决定第二个区块B时不认为区块A是最终区块。任何诚实的验证人都应该用第二轮的一组预投票或预提交来回答这个问题,应该有超过2/3的验证人在此轮中对B进行了预投票或预提交。
●筛选出投A的验证人集合:在针对A区块的第一轮投票中,验证人收到了哪些第一轮预选票的广播信息?这个问题将赛选出认为A是最终区块的验证人。
●找到投票给两个链的验证人:两个集合重叠的验证人就是问题的来源,他们投票给了两个冲突的链,将面临重罚,并且不再保留在验证人集中。
2.3、最佳链的扩展原则
因为BABE中的区块创作者只需将其区块广播给所有验证人,而不需每个验证人向其他验证人发送消息,所以并不是所有验证人都会对非最终链有相同的看法。因此分叉在BABE中是常见的。
所以需要建立最佳链的扩展原则:
● BABE必须建立在GRANDPA已最终确定的链上,这是使用 GRANDPA 的要求之一。
● 块生产算法必须有一种选择“最佳”链的方法。当存在分叉情况下,最好的链就是拥有最多最主要区块的链,此属性导致BABE具有概率确定性。(这说明BABE在没有GRANDPA的情况下,可以通过概率确定一条链的最终性,但GRANDPA具有可证明最终性,提升了确定链最终性的效率,且不可逆转)
波卡网络运行中交互的主体主要是中继链和平行链,交互的过程本身就建立共识流程、达成共识结果的过程,涉及到跟共识相关的要素包括共识算法、共识方案、共识角色及前三者融合在系统中表现出来的特征性能,这些要素及相互关系构成了波卡网络的共识机制,如图3-1所示。
图3-1 中继链交互中共识框架
其中,共识算法更强调是一种解决问题的算法理论,而共识方案则是算法理论在实践场景中的具体实现方案,它们是形成共识机制的不同层面。比如波卡的共识机制就是基于现代异步拜占庭容错算法的NPOS方案。共识角色是操作实践层面的概念,是共识方案的执行人,在波卡中有4种参与者,他们分布在中继链或者平行链上,在奖惩制度的约束下开展行为以最终达成全网一致共识,并获取奖励或者惩罚。最后基于共识算法、共识方案和共识角色的实际操作,表现为波卡网络的运行性能和共识特征,通过对这些属性进行改进,也将促进共识算法的优化。
3.1、BFT共识算法
区块链分布式系统由P2P对等网络节点构成,没有哪一个单一节点能够协调区块链数据在所有节点上的一致性。如何保证所有节点中的数据正确、一致和完整,并且能够对某个提案达成一致共识是系统正常工作的核心问题。共识算法正是致力建立一套所有节点接受的规则,以解决这类问题。
拜占庭容错算法(BFT)就是在区块链分布式系统中常用的一种共识算法,是能够解决“拜占庭将军问题”的实现规则,它能够在即使某些节点出现缺点或恶意行为时,拜占庭容错系统也能在“少数服从多数”原则下协同工作达成一致。
基于BFT实现的拜占庭容错系统具有明显的优劣势。优势主要表现为安全性及灵活性。安全性是指在区块链系统中账本不可篡改,并且可以被节点随时查看。灵活性是指可以接受并执行非拜占庭客户端的请求,不会影响到系统持续生成区块。劣势则是算法复杂度高,时间成本和消息传递数量大,无法承载大量的节点,不能直接用于公链,导致在实用中价值不大。
波卡采用的是现代异步(asynchronous)拜占庭容错算法,它是实用拜占庭容错算法(PBFT)的一种变体。PBFT解决了原始拜占庭容错算法效率不高的问题,并降低了算法复杂度,只要满大部分验证人是诚实的,就能提供了一种高效的容错算法,达成对有效区块的相互共识。
在实现上,波卡是一个可以在完全开放和公开的场景下部署的网络,不需要信任任何特殊的组织和当权者来维护它,因此需要一种管理网络节点并且激励他们守法的方法,波卡基于PBFT变体算法构建了以NPoS为基础的共识机制。
3.2、NPoS共识方案
波卡由称为中继链的主链和称为平行链的多个分片链组成。中继链通过提名权益证明(NPoS)方案选择验证人来进行维护,这些验证人以BABE算法生成中继链的区块并保持所有平行链的状态,以GARANDPA算法对所有平行链提交的区块进行共识投票,以确定最终链。
NPoS的作用和意义
NPoS被称之为提名权益证明,是基于PoS的变体,主要作用在于选举出参与共识协议的验证人,并鼓励他们诚实行事。这包含了三个方面的意义:
●一是对于验证人。成为验证人需要质押足够数量的DOT作为良好行为的保证,但验证人的奖励并非来自抵押DOT的数量,而是来自其行为表现,一旦他们的行为偏离协议,抵押就会被消减,相反表现良好则会受到奖励。
●二是对于提名人。该方案支持任何持有DOT的持有者作为提名人,通过抵押一定数量的DOT来支持他们信任的一个或多个验证人。提名人的奖罚与其支持的验证人同步,奖罚数量则按照抵押的比例进行。而且,基于后面将要谈到的“公平代表”原则,提名人将通过在抵押权益较小的验证人进行权益质押而获得更高的回报率。
●三是经济博弈带来安全保证。通过将验证人行为与抵押权益挂钩,将经济博弈带入其中,意欲作恶的验证人需要权衡利弊,以避免得不偿失。这种提名人-验证人的制度安排为系统提供了强大的安全保证。
NPoS的选举过程兼具公平和安全
NPOS的设计遵循第一性原则,采用了从选举理论到博弈论再到离散优化的各种工具,目的是通过一个高效的选举过程实现具有公平代表和高安全级别的结果。具体选举过程请参考:
https://research.web3.foundation/en/latest/polkadot/NPoS/1.%20Overview.html,不再赘述。
这里重点分析其具有的公平代表和安全级别两个原则。
●公平的代表:所谓的公平,主要体现在如何分配被选举出的验证人所具有的投票权重。我们知道一些基于PoS的项目,他们根据验证人抵押的权益数量来同比例分配投票权重,这会导致过渡代表或者代表不足,造成不公平。而波卡并非如此,无论抵押权益多少,波卡给予被选举出的验证人同等的投票权利。这种策略会在尊重提名人自由提名的前提下,保证任何持有至少一个DOT的提名人至少有一个被选出的验证人,并引导提名人将权益尽可能均匀地质押在不同的验证人之中,从而系统获得一个均匀抵押的验证人集,避免了过渡或不足代表的问题。
●安全级别:波卡根据验证人获得的抵押权益数量定义了安全级别,并且“公平的代表”原则也使得抵押权益在验证人之间均匀分配,这大大提升了攻击者成为验证人并发起攻击的难度,这为系统带来了安全性保证。
3.3、共识角色及其交互关系
基于NPoS方案和中继链与平行链的交互,在波卡中定义了四个基本的角色来维持网络的运行,它们包括验证人(Validator)、提名人(Nominator)、收集人(Collator)、钓鱼人(Fisherman)。他们之间的交互关系如图3-2所示。
图3-2 波卡共识角色的交互关系
验证人:系统大约每天一次,会动态选出一组验证人。验证人拥有最高权限,接收平行链收集人提交的候选区块,帮助在波卡网络里打包新区块。它需要抵押足够多的DOT(其中包含提名人抵押的部分),并必须在高可用和高带宽的机器上运行一个中继链的客户端,确保高通信响应能力,并建立长期的可靠性声誉。系统会根据验证人的行为表现进行奖励和惩罚。在NPoS方案中,鉴于信息传递的复杂度,验证人数量是有限的,一般在保持在几百或数千。
提名人:通过选择可信赖的验证人,并抵押DOT来保护中继链。虽然验证人的数量是有限的,但任何持有DOT的用户都可以成为提名人,这无疑提升了DOT的质押率,提升了系统的安全经济量。
收集人:收集人是帮助验证人制造有效的平行链区块的群体。他们会运行一个特定平行链的全节点,这也意味着他们有全部的必要信息,可以在平行链打包新块并执行交易,就跟目前PoW区块链的矿工一样。在正常情况下,他们会收集并执行交易,并创建一个“未密封”(unsealed)的区块,再加上一个零知识证明一起提交给一个或多个当前负责提议(proposing)该平行链区块的验证人。
钓鱼人:钓鱼人监控网络中的非法行为,并及时报告给验证人。非法行为包括对两个有相同父块的不同区块进行签名,或在平行链上批准一个无效区块等。他们是独立的“赏金猎人”,激励他们的是一次性的大额奖励。钓鱼人类似于区块链系统的全节点,他们所需要的资源相对较少,也没必要承诺稳定的在线时间和大的带宽。所以他们只需要提交很少的押金,这个押金用于预防浪费验证人计算时间和计算资源的女巫攻击。
3.4、共识机制的特征性能
综合以上的分析,以下概要地对波卡共识机制特征性能进行梳理。
●隐私:BABE采用可验证随机函数随机选举出主验证人,具有隐私性,能抵御攻击者有针对性性的攻击。
●效率:BABE随机选举主验证人,Aura轮流选举次验证人,混合机制缩短了验证人的选举时间,提高了系统吞吐量;同时BABE+Aura生产区块,具有概率最终性,GRANDA负责链的最终性,具有可证明最终性,混合共识机制提高了区块生产速度,也大大加快了最终确定的过程。
●公平:NPoS方案中给予验证人同等的选举权重,同时保证任何持有至少一个DOT的提名人至少有一个被选出的验证人,并引导提名人将权益尽可能均匀地质押在不同的验证人之中,避免了因抵押权益数量造成的过度代表或者代表不足。
●安全:波卡具有“负责任的安全”机制,以解决不同链中的两个块都被最终确定时的冲突,并对产生错误行为的验证人进行惩罚和清除。同时通过将验证人行为与抵押权益挂钩,将经济博弈带入其中以制衡作恶或不良行为。再加上提名人的加入带来更高的质押量,并且权益质押尽可能均匀地分配到各个验证人池中,通过提升经济安全量保证了系统的高度安全。
●有效性和可用性:正常情况下,中继链区块包含来自平行链的有效性证明组成,这意味着中继链与平行链的区块同时具有最终性,这保证了区块的有效性。但当平行链收集人提交了无效区块,验证人有责任将完整的区块保存一段时间,以便钓鱼人可以检查区块是否有效性,并且保证任何其他平行链都能请求和下载该区块中的数据。如果验证人提交了没有数据的空块,将要承受惩罚,以此确保数据的可用性。
4.1、波卡中的共享安全模型
在本文开始部分我们曾经提到,在波卡网络中,当一条平行链与中继链连接时,其将共识出块和自身的安全让渡给了中继链,中继链上的区块不仅包含了中继链自身的区块,也包含了所有平行链提交的区块。中继链的共识就是全网的共识,中继链的安全保障也成为了所有平行链的共享安全,由此建立了全网的共享安全模型。
可以看出,波卡的共享安全模型本质上是通过共享全局状态来共享安全性。换句话说,中继链区块主要由来自平行链的有效性证明组成,这意味着当中继链验证平行链的状态转换并在最终中继链中包含该证明时,平行链的块也是最终的。要恢复某条平行链的区块,攻击者必须恢复整个波卡系统,包括其他每条平行链,很显然这是不可行的。
由此,波卡网络建立起全网的共享安全,各个平行链充分了解在此网络中进行交互的其他链跟自己具有相同的安全保证,他们之间可以无需信任的进行跨链组合和交互。
4.2、经济博弈保障共享安全
权益证明网络的安全性取决于经济安全量,经济价值越高,安全性越高。但世界上只能存在有限的安全性,因为经济价值是有限的,所以安全性最后取决于网络中的经济博弈。
波卡的扩展性并不分散经济价值,具有更高的安全性优势
波卡的异构多链网络具备的扩展性比较在其他单体或模块化区块链上进行扩展更具有安全性。对于单体或者其他模块化区块链,因为扩展问题导致区块链数量增加,它们的经济价值被分散在多条链上,安全性由各链各自负责,网络整体的安全性取决于安全性最弱的那条链,使得每条链的安全性比以前更弱。而波卡的共享安全模型使其在扩展中并不分散经济价值,即使是一个小型的区块链网络、或者刚启动的平行链也可以获得数十亿美元的整体安全性。
NPoS中采用的经济博弈策略,为各共识系统带来更高的共享安全
● 权益总量远大于任一单体持有量
NPoS的提名人-验证人制度安排提供了强大的安全保证,提名人和验证人投入的DOT总量越大,系统的安全性就越高。它允许系统可以拥有大量总权益的验证人集合,各个抵押权益尽可能均匀分配在单一验证人中,使得总权益远远高于任何一方的DOT持有量,并淘汰低权益的候选人。
这样的策略使得攻击者尽最大努力投入更多抵押权益和获得更多提名人支持时,即使成为验证人,也需要付出高昂的成本来发动攻击,并且还要面临被巨额惩罚和清除归零的风险。得不偿失,何必为之。
● 流动性与质押率的平衡
事实上,在任何给定时刻,波卡都希望所有DOT供应中有相当一部分被质押在 NPoS中,更高的质押率有助于获得更高的经济安全量,但需要在流动性与质押率之间保持平衡。
波卡希望达到理想的质押率,这个值应该在0.3到0.6之间,我们最初将它设置为0.5。如果它下跌,安全性就会受到损害,因此我们应该给予DOT持有者更多的激励以增加抵押。如果它上升,我们就会失去流动性,这也是不可取的,所以这时我们应该大幅减少激励措施。
● 验证人的激励与惩罚
验证人通过动态随机选举,并且大约每天调整一次,这本身具有隐私性,为系统带来了安全。同时,如果验证人偏离协议,他的一些DOT将被削减,严重时甚至被清除。反之,他们将获得与他质押的DOT成正比的贡献。通过奖惩制度,引导验证人诚实、负责人地行事以保证中继链的安全。
总之,NPOS在多个场景中采用了经济博弈和多方面制衡,为全网带来高水平的共享安全。
参考资料
1.https://research.web3.foundation/en/latest/polkadot/protocols.html#
2.chrome-extension://bocbaocobfecmglnmeaeppambideimao/pdf/viewer.html?file=https%3A%2F%2Farxiv.org%2Fpdf%2F2004.12990.pdf
3.https://medium.com/@joepetrowski
来源:金色财经