资讯专栏INFORMATION COLUMN

原创| DPOS 3.0 + BFT 为什么需要 2 次 2/3 共识

elva / 2420人阅读

摘要:提出问题上面所述的只经过了一次共识,那么会出现什么问题呢。这里引进的概念,即资格成为的区块,简称。一个区块经过共识后,他不会立马成为会先成为然后再经过共识后才会成为。

很多读者都很关心 BM 和 V神 在 EOS issue 上对于 DPOS 的机制的讨论,接下来我们具体讨论下他们的讨论内容。

我们先来讲述一下最初 EOS 的 DPOS + BFT 的共识机制:当一个特定的区块被 ( 2/3 + 1 ) 生产者确认的时候,该块成为不可逆块。

假设现在有 A, B 和 C 三个 BP。

情况 a: A 生产了一个区块 N, B 生产区块 N + 1 并且确认了区块 N, C 生产区块 N + 2 并且确认了区块 N, N +1 , 此时 N 已经有 3 个确认,达到了 2/3 + 1 个确认,则区块 N 成为不可逆。

情况 b: A 生产一个区块 Na, B 生产一个区块 Nb, C 在 Nb 的基础上生产一个区块 N + 1, 此时发现 两个区块 N( Na 和 Nb ) 都不能达到 2/3 + 1 的确认数了,那岂不是永远不会不可逆了?假如此时 A 在 N + 1 的基础上生产区块 N + 2, B 生产区块 N + 3, 此时区块 N + 1 达到了不可逆的,那么 N + 1 所在的该分叉上小于等于 N + 1 的都会变成不可逆, 也就是 Nb 也变成不可逆。

提出问题

上面所述的只经过了一次共识,那么会出现什么问题呢。

V 神就在 issue 上提出一个例子。

可以看出第一条链 A 生产的 101 经过 B、C 已经达到了 3 个确认数已经成为不可逆了, 但此时 D 因网络不好, 没接收到这些块, 从而产生分叉开始生产区块 101 , 之后 A 生产区块 102 , 因为块高度大于之前的 101 所以是可生产的,B同理, 经过 A B 之后 D 生产的 101 同样达到了 三个确认数, 这样就会有 2 个块高度为 101 的区块成为了不可逆,造成 conflict。

为什么会造成这个原因呢?

因为区块 101 没有经过所有节点就成为不可逆了, 导致后面的产生的区块 101 可在下一轮被确认成为不可逆块。如果说 A ,B ,C ,D 都确认了区块 101, 那么下一轮谁都没可能生产块高度为 101 的区块。也就不会同时出现 2 个不可逆块了。 但全部节点确认才成为不可逆这就破坏了引入 BFT 的想法, 而且你没办法保证所有节点都会对他进行确认,毕竟网络波动的原因会一直存在。

那怎么解决不可逆块冲突, 但是又不会破坏 BFT 的想法呢。

那我们可以继续使用 BFT 的思想, 也就是破坏掉第二个区块 101成为 lib 的条件。

PLIB

这里引进 proposed lib的概念, 即资格成为 lib 的区块,简称 plib。
一个区块经过 2/3 + 1共识后,他不会立马成为 lib, 会先成为 plib, 然后再 plib 经过 2/3 共识后才会成为lib。

解决问题

由上图,区块101 成为了 lib, 那么代表 plib 高度至少是 105 了,也就是 7 个节点中至少有五个生产的区块高度达到了 110, 这时候,假如一个 E 生产出区块 101, 那么至少需要 2/3 的节点帮他确认成为 plib,也就是有节点能生成 102 - 105,需要 4 个节点,但是 7 个 BP 已经有 5 个的块高度达到了 110,根本就不够节点能让 区块 101 成为不可逆, 那么就不会有 2 个 相同 block_num 的 lib 存在了。也就是当 N 能成为 lib 的时候,根本没有任何情况能让 2 个 N 同时成为 plib ( 当这里的 N 成为 lib 是排除掉因为 N + m 成为 lib 才使 N 成为 lib 的情况 )。

其实这种方式你可以看成几条带 plib 的分叉链, BP 节点对这些链进行 2/3 共识来选出哪条 plib 分叉链作为主链,丢弃掉其他 plib 分叉链。

总结: dpos 3.0 + BFT 有最初的一次共识增加到了2次,避免掉出现 conflict lib , 但是这也让 head block num 和 lib 的高度拉到至少 2 2/3 21 * 12 = 336 个块( 这种计算方式是忽略 BP 漏块的情况 )。用时间算比较准确也就是 168 秒。 还有不要嫌字迹不清晰, 写到一半笔没墨水了,我也没办法 T T

以上为个人见解,如有错误或者缺漏,还请指正哈。

参考文章:
https://github.com/EOSIO/eos/...
https://medium.com/eosio/dpos...

转载请注明来源: https://eos.live/detail/19947

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24534.html

相关文章

  • [原创] 如何理解EOS的性能设计 - 主链部分

    摘要:最近看源码发现跟之前理解有点出入,目前代码实现上跟白皮书上也有所出入,该文章需要更新修正前言作为的代表,他的设计是比较超前的,也是目前最被看好的项目之一本文从传统互联网码农思维,尝试讲述下的性能方面的设计本文只是涵盖了基础主链部分,暂不包括 最近看3.0源码发现跟之前理解有点出入,目前代码实现上跟白皮书上也有所出入,该文章需要更新修正 前言 EOS作为blockchain 3.0的代表...

    shenhualong 评论0 收藏0
  • Bystack的高TPS共识算法

    摘要:第一类模式是在公链项目中运用的最广泛应用的共识算法,比特币长达年的运行已充分证明的安全性与稳定性。此时当前区块已是合法区块但是未获得最终确认,类似于比特币未获得个块确认存在回滚的可能性。 showImg(https://segmentfault.com/img/bVbtamO?w=1000&h=600); 共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工...

    zero 评论0 收藏0
  • BBFT共识算法深度解析丨Bystack是如何实现单条侧链 20000+TPS的

    摘要:第一类模式是在公链项目中运用的最广泛应用的共识算法,比特币长达年的运行已充分证明的安全性与稳定性。此时当前区块已是合法区块但是未获得最终确认,类似于比特币未获得个块确认存在回滚的可能性。 showImg(https://segmentfault.com/img/bVbtamO?w=1000&h=600); 共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工...

    novo 评论0 收藏0
  • 区块链主流共识算法

    摘要:比特币是第一个区块链应用,同时也是最著名的应用之一,它所使用的共识机制就是。区块链系统的参与者锁定他们在该区块链上持有的虚拟资产或,他们会签署消息以达成一致意见。 一.POW(Proof Of Work) Proof Of Work,也就是工作量证明。工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算...

    awokezhou 评论0 收藏0
  • 漫谈共识机制

    摘要:更多区块链知识共识机制是区块链领域的核心概念,无共识,不区块链。是比特币采用的共识算法,从诞生起运行至今,表现稳健,是史上最成功的共识算法,没有之一。挖到矿的矿工同时得到一笔算法赋予的奖励,也就是一些比特币。 更多区块链知识 共识机制是区块链领域的核心概念,无共识,不区块链。 区块链作为一个分布式系统,可以由不同的人或机构,将安装了区块链软件的计算机(简称节点)加入到网络里,然后共同计...

    Wuv1Up 评论0 收藏0

发表评论

0条评论

elva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<