谈谈EOS的出块时间,不可逆时间,BFT
EOS出块时间
我们知道,新生产节点必须基于上一个区块生产新区块,因此新生产节点必须在指定的时候内接收到上一个区块的内容,否则只能跳过(只能基于上上一个区块生产)。如果出块时间太短,新节点很大可能接收不到上一个区块的内容,进而频繁出现跳块。只要有跳块,系统就会出现临时分叉,尽管EOS的DPOS的定时出块和最长链共识让系统很大可能最终达成共识,但是也会造成更多缺块,进而降低了有效单位出块数量,得不偿失。
因而一个合适的出块时间就显的很重要了,比如STEAM, BTXS的出块时间就设置为3S。那凭啥EOS能将出块时间设置为0.5S呢?因为EOS做了如下改进:
1)1个生产节点连续出12个块
1个生产节点内的12个块不存在接收等待问题,是0等待,肯定也不存在跳块问题。比如生产区块2时,肯定能拿到区块1的数据
2)21个生产节点的出块顺序是固定的,且直连
当A个节点完成12个区块时,系统会切换生产者,新的生产者B就需要通过网络接收上一个生产者的区块。由于A的区块是生产一个就广播一个,12区块传播到生产者B的可用时间最短, 由于网络时延和拥堵问题,B不一定能接收A的12区块。因此为了减少跳块,必须降低A->B的时延。由于STEEM,BTSX中,生产节点是随机排序的,A->B的时延是不确定的,可能A在美国,B在中国,美国和中国的来回传播就可能需要600ms, 同时A和B可能没有直连还需要中间节点跳转才能传播,时延就更久了,因而需要设置一个比较大的出块时间,最后测试调试下来,STEEM和BTXS就设置了一个比较合理的3S经验值。EOS为了减少相邻两个节点的时延,按照节点之间的时延安排出块顺序,即时延小的安排在邻近,比如A安排为香港,B为中国就比A是美国,B为中国好太多。同时,由于这21个节点的信息是透明的,这21个节点可以直连,进一步降低传播时延。有了这两个改进后,0.5s变为可能了。当然这种固定出块顺序的确定性也带来了不安全因素,比如攻击者可以准确预估每个出块节点,就可以更容易发起攻击行为。
然后我们来看下节点地域和实际出块顺序:
中国的节点没有将服务器部署在中国大陆的,要么在香港要么在日本,新加坡,甚至美国。
还有,仔细的网友可能可以看出,目前的实际出块顺序其实满足按字母排序,但是同时时延排序也接近满足。这和BM最初提的完全根据时延安排出块顺序有一些差异,这可能因为节点直连,同时没有中国大陆节点,时延已经可以满足了,同时几乎固定的节点,其他优化的方式会很多。(多谢网友Angelia提供信息)
EOS区块不可逆时间
EOS中,21个生产节点轮流出块。一个区块是通过后续节点基于该区块的生产行为来间接确认的,为了实现BFT级别的不可逆,自然需要得到2/3+1的节点确认。由于每个节点生产12个区块,所以需要12*(2/3*21+1)=12*15=180个区块确认。因而大家第一感觉是1个区块只需要后续180个区块即可变成不可逆状态。然而,如果大家在EOS区块链上查询区块的实时信息,就会发现一个区块都是在300多区块的时候才会被标识为不可逆状态。这是因为区块的确认分为两个阶段,第一个阶段是pre-commit阶段,该阶段需要接受2/3+1个节点的确认表明,超过2/3节点认可该区块。但是此时并不意味着超过2/3的节点已经了解到这个2/3确认信息。因而再次需要2/3的commit签名确认过程。两阶段签名确认流程类似下图:
EOS的特殊BFT
常规的BFT都是生产一个区块,等待共识,然后再生产一个区块,比如Tendermint和Cosmos里的PBFT的实现。由于PBFT共识需要比较长的时间(至少1s以上),因而采用传统的PBFT是没法满足0.5s出块需求的。因而EOS 的BFT采取了不同的实现方式,出块和共识是流水并行工作的,区块生产完成后,不等待PBFT共识,继续生产同时参与并处理上一个区块的PBFT共识,当PBFT共识完成后即修改为不可逆状态。
EOS是否已采用BFT
其实很多人都在问我这个问题,我只能说,根据我目前了解点到的信息是还没实行。其实从目前不可逆时间也可推测出BFT没有启用,如果BFT已经启用,1个区块在一个BFT共识完成后(该共识一般只需1s多)即可被确认,而不是目前的3分钟。
个人能力有限,本文的分析可能有不足或者错误的地方,欢迎大家告知
------------------------------------------------
谈谈EOS的出块时间,不可逆时间,BFT相关推荐
- 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...
- 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...
- 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)
给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...
- 思考题:现在有4分钟的沙漏和7分钟的沙漏,如何计算出9分钟的时间
思考题:现在有4分钟的沙漏和7分钟的沙漏,如何计算出9分钟的时间 4分钟沙漏,即里面的沙子需要4分钟才能漏完:同理,7分钟沙漏也是如此. 文字版思路: 第0分钟:4分钟沙漏和7分钟沙漏同时开始: ...
- 时间块android最新版官方,时间块app安卓-时间块(时间记录仪)预约 v1.0官方版_5577安卓网...
时间块app安卓版是一款专业实用的时间记录仪,能帮助你清晰的记录每一件事情所消耗的时间,时间块app省去了繁琐的操作步骤,不用按开始/停止,也不需要在计划事情上浪费时间,帮助你更轻松的管理你的时间. ...
- EOS 共识机制 (4)出块流程
step1. 超级节点提供相关计算资源和网络资源,保证节点的正常运行; step2. 当轮到某超级节点拥有出块权时,超级节点收集该时段内的所有交易,并对交易验证后打包成区块 广播至其他超级节点 ste ...
- BCH三小时缓慢出块——需要重视的小概率事件
BitcoinCash 最近BCH以及诸多主流币迎来了一波行情回暖,平均涨幅均超过20%.伴随着行情的回暖,社区用户发现BCH区块高度606218在北京时间2019-10-26 15:21:57被挖出 ...
- 路由器php系统时间设置时间设置时间设置时间设置时间设置,win7电脑提示系统时间设置有误请更新系统日期...
环境:win7 打开电脑,登陆电脑桌面,我们在电脑桌面右下角会看到时间和日期显示 我们用鼠标点击下方的时间,这时会显示一个当前的日期时间表.鼠标点击下方的"更改日期和时间设置" 这 ...
- c语言 北京时间转换utc时间_UTC时间转换成北京时间C语言函数代码
UTC + 时区差 = 本地时间 时区差东为正,西为负.在此,把东八区时区差记为 +0800, UTC + (+0800) = 本地(北京)时间 (1) 那么,UTC = 本地时间(北京时间))- 0 ...
- JAVA 根据传入的时间和增加的小时(n),跳过法定节假日和工作休息时间获取时间
目录 前言 一.导入每年的法定节假日(我这里入库) 二.创建工具类 1.创建map(用来存放法定节假日) 2.根据传入时间算出跳过法定节假日的时间 3.根据传入时间算出跳过法定节假日和工作日休息时间的 ...
最新文章
- 【从0到1学Web前端】javascript中的ajax对象(一)
- 使用DCIM软件确保数据中心符合DCOI
- Oracle拆分字符串及排序,Oracle 字符串查询以及拆分函数
- 请简短说明一下你对AQS的理解
- 自定义异常时exception is never thrown in the corresponding try block和unhandled exception
- LeetCode--139. 单词拆分(动态规划)
- php html script,html script标签怎么用
- 养一台家庭轿车的年费是多少?有的工薪打工者为什么卖车?
- 文献管理三剑客之endnote broken attachments
- airpod蓝牙耳机音量大解决办法_airpods使用方法_airpods怎么调音量
- RV1109人脸识别门禁闸机主板方案
- Windows 10 未安装任何音频输出设备 解决方案
- 如何在表格里做计算机统计表,如何运用Excel编制统计表并做一般数据分析?-excel统计怎么做,最简单的统计表格怎么做...
- 达梦数据库DM8 DCA认证学习笔记
- 开放耳机有什么优缺点,列举出几款口碑不错的开放式耳机
- 小白学习笔记之计算机要点
- 将字符串中的特殊字符进行转义
- ISO/IEC 29134
- 现代电信交换【复习上课时的习题】
- KST-51单片机:c语言编程实现数码管动态显示秒表的倒计时
热门文章
- 量子多体理论怎么样理解,多体系统的量子理论
- python自动回复_Python—itchat实现微信自动回复
- 微信消息自动回复并汇总
- Could not autowire. No beans of 'Iface' type found. less... (Ctrl+F1) Inspection info:Checks autowi
- 苹果Appstore加急审核方法
- 大数据专业考研书_大数据考研
- linux中下载nali + 配置golang环境
- word2019每页设置不同页眉
- 计算机表格制作培训教材,电脑制作表格教案设计
- 开发请打开Debug模式--Dcat-Admin框架实战(三)