首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EOS共识机制升级之“DPOS+BFT混合共识”深度解读

大毛注:

本文授权转载于公众号【胖哥说币】。

共识机制为区块链中最核心要素,不同公链拥有不同的解决方案。其中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(下)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208A0VYJA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券