• 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相关推荐

  1. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

    给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...

  2. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)

    给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...

  3. 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)

    给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...

  4. 思考题:现在有4分钟的沙漏和7分钟的沙漏,如何计算出9分钟的时间

    思考题:现在有4分钟的沙漏和7分钟的沙漏,如何计算出9分钟的时间   4分钟沙漏,即里面的沙子需要4分钟才能漏完:同理,7分钟沙漏也是如此. 文字版思路: 第0分钟:4分钟沙漏和7分钟沙漏同时开始: ...

  5. 时间块android最新版官方,时间块app安卓-时间块(时间记录仪)预约 v1.0官方版_5577安卓网...

    时间块app安卓版是一款专业实用的时间记录仪,能帮助你清晰的记录每一件事情所消耗的时间,时间块app省去了繁琐的操作步骤,不用按开始/停止,也不需要在计划事情上浪费时间,帮助你更轻松的管理你的时间. ...

  6. EOS 共识机制 (4)出块流程

    step1. 超级节点提供相关计算资源和网络资源,保证节点的正常运行; step2. 当轮到某超级节点拥有出块权时,超级节点收集该时段内的所有交易,并对交易验证后打包成区块 广播至其他超级节点 ste ...

  7. BCH三小时缓慢出块——需要重视的小概率事件

    BitcoinCash 最近BCH以及诸多主流币迎来了一波行情回暖,平均涨幅均超过20%.伴随着行情的回暖,社区用户发现BCH区块高度606218在北京时间2019-10-26 15:21:57被挖出 ...

  8. 路由器php系统时间设置时间设置时间设置时间设置时间设置,win7电脑提示系统时间设置有误请更新系统日期...

    环境:win7 打开电脑,登陆电脑桌面,我们在电脑桌面右下角会看到时间和日期显示 我们用鼠标点击下方的时间,这时会显示一个当前的日期时间表.鼠标点击下方的"更改日期和时间设置" 这 ...

  9. c语言 北京时间转换utc时间_UTC时间转换成北京时间C语言函数代码

    UTC + 时区差 = 本地时间 时区差东为正,西为负.在此,把东八区时区差记为 +0800, UTC + (+0800) = 本地(北京)时间 (1) 那么,UTC = 本地时间(北京时间))- 0 ...

  10. JAVA 根据传入的时间和增加的小时(n),跳过法定节假日和工作休息时间获取时间

    目录 前言 一.导入每年的法定节假日(我这里入库) 二.创建工具类 1.创建map(用来存放法定节假日) 2.根据传入时间算出跳过法定节假日的时间 3.根据传入时间算出跳过法定节假日和工作日休息时间的 ...

最新文章

  1. 【从0到1学Web前端】javascript中的ajax对象(一)
  2. 使用DCIM软件确保数据中心符合DCOI
  3. Oracle拆分字符串及排序,Oracle 字符串查询以及拆分函数
  4. 请简短说明一下你对AQS的理解
  5. 自定义异常时exception is never thrown in the corresponding try block和unhandled exception
  6. LeetCode--139. 单词拆分(动态规划)
  7. php html script,html script标签怎么用
  8. 养一台家庭轿车的年费是多少?有的工薪打工者为什么卖车?
  9. 文献管理三剑客之endnote broken attachments
  10. airpod蓝牙耳机音量大解决办法_airpods使用方法_airpods怎么调音量
  11. RV1109人脸识别门禁闸机主板方案
  12. Windows 10 未安装任何音频输出设备 解决方案
  13. 如何在表格里做计算机统计表,如何运用Excel编制统计表并做一般数据分析?-excel统计怎么做,最简单的统计表格怎么做...
  14. 达梦数据库DM8 DCA认证学习笔记
  15. 开放耳机有什么优缺点,列举出几款口碑不错的开放式耳机
  16. 小白学习笔记之计算机要点
  17. 将字符串中的特殊字符进行转义
  18. ISO/IEC 29134
  19. 现代电信交换【复习上课时的习题】
  20. KST-51单片机:c语言编程实现数码管动态显示秒表的倒计时

热门文章

  1. 量子多体理论怎么样理解,多体系统的量子理论
  2. python自动回复_Python—itchat实现微信自动回复
  3. 微信消息自动回复并汇总
  4. Could not autowire. No beans of 'Iface' type found. less... (Ctrl+F1) Inspection info:Checks autowi
  5. 苹果Appstore加急审核方法
  6. 大数据专业考研书_大数据考研
  7. linux中下载nali + 配置golang环境
  8. word2019每页设置不同页眉
  9. 计算机表格制作培训教材,电脑制作表格教案设计
  10. 开发请打开Debug模式--Dcat-Admin框架实战(三)