EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,带有拜占庭容错的委托股权证明),本篇文章将详解新共识机制的原理。

传统 DPoS

EOS 项目刚刚发布的时候的共识机制是 DPoS(Deligated Proof of Stake,委托股权证明),类似于 Bitshares 和 Steem,这种共识机制采用随机的见证人出块顺序,出块速度为 3 秒,交易不可逆需要45秒。为什么需要 45 秒呢?因为 DPoS 下,见证人生产一个新区块,才表示他对之前的整条区块链进行了确认,表明这个见证人认可目前的整条链。而一个交易要达到不可逆状态,需要 2/3 以上的见证人确认,在 EOS 里就是 14 个见证人。我们假设一个交易被包含在 1000 号区块中,需要其他13个见证人轮流出块至 1013 号区块,这样才能“收集”到14个见证人对此交易的确认(包括生产1000区块的见证人)。2/3 以上的见证人确认的交易,就是不可逆的交易了,这就是 45 秒确认时间的由来。

拜占庭容错(BFT)

为了改进传统的 DPoS 算法,我们可以借鉴 PBFT(Practical Byzantine Fault Tolerance,拜占庭容错算法)的机制。在传统 DPoS 共识机制中,我们让每个见证人在出块时向全网广播这个区块,但即使其他见证人收到了目前的新区块,也无法对新区块进行确认,需要等待轮到自己出块时,才能通过生产区块来确认之前的区块。

在新的机制下,每个见证人出块时依然全网广播,其他见证人收到新区块后,立即对此区块进行验证,并将验证签名完成的区块立即返回出块见证人,不需等待其他见证人自己出块时再确认。从当前的出块见证人看来,他生产了一个区块,并全网广播,然后陆续收到了其他见证人对此区块的确认,在收到 2/3 见证人确认的瞬间,区块(包括其中的交易)就不可逆了。交易确认时间大大缩短,从 45 秒缩短至 3 秒左右(主要为等待生产区块的时间)。这种机制可以称为初级版的 BFT-DPoS 共识机制。

BFT-DPoS

为了挖掘 EOS 系统的性能,Daniel Larimer 在以上基础上又进行了修改。首先,他将出块速度由 3 秒 缩短至 0.5 秒,理论上这样可以极大提升系统性能,但带来了网络延迟问题:0.5 秒的确认时间会导致下一个出块者还没有收到上一个出块者的区块,就该生产下一个区块了,那么下一个出块者会忽略上一个区块,导致区块链分叉(相同区块高度有两个区块)。比如:中国见证人后面可能就是美国见证人,中美网络延迟有时高达 300ms,很有可能到时美国见证人没有收到中国见证人的区块时,就该出块了,那么中国见证人的区块就会被略过。

为解决这个问题,Daniel Larimer 将原先的随机出块顺序改为由见证人商议后确定的出块顺序,这样网络连接延迟较低的见证人之间就可以相邻出块。比如:日本的见证人后面是中国的见证人,再后面是俄罗斯的见证人,再后面是英国的见证人,再后面是美国的见证人。这样可以大大降低见证人之间的网络延迟。使得 0.5 秒的出块速度有了理论上的可能。

为了保证万无一失,不让任何一个见证人因为网络延迟的意外而被跳过,Daniel Larimer 让每个见证人连续生产 6 个区块,也就是每个见证人还是负责 3 秒的区块生产,但是由最初的只生产 1 个变成生产 6 个。最恶劣的情况下,6 个区块中,最后一个或两个有可能因为网络延迟或其他意外被下一个见证人略过,但 6 个区块中的前几个会有足够的时间传递给下一个见证人。

再来讨论 BFT-DPoS 的交易确认时间问题:每个区块生产后立即进行全网广播,区块生产者一边等待 0.5 秒生产下一个区块,同时会接收其他见证人对于上一个区块的确认结果。新区块的生产和旧区块确认的接收同时进行。大部分的情况下,交易会在 1 秒之内确认(不可逆)。这其中包括了 0.5 秒的区块生产,和要求其他见证人确认的时间。


EOS 系统规定,一旦区块达到不可逆状态(2/3见证人确认),就无法在此之前进行分叉,保证了交易的永久可信。另外,即使多数见证人想分叉区块链,也只能以相同的速度(0.5秒)与主链竞争,就算主链只剩下一个见证人,分叉链也永远不会追上主链,保证了系统的稳定。

【问链-Eos公开课】第三课 EOS 的新共识机制 BFT-DPoS相关推荐

  1. 【问链-Eos公开课】第一课 EOS简介

    一.Eos简介 EOS(Enterprise Operation System),企业操作系统,是为企业级分布式应用设计的一款区块链操作系统.相比于目前区块链平台性能低.开发难度大以及手续费高等问题, ...

  2. 【问链-Eos公开课】第二课 EOS环境搭建(Ubuntu系统下)

    1.EOS三个组件: nodeos:服务端区块链节点组件,也就是区块生产节点,用于接受客户端的远端请求,并打包区块,主要包含四个插件,chain_plugin.http_plugin.net_plug ...

  3. 【问链-EOS公开课】第九课 EOS 数据库与持久化 API(二)

    上次的文章详细讲解了 EOS 数据库的架构,本文将以官方示例为基础,详解 EOS 数据库的开发实战. 基本步骤 在智能合约里与 EOS 数据库交互,首先要定义存储的数据: 定义对象:具体就是定义一个 ...

  4. 北大AI公开课第三课--视觉计算变革与挑战by Face++孙剑

    之前立的flag倒了,今天才来扶,可是有什么办法呢,生活就是要厚着脸皮活下去啊. 今天一起来整理第三课,这是来自face++孙剑老师的分享,因为正好我自己本身也是做计算机视觉的,所以听他的分享,我觉得 ...

  5. 一块链习公开课:从 0 到 1 构建去中心化应用 | ArcBlock 预告

    2019 年 6 月 16 日 上午 10 点,ArcBlock 区块基石研发副总裁陈天将出席"一块链习"主办的第 30 期<区块链技术公开课 100 讲>,探讨分享今 ...

  6. 小学教师计算机课评课,信息技术公开课的评课

    信息技术公开课的评课 (即使没有听课的教师看本文也是有用的,能领会我的意思,并学到一点知识的.有几处是精彩之处,值得大家细看.) 用◎表示一点. 宏观指与本节无关的内容,如个人素质,总体印象,对课程理 ...

  7. SAP Fiori Elements 公开课第三单元学习笔记 - OData 和注解深入讲解

    课程地址 很多 SAP 从业者反映,open SAP 上的视频,因为网络原因无法访问,所以我会陆续在我的个人微 信 号"汪子熙"上面,把这些视频配上中文字幕并发布出来,敬请关注. ...

  8. triz矛盾矩阵_TRIZ 创新方法 培训 之TRIZ 公开课 大纲 三天 班

    关于TRIZ创新方法培训的十个典型的错误是什么,Triz培训在市场营销领域创新中如何运用,TRIZ理论的定义.核心思想.主要内容和体系架构.学习本门课程有哪些好处等问题,听听天行健TRIZ创新技术管理 ...

  9. 盒子模型代码_果冻公开课第五课:五分钟理清盒模型的前世今生

    果冻公开课第五课:五分钟理清盒模型的前世今生 在前端程序员眼中,页面其实可以被视为一个个盒子组成的 那么,这些盒子是如何构建起整个页面的呢? 动画视频: 如何理解盒子模型 文字解析: 在上一节里面 我 ...

最新文章

  1. neural network神经网络识别手写字体
  2. Zonbu-售价 99 美元的袖珍电脑
  3. caffe.pb.h丢失问题:
  4. 15 错误边界与使用技巧
  5. Python中的魔法方法
  6. 《软件项目管理(第二版)》第 8 章——项目团队与干系人 重点部分总结
  7. Java 线程之间通信
  8. python运用ico图标_如何优雅地处理Django中的favicon.ico图标详解
  9. Hibernate之ID生成规则
  10. vb.net它SqlHelper制备及应用
  11. 引入ELK前需要知道的“坑”(上)
  12. nfc读写软件 android手机,手机nfc万能读写软件
  13. 机器学习之决策树(数据分析师学习必备)——糖潮丽子的博客
  14. 企微主页_企业微信名片对外怎么显示官网和小程序?
  15. 区块链安全入门与实战
  16. 图像处理专业术语中英文对照(不断补充中)
  17. fabric.js 钢笔橡皮问题
  18. Matlab求出图像中每个细胞的细胞核与核仁面积之比代码
  19. 廉价交换机走俏的原因以及使用中的风险
  20. 西安航空学院计算机等级成绩查询,64所院校成绩查询网址

热门文章

  1. C++基础回顾-强制类型转换
  2. 深度学习入门之感知器(原理+代码)
  3. Go报错:more than one character in rune literal
  4. 学习笔记:Keras 错误提示
  5. Win10:tensorflow学习笔记(4)
  6. Canny边缘检测算法
  7. STM32 USART1 USART2 UASRT3 UART4 UART5串口通信测试程序
  8. Python系统调用——运行其他程序
  9. SVM训练时候样本不均衡怎么设置惩罚项
  10. [云炬创业基础笔记] 第四章测试14