在DPOS2.0时代,V神提出一个问题,也就是原来大家一直认为BFT是不会有分叉的现象的,但是在V神看来,这个是有可能的,看下面的示例:

上图中可以看到,假设Z为不可逆块,有A,B,C,D四个节点出块,当从A开始到c完成出块,即达到2N/3 + 1(所有出块节点的三分之二再加一),即达到新的不可逆节点。

但是假如D节点断网了,看不到102以后的块,自己出了一块101,然后又连接到网络上了,而ABC三个节点又无法控制必然是跟随哪个节点出块,假设一种情况,它们都从D(101)开始,继续出块,如上图,这也是合法的,在达到B时,发现会有两个101提交,产生冲突,结果就不知道哪条链中的不可逆块是合法的。

BM得知后不服啊,带着兄弟们搞出了如下的名堂,也就是说,不可逆块不是一次到位了,分成两步,先生成一个prelib,然后再经过2/3共识后,生成真正的lib(不可逆块)。

好是好,确实解决了问题,但是,结果是增加了不可逆块的确认时长和块数。

从目前来看,应该是增加了三倍左右的时间。

BM新的方法基本流程如下图:

当出块时间到达E时,产生一个prelib,然后依次递进,当prelib再次达到105时,101正式成为不可逆的lib.

重点来分析一下异常的情况,先看一下下面的图:

在上面的图中,仍然假设在虚线E处生成离线又连线的101,这时候儿有以下几种情况:

  1. 正式分叉到E,即如上图所示,一直延展下去,最张抛弃A产生的101块。通过第二次的共识,确定E生成的101为不可逆块。
  2. 在E的基础上生成几块后又回到以A的基础的块生成,这时候儿就要看哪个先达到三分之二加一共识,也就是说最长链。最终抛弃短链。
  3. 比较麻烦的是来回跳跃,某一个始终达不到最长,结果就是可能需要很长时间才能出块,因为最终肯定会有一个链最长的。

参考的站点:

https://github.com/EOSIO/eos/issues/2718

https://medium.com/eosio/dpos-bft-pipelined-byzantine-fault-tolerance-8a0634a270ba

https://github.com/EOSIO/eos/issues/3088

DPOS3.0的改进分析相关推荐

  1. [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法

    [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法 父元素塌陷父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度 ...

  2. 《LINUX3.0内核源代码分析》第一章:内存寻址

    https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page ...

  3. linux 0.01内核分析与操作系统设计 pdf,《Linux 0.01内核分析与操作系统设计——创造你自己的操作系统》...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 readme 本光盘为<Linux 0.0.1内核分析与操作系统设计--创造你自己的操作系统>一书的配套光盘,读者可自由取其源文件做学习,研究 ...

  4. 《MapReduce 2.0源码分析与编程实战》一第1章 HBase介绍

    本节书摘来异步社区<MapReduce 2.0源码分析与编程实战>一书中的第1章,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  5. Tomcat7.0源码分析——Session管理分析(下)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/beliefer/article/details/52451061 前言 在<Tomcat7.0 ...

  6. vue-cli 3.0 源码分析

    写在前面 其实最开始不是特意来研究 vue-cli 的源码,只是想了解下 node 的命令,如果想要了解 node 命令的话,那么绕不开 tj 写的 commander.js.在学习 commande ...

  7. Linux0.1源码分析,《Linux 0.01内核分析与操作系统设计——创造你自己的操作系统》...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 readme 本光盘为<Linux 0.0.1内核分析与操作系统设计--创造你自己的操作系统>一书的配套光盘,读者可自由取其源文件做学习,研究 ...

  8. Tomcat7.0源码分析——Session管理分析(上)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/beliefer/article/details/52450268 前言 对于广大java开发者而言, ...

  9. Android6.0源码分析—— Zygote进程分析(补充)

    原文地址: http://blog.csdn.net/a34140974/article/details/50915307 此博文为<Android5.0源码分析-- Zygote进程分析> ...

最新文章

  1. 懒人神器 !一个创意十足的 Python 命令行工具
  2. 创新工场南京人工智能研究院执行院长冯霁:联邦学习中的安全问题
  3. [笔记]提升R的性能和突破内存限制的技巧
  4. mysql aes密钥大于16位_aes秘钥限制问题解决办法
  5. R语言在金融中的应用二
  6. No New-Net
  7. uniapp uView u-picker组件三级联动Demo
  8. python 字典 列表 深度遍历_如何完全遍历未知深度的复杂字典?
  9. ucenter通信失败和不能登录的解决
  10. hyperf获取客户端真实ip
  11. 物联网终端安全系列(之一) -- 物联网终端安全风险简析
  12. 小型微型计算机投稿流程,小型微型计算机系统
  13. POJ 有关动态规划的题目
  14. 100部最佳美国影片
  15. MyBatis-Ext,方便易用的MyBatis增强扩展
  16. 用scrapy框架爬取拉勾网招聘信息
  17. 判断是不是数字 Java_java如何判断是不是数字
  18. git 同时连接云效平台和github
  19. yun mysql 安装_yun安装mysql
  20. Anaconda3安装教程(详细)

热门文章

  1. 耗散结构-势-运动-哲学
  2. 对抗训练:对抗训练中的过拟合现象和对抗训练技巧总结
  3. Visual Studio Code怎么停止正在运行的Python脚本?
  4. 博途V17 PLCSIM FactoryIO 连接教程
  5. Node.js v17版本npm run dev 报错opensslErrorStack
  6. 潍坊市申请专利种类,专利的种类申请的程序
  7. Windows+Linux双系统引导
  8. 激光slam课程学习笔记--第11课:3D激光SLAM介绍
  9. win10关闭快速启动_让Win10开机更快 没有快速启动的解决方案
  10. 喜茶、奈雪的茶“花式”寻生路