解读 ChainX 2.0 的混合共识机制

CHAINX·PCX

文章来源于 ChainX 社区投稿

ChainX 2.0 将采用全新的共识机制即“Babe+Grandpa”混合共识机制。该共识机制最显著的特点就是将确定最终性的任务从区块生产的流程中分离出来。

什么是最终性(Finality)

在区块链的环境中,最终性是确认所有格式良好的区块一旦提交给区块链将不会被撤销。当用户进行交易时,他们希望确信一旦他们的交易完成,交易就不能被任意更改或撤销。因此,在设计区块链共识机制时,最终性(Finality)变得至关重要。

概率最终性vs可证明最终性

PoW(完全的中本聪共识(Nakamoto Consensus)的一部分,是一种让所有节点对区块生产者达成一致性的方法)只能实现概率最终性来达到最终共识。概率最终性意味着假设某种特定的条件下,如果我们看到多个区块在某个区块上构建了,则有很大概率估计它就是最终了。而这种类型的最终性意味着在接下来的某个时间,所有的节点都将对某一组数据的真实性达成共识。但是最终共识可能需要很长的时间,并且无法确定这个时间有多久。

但是例如 GRANDPA 或以太坊的 Casper FFG 之类的最终性工具,他们被设计出来的目的就是为区块提供更强更快的最终性,在经过拜占庭协议的一些处理后,它们永远无法篡改。这种在不可逆的共识下的最终性类型称为可证明的最终性。

“Babe+Grandpa”的混合机制的好处

它可以同时获得概率最终性(总是可以产生新的区块)与可证明最终性(在没有逆转机会的规范链上达成一致性)两者的优点。
它还避免了两者的缺点:概率最终性中不知不觉地遵循错误分叉的可能,以及可证明最终性中“暂停”(无法产生新的块)的问题。
ChainX 通过结合这两种机制可以快速地生成区块,把较慢的确定最终性的任务放在单独的进程中运行,同时不必承担交易处理慢或暂停的风险。

BABE

BABE(Blind Assignment for Blockchain Extension)是一个基于 PoS 的共识协议。它在验证人节点之间运行,并确定由哪个验证人产生新的区块。以创世区块为起始,将创建区块的后续时间划分为不同的 epoch,再将不同的 epoch 划分为更小时间间隔的 slot,如图 1 所示。

解读 ChainX 2.0 的混合共识机制

图1

每一个 slot 里都会通过 VRF (verifiable random function,可以理解为随机抽奖函数)从众多的节点中抽出一部分有资格出块的节点。每一个 slot 选出的出块节点都可能不同,有可能多个,也可能一个都没有被选上。总体来说一个节点被选上的概率与它抵押的代币数量成正比。在 ChainX 中,一个 slot 大概是 6 秒钟。

解读 ChainX 2.0 的混合共识机制图2

上图中代表连续 5 个 epoch。每一个 epoch 中又有若干 slot。每一个 slot 中被选中的出块节点(slot leader)从 0 到多个不等。
代表每一个 epoch 对应的随机数,用来进行 VRF 计算的。

当一个 slot 有多个验证人


每个验证人都会产生一个区块并将其广播到网络中。这时就像是一场比赛,谁的块先传播到网络中更多的节点谁就会取得胜利。由于网络的拓扑和网络延迟的影响,可能多条链都会持续向后生成区块,直到最终被确定为止。那么如何决定哪一个分支作为最终主链呢?这个时候就需要借助 GRANDPA 来进行抉择了。

当一个 slot 中没有验证人

此时这个 slot 由 aura(一种安全性略低的算法)方法选择一个验证人去出块,这种区块叫做次级区块(secondary block)。但是一个 slot 中如果已经有了在抽奖中获胜的验证人的话,那么他就会生成一个主要区块(primary block),就不会再有次级区块了。因此,我们会看到每一个 slot 中必定会有一个区块,它要么是主要区块,要么是次级区块。如图3 所示,在临时分叉的链中可能既有主要区块(图中用 1 表示)也有次级区块(图中用 2 表示)。

解读 ChainX 2.0 的混合共识机制

图3

GRANDPA

GRANDPA (GHOST-based Recursive ANcestor Deriving Prefix Agreement) 是一个确定最终性的工具。
只要有 2/3 的节点是诚实的,并且可以在异步的情况下应付 1/5 的拜占庭节点,那么它就可以在部分同步的网络模型中工作。其中有一个显著的区别就是,即使在长期的网络分区中或者其他的网络故障之后,GRANDPA 协议仍然会就某一条链达成共识,而非对某一个区块达成共识,这就极大的加快了区块最终确定的过程。

分叉选择

使用“Babe+Grandpa”混合共识机制在面临分叉时 ChainX 的选择就变得很明确。BABE 共识会始终在 GRANDPA 最终确定的链上生成区块。在最后确定的区块后面可能会有分叉,BABE 共识会通过在具有最多主要区块(如图 3 中标有 1 的区块)的链上创建区块以提供概率确定性。
如图 3 所示,其中黑色的区块是已经被最终确定的区块。图中标有 1 的区块代表主要区块,标有 2 的区块代表次级区块。在该图中,最下面的链没有建立在最新确认的区块上所以直接忽略。最上面的一条链虽然是最长链,但是它的主要区块确是最少的,因此它不符合条件。而第二条链中它的区块总数虽然短,但其主要区块数确是最多的,因此会选择第二条链。

作者:土方不二,来源:ChainX社区

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!