本文来自波卡百科(Polkadot Wiki)的【基础知识】部分。
共识是对一种共同的状态达成一致的方法。为了使区块链的状态继续创建并向前推进,网络中的所有节点都必须一致并达成共识。这是去中心化网络中的节点能够保持彼此同步的方式。如果一个去中心化的区块链中节点没有共识,就无法确保一个节点相信的真实状态被其他节点所共享。共识的目的是在参与者都有自己“主观观点”的网络中,提供关于状态的“客观观点”。它是这些节点进行通信并达成一致的过程,并且能够生产出新的块。
现在工作量证明(PoW)和权益证明(PoS)已经被用于表示区块链机制的一种简写,但这并不能说明全部情况。PoW 是一种对区块生产者达成一致的方法,也是完全的中本聪共识(Nakamoto Consensus)的一部分,该共识还包括链选择算法(比特币中的最长链机制)。类似地,PoS 是一组用于选择验证人节点的规则,它并不是特指一个链的选择规则,或者一个链如何达到最终性(finality)。通常在节点之间,PoS 算法与拜占庭协议算法是互相结合的。例如,Tendermint 是一个实用的拜占庭容错算法,它使用 PoS 作为其验证人节点的选择方法。
尽管在达成去中心化共识方面简单而有效,但使用中本聪共识的工作量证明消耗了海量资源,而且还没有经济性或可证明的最终性,而且缺乏有效的措施来抵制垄断联盟。
运行 PoW 的纯中本聪共识区块链只能实现概率最终性的概念,然后去达成最终的共识。概率最终性是指在网络和参与者的某些假设下,如果我们看到创建在给定区块上的几个区块,就可以估计该区块终结的概率。最终的共识意味着,在未来的某个时刻,所有节点都将同意一组数据的真实性。这一最终共识可能需要很长时间,也无法提前确定需要多长时间。然而,诸如 GRANDPA 或 Ethereum 的 Casper FFG 这样的最终性工具的设计是为了对区块的最终性提供更有力和更快的保证,特别是,在拜占庭协议的某些过程发生后,它们永远无法恢复。不可逆共识的概念就被称为可证明的最终性。
在 GRANDPA 文档中,它被这样表述:
如果协议中的 oracle A 在一段未指明的时间后向所有参与者返回相同的值,那么我们称它是最终一致的。
混合共识
当我们谈到 Polkadot 的共识协议时,大家经常看到两个缩略词,GRANDPA 和 BABE。我们同时提到了这两个词是因为 Polkadot 使用的是混合共识。混合共识可以将最终性工具从区块生产机制中分离出来。
小米长江产业基金投资北京晶视智能科技有限公司 比特大陆为其股东:根据天眼查数据,小米长江产业基金近期对终端AI芯片公司北京晶视智能科技有限公司进行了投资,该公司由比特大陆2018年终端芯片团队拆分而来。目前北京比特大陆的投资公司对该公司占股为30.81%,是最大的单一股东。[2021/1/17 16:23:39]
这是一种在 Polkadot 中获得概率最终性(总是可以产生新区块的能力)和可证明最终性(在没有逆转机会的规范链上具有普遍一致性)好处的方法。它还避免了每种机制的缺点:概率最终性中不知不觉地遵循错误分叉的可能,以及可证明最终性中“暂停”(无法产生新的块)的问题。通过结合这两种机制,Polkadot 可以快速地生成区块,而较慢的最终性机制则可以在单独的进程中运行以完成区块,而不必承担交易处理较慢或暂停的风险。
混合共识在过去也曾被提起过。值得注意的是,在以太坊改进建议 EIP 1011 中,曾提议将混合共识作为以太坊向的 PoS 过渡的一步(现已失效),该建议指定了 Casper FFG。
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: 最终性工具
GRANDPA (GHOST-based Recursive ANcestor Deriving Prefix Agreement) 是为 Polkadot 中继链实现的最终性小工具。
它在一个部分同步的网络模型中工作,只要 2/3 的节点是诚实的,并且能够在异步设置中处理 1/5 的拜占庭节点。
一个显著的区别是,GRANDPA 在链上而不是区块上达成协议,大大加快了最终确定过程,即使在长期的网络分区或其他网络故障之后也是如此。
换句话说,只要超过 2/3 的验证人证明一个包含某个块的链,所有指向该块的块都将立即完成。
协议
有关协议的完整说明,请参阅论文的标题 3 部分。
https://github.com/w3f/consensus/blob/master/pdf/grandpa.pdf
实施
Rust 是 Substrate 框架的一部分。
https://github.com/paritytech/substrate/blob/master/frame/grandpa/src/lib.rs
有关更多详细信息,请参阅 W3F 研究页上的 GRANDPA。
https://research.web3.foundation/en/latest/polkadot/GRANDPA.html
分叉选择
带着 BABE 和 GRANDPA 混合机制,波卡的分叉选择变得清晰起来。BABE 一定要建立在 GRANDPA 最终确定的链上。当在最终确定之后有分叉时,BABE 通过构建具有最主要区块的链来提供概率最终性。
在上面的图像中,黑色块是已终结的。一个是主区块,两个是副区块。即使最上面的链是最新终结块上最长的链,但它不合格,因为它在评估时获得首选的次数比下面那条少。
中本聪共识
中本聪共识由最长链规则组成,使用工作量证明作为其防止女巫攻击和领导人选举的机制。
中本聪共识只给了我们概率最终性。概率最终性表明,过去的某个区块的安全程度,仅取决于它拥有的确认数量,或在该区块上构建的区块数量。随着工作量证明链中构建在某特定区块上的区块越来越多,这条链也会花费更多计算资源。然而,包含了该区块的链不一定总是被认可的链,因为某位具有无限资源的参与者可能构建竞争链,并花费足够的计算资源来创建不包含特定块的链。在这种情况下,比特币和其他 PoW 链使用的最长链规则将转移到这条新的链,让新链成为主链。
PBFT / Tendermint 共识
请参阅与 Cosmos 对比文章中的相关内容。
https://wiki.polkadot.network/docs/en/learn-comparisons-cosmos#consensus
Casper FFG
GRANDPA 和 Casper FFG(友好型最终性工具 Friendly Finality Gadget)的两个主要区别是:
在 GRANDPA 中,不同的投票者可以同时为不同高度的块投票
GRANDPA 只依赖最终的块来影响底层块生产机制的分叉选择规则
Casper CBC
Coming soon!
资源
GRANDPA 论文:GRANDP 最终性工具的学术描述。包含算法的形式化证明。
https://github.com/w3f/consensus/blob/master/pdf/grandpa.pdf
Rust 实现:一个参考文档和附带的 Substrate 模块。
https://github.com/paritytech/finality-grandpa
原文:https://wiki.polkadot.network/docs/en/learn-consensus
翻译:PolkaWorld
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。