DPOS3.0的改进分析
在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,这时候儿有以下几种情况:
- 正式分叉到E,即如上图所示,一直延展下去,最张抛弃A产生的101块。通过第二次的共识,确定E生成的101为不可逆块。
- 在E的基础上生成几块后又回到以A的基础的块生成,这时候儿就要看哪个先达到三分之二加一共识,也就是说最长链。最终抛弃短链。
- 比较麻烦的是来回跳跃,某一个始终达不到最长,结果就是可能需要很长时间才能出块,因为最终肯定会有一个链最长的。
参考的站点:
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的改进分析相关推荐
- [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法
[css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法 父元素塌陷父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度 ...
- 《LINUX3.0内核源代码分析》第一章:内存寻址
https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page ...
- linux 0.01内核分析与操作系统设计 pdf,《Linux 0.01内核分析与操作系统设计——创造你自己的操作系统》...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 readme 本光盘为<Linux 0.0.1内核分析与操作系统设计--创造你自己的操作系统>一书的配套光盘,读者可自由取其源文件做学习,研究 ...
- 《MapReduce 2.0源码分析与编程实战》一第1章 HBase介绍
本节书摘来异步社区<MapReduce 2.0源码分析与编程实战>一书中的第1章,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- Tomcat7.0源码分析——Session管理分析(下)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/beliefer/article/details/52451061 前言 在<Tomcat7.0 ...
- vue-cli 3.0 源码分析
写在前面 其实最开始不是特意来研究 vue-cli 的源码,只是想了解下 node 的命令,如果想要了解 node 命令的话,那么绕不开 tj 写的 commander.js.在学习 commande ...
- Linux0.1源码分析,《Linux 0.01内核分析与操作系统设计——创造你自己的操作系统》...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 readme 本光盘为<Linux 0.0.1内核分析与操作系统设计--创造你自己的操作系统>一书的配套光盘,读者可自由取其源文件做学习,研究 ...
- Tomcat7.0源码分析——Session管理分析(上)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/beliefer/article/details/52450268 前言 对于广大java开发者而言, ...
- Android6.0源码分析—— Zygote进程分析(补充)
原文地址: http://blog.csdn.net/a34140974/article/details/50915307 此博文为<Android5.0源码分析-- Zygote进程分析> ...
最新文章
- 懒人神器 !一个创意十足的 Python 命令行工具
- 创新工场南京人工智能研究院执行院长冯霁:联邦学习中的安全问题
- [笔记]提升R的性能和突破内存限制的技巧
- mysql aes密钥大于16位_aes秘钥限制问题解决办法
- R语言在金融中的应用二
- No New-Net
- uniapp uView u-picker组件三级联动Demo
- python 字典 列表 深度遍历_如何完全遍历未知深度的复杂字典?
- ucenter通信失败和不能登录的解决
- hyperf获取客户端真实ip
- 物联网终端安全系列(之一) -- 物联网终端安全风险简析
- 小型微型计算机投稿流程,小型微型计算机系统
- POJ 有关动态规划的题目
- 100部最佳美国影片
- MyBatis-Ext,方便易用的MyBatis增强扩展
- 用scrapy框架爬取拉勾网招聘信息
- 判断是不是数字 Java_java如何判断是不是数字
- git 同时连接云效平台和github
- yun mysql 安装_yun安装mysql
- Anaconda3安装教程(详细)
热门文章
- 耗散结构-势-运动-哲学
- 对抗训练:对抗训练中的过拟合现象和对抗训练技巧总结
- Visual Studio Code怎么停止正在运行的Python脚本?
- 博途V17 PLCSIM FactoryIO 连接教程
- Node.js v17版本npm run dev 报错opensslErrorStack
- 潍坊市申请专利种类,专利的种类申请的程序
- Windows+Linux双系统引导
- 激光slam课程学习笔记--第11课:3D激光SLAM介绍
- win10关闭快速启动_让Win10开机更快 没有快速启动的解决方案
- 喜茶、奈雪的茶“花式”寻生路