浅析波卡(Polkadot)的共识机制
为什么我们需要共识
共识是对一种共同的状态达成一致的方法。为了使区块链的状态继续创建并向前推进,网络中的所有节点都必须一致并达成共识。这是去中心化网络中的节点能够保持彼此同步的方式。如果一个去中心化的区块链中节点没有共识,就无法确保一个节点相信的真实状态被其他节点所共享。共识的目的是在参与者都有自己“主观观点”的网络中,提供关于状态的“客观观点”。它是这些节点进行通信并达成一致的过程,并且能够生产出新的块。
什么是 PoW 和 PoS?
现在工作量证明(PoW)和权益证明(PoS)已经被用于表示区块链机制的一种简写,但这并不能说明全部情况。PoW 是一种对区块生产者达成一致的方法,也是完全的中本聪共识(Nakamoto Consensus)的一部分,该共识还包括链选择算法(比特币中的最长链机制)。类似地,PoS 是一组用于选择验证人节点的规则,它并不是特指一个链的选择规则,或者一个链如何达到最终性(finality)。通常在节点之间,PoS 算法与拜占庭协议算法是互相结合的。例如,Tendermint 是一个实用的拜占庭容错算法,它使用 PoS 作为其验证人节点的选择方法。
为什么不选择 PoW?
尽管在达成去中心化共识方面简单而有效,但使用中本聪共识的工作量证明消耗了海量资源,而且还没有经济性或可证明的最终性,而且缺乏有效的措施来抵制垄断联盟。
概率最终性 vs 可证明最终性
运行 PoW 的纯中本聪共识区块链只能实现概率最终性的概念,然后去达成最终的共识。概率最终性是指在网络和参与者的某些假设下,如果我们看到创建在给定区块上的几个区块,就可以估计该区块终结的概率。最终的共识意味着,在未来的某个时刻,所有节点都将同意一组数据的真实性。这一最终共识可能需要很长时间,也无法提前确定需要多长时间。然而,诸如 GRANDPA 或 Ethereum 的 Casper FFG 这样的最终性工具的设计是为了对区块的最终性提供更有力和更快的保证,特别是,在拜占庭协议的某些过程发生后,它们永远无法恢复。不可逆共识的概念就被称为可证明的最终性。
在 GRANDPA 文档中,它被这样表述:
如果协议中的 oracle A 在一段未指明的时间后向所有参与者返回相同的值,那么我们称它是最终一致的。
什么是 GRANDPA/BABE 机制?
混合共识
当我们谈到 Polkadot 的共识协议时,大家经常看到两个缩略词,GRANDPA 和 BABE。我们同时提到了这两个词是因为 Polkadot 使用的是混合共识。混合共识可以将最终性工具从区块生产机制中分离出来。
这是一种在 Polkadot 中获得概率最终性(总是可以产生新区块的能力)和可证明最终性(在没有逆转机会的规范链上具有普遍一致性)好处的方法。它还避免了每种机制的缺点:概率最终性中不知不觉地遵循错误分叉的可能,以及可证明最终性中“暂停”(无法产生新的块)的问题。通过结合这两种机制,Polkadot 可以快速地生成区块,而较慢的最终性机制则可以在单独的进程中运行以完成区块,而不必承担交易处理较慢或暂停的风险。
混合共识在过去也曾被提起过。值得注意的是,在以太坊改进建议 EIP 1011 中,曾提议将混合共识作为以太坊向的 PoS 过渡的一步(现已失效),该建议指定了 Casper FFG。
BABE
BABE(Blind Assignment for Blockchain Extension)是在验证节点之间运行并确定新块生产者的区块生成机制。BABE 作为一种算法可以与 Ouroboros Praos 相比较,在链选择规则和 slot(验证人插槽)时间调整方面有一些关键的区别。BABE 根据 stake 和使用 Polkadot 随机循环机制将区块生产的 slot 分配给验证人。
Polkadot 中的验证人将参与每个 slot 的抽签,通过这个抽签告诉验证人是否是该 slot 的区块生成候选人。Slot 是不连续的时间单位,通常为 6 秒。由于这种随机机制,多个验证人可能是同一个 slot 的候选者。其他时候,一个 slot 可能是空的,从而导致区块时间不一致。
一个 slot 有多个验证人
当在一个给定 slot 中有多个验证人是区块生成候选者时,所有验证人都要生成一个区块并将其广播到网络中。此时这是一场比赛。区块最先到达大部分网络的验证人会获胜。根据网络拓扑和延迟,这两个链将继续生产区块,直到最终确定启动并切断分叉。请参阅下面的“分叉选择”了解其工作原理。
Slot 中没有验证人
当随机抽签滚到足够低的位置,没有验证人获得区块生产的资格时,一个 slot 可能没有区块。我们通过在后台运行二级循环式验证人选择算法来避免这种情况。通过该算法选择生成块的验证人总是可以生成区块,但如果同一 slot 也从 VRF 选择的验证人生成主区块,则忽略这些副区块。因此,一个 slot 可以有一个主区块或一个副区块,并且不会跳过任何 slot 。
VRF:https://wiki.polkadot.network/docs/en/learn-randomness
有关 BABE 的更多细节,请参阅研究草案文档。
https://research.web3.foundation/en/latest/polkadot/BABE/Babe.html
GRANDPA (GHOST-based Recursive ANcestor Deriving Prefix Agreement) 是为 Polkadot 中继链实现的最终性小工具。
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场