大毛注:
本文授权转载于公众号【胖哥说币】。
共识机制为区块链中最核心要素,不同公链拥有不同的解决方案。其中EOS在之前采用DPOS时,出块时间是3秒。加上BFT之后,出块时间可以提高至0.5秒,并且BFT机制对整个区块链容错能力、稳定性的提升有着重大意义。
文中用比较清楚的语言针对BM在上周上传了关于DPOS+BFT混合共识的视频做一些延展性的解读。
由于视频掺杂大量的口语,并且需要一定的基础知识,许多读者仍然搞不清楚其技术原理。在这里对BM的视频,让大家更加明白DPOS+BFT到底是什么,为什么能达到高性能和拜占庭容错(BFT)。
BM上传的视频大家可以在文末找到,包含中文字幕。
注意,技术文阅读并理解本文需要一定的基础知识。
什么是BFT?
BFT的全称是Byzantine fault tolerance,即拜占庭容错。是解决拜占庭将军问题中,当存在叛徒时,叛徒用尽了各种手段来破坏时,将军们仍然能够达成达成共识。所以叫拜占庭容错,容错的意思就是容纳节点出现错误(或者叛徒),网络仍然能达成一致的行动,正常运作。
所谓DPOS+BFT共识,是说EOS的DPOS共识能够有足够稳健的拜占庭容错能力,能够容纳网络中一定的叛徒(或者出错)节点。
BM的视频里大致分为两块内容:
1、「DPOS的拜占庭容错能力」
2、「EOS的DPOS如何提高出块速度和性能」
一、DPOS的拜占庭容错能力
DPOS的特殊性,也是奠定拜占庭容错能力的基础框架,是它的算力节点是固定21个人,并且由大型的机构运营节点,其信息也相对透明,例如运营节点的地点、运营的情况等等。并且DPOS的算力节点是固定出块顺序的,固定地从A到B到C······。
在这种情况下,其实DPOS是拜占庭容错的特殊解,如何理解特殊解?原来的拜占庭容错(POW工作量证明),解决的是不限数量、随机广播同步的算力节点的容错能力,DPOS解决的拜占庭容错从两个维度降低了难度:
1、节点数量固定只有21个。并且节点信息透明。
2、固定出块顺序。每个节点跟接力棒一样,一个个往下接力出块。每个节点不能还没轮到它出块的时候,就出块。都是必须轮到再出块。如果出现出块故障,会跳过这个节点。(在下文详细讨论)
在POW或者其他的POS共识里,节点不限、随机出块顺序的问题,就变成只要解决「固定数量和固定出块顺序情况下的拜占庭问题」,其难度就大大降低。
在这种情况下,DPOS是如何解决拜占庭错误?
我们假设有三个节点A、B、C,出块顺序是A到比B到C。实际上EOS有21个节点,但是举例三个节点足以说明问题了。
1.1 分叉情况
现在,B决定分叉了。在轮到B出块时候,它不再承认C和A的块,就自己出块。我们在这里假设出块时间为3s,这是比特股的出块速度。
那么B分叉出去的的链,每9秒,才能出一个块,而C、A是6s出一个块。因为即使分叉,在DPOS的机制下,还是只能等到A\C都出块后,才轮到B出块。
在这种情况下,分叉出块的速度永远追不到原来链的速度。而共识只承认最长的链。
以上是少数节点分叉,如果是三分之二的节点决定分叉呢?其实原理也是一样的。如下图。
当三分之二的节点决定分叉的时候,最后一个诚实的少数节点决定了最快、最长的那条链。分叉的B和A节点,追不上由C承认的链的增长速度。
(大毛注:这里有前提没写清楚, 是作恶节点利用无利害关系(nothing at stake)多出块的情况,视频里面举了很多作恶的例子,这只举了两种。至于真的3分之2作恶,不出老链块,那么确实是会攻击成功的,也是bft2/3投票的必然结果,不过要14个节点联合也是有一定难度的)
1.2 最后不可逆块
在DPOS的共识里,最长的那条链才是真正的链。但是如何确认这条链是最长的?这里就需要「最后不可逆块」的概念。
最后不可逆块,顾名思义,就是最后那块,不能在修改的块。DPOS规定,这个区块被三分之二的节点确认,就是不可逆块。如果被最新出块的三分之二节点确认,就是最后不可逆块。
如图,绿色B就是最后不可逆块,因为被C和A确认了。
通过最后不可逆块,就能确认这条链是不是由三分之二节点签名的最长的那条链。
总结:由上文可知DPOS可以有效地防范拜占庭作恶,有着稳健的拜占庭容错。本文只列举了主要几种作恶情况,还有许多作恶情况DPOS都可以防范,不一一列举。
1.3 交易作为权益证明TaPOS
交易作为权益证明TaPOS的全称是transaction as proof of stake。有点类似比特币的「区块头」概念,即有每个最后不可逆块有一个哈希值,是来代表前一个块的数据,而前一个块又有前前块的哈希值,环环相扣。
当块数越多后,这条链就很难被替代。因为你修改一个块,所有的TaPOS值就对不上了。
二、EOS的DPOS如何提高出块速度和性能
在上文提到,比特股的出块速度是3s,而EOS可以达到500ms。EOS能提高出块速度是因为定向广播。
例如在比特股和STEEM里,其广播是随机的,谁先收到块就可以接力生成新的块,那么,可能的出块顺序如下图:
因为是随机广播,所以会诞生很多同步一轮的区块路径不是最短路径。
而在EOS的机制下,节点是定向广播的。21节点的位置是透明的,会选择最短路径来规定广播顺序。如图:
在最短路径的广播顺序下,生产出最后不可逆块的速度便变快了。
如果其中有一个节点出现故障没有出块,会迅速轮到下一个区块来出产。所以当某些节点出现故障的时候,不会影响其他节点的出块速度。至于跳过节点可能产生的作恶行为的防范,上文已经提到防范的方式了。
这就是BM在视频里讲到的「DPOS+BFT混合共识」。
以下为中文字幕视频(转载自Hi区块链):
BM首次解释 DPoS+BFT(上)
BM首次解释 DPoS+BFT(下)
领取专属 10元无门槛券
私享最新 技术干货