摘要:提出问题上面所述的只经过了一次共识,那么会出现什么问题呢。这里引进的概念,即资格成为的区块,简称。一个区块经过共识后,他不会立马成为会先成为然后再经过共识后才会成为。
很多读者都很关心 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
摘要:最近看源码发现跟之前理解有点出入,目前代码实现上跟白皮书上也有所出入,该文章需要更新修正前言作为的代表,他的设计是比较超前的,也是目前最被看好的项目之一本文从传统互联网码农思维,尝试讲述下的性能方面的设计本文只是涵盖了基础主链部分,暂不包括 最近看3.0源码发现跟之前理解有点出入,目前代码实现上跟白皮书上也有所出入,该文章需要更新修正 前言 EOS作为blockchain 3.0的代表...
摘要:第一类模式是在公链项目中运用的最广泛应用的共识算法,比特币长达年的运行已充分证明的安全性与稳定性。此时当前区块已是合法区块但是未获得最终确认,类似于比特币未获得个块确认存在回滚的可能性。 showImg(https://segmentfault.com/img/bVbtamO?w=1000&h=600); 共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工...
摘要:第一类模式是在公链项目中运用的最广泛应用的共识算法,比特币长达年的运行已充分证明的安全性与稳定性。此时当前区块已是合法区块但是未获得最终确认,类似于比特币未获得个块确认存在回滚的可能性。 showImg(https://segmentfault.com/img/bVbtamO?w=1000&h=600); 共识算法是分布式系统保证节点数据状态一致性的方法,在区块链的共识算法分POW(工...
阅读 2255·2021-11-17 09:33
阅读 813·2021-10-13 09:40
阅读 532·2019-08-30 15:54
阅读 743·2019-08-29 15:38
阅读 2385·2019-08-28 18:15
阅读 2447·2019-08-26 13:38
阅读 1802·2019-08-26 13:36
阅读 2098·2019-08-26 11:36