【许晓笛】详解 EOS 的新共识机制 BFT-DPoS

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秒)与主链竞争,就算主链只剩下一个见证人,分叉链也永远不会追上主链,保证了系统的稳定。

Daniel Larimer 称 EOS 新的 BFT-DPoS 共识机制还在开发中,会在系统上线前完成开发,让我们拭目以待。

圆方圆区块链汇集大批区块链名师,采取导师值班制,为学员实时解决技术疑难。请关注圆方圆区块链知识星球与导师。(培训咨询请联系船长13826054890微信手机同号)

作者小笛 ,专注于 EOS 技术研究与区块链智能合约开发.是圆方圆区块链的导师,更多小笛老师的文章和视频请关注圆方圆链圈公众号。

原文地址:https://www.cnblogs.com/yuanfangyuan/p/8763095.html

时间: 2024-10-28 07:19:38

【许晓笛】详解 EOS 的新共识机制 BFT-DPoS的相关文章

【许晓笛】EOS:IPFS落地的重要途径

写在前面,这一篇文章是许晓笛 2018.05.20 在北京 <IPFS开发者圆桌会议>上的发言实录,感谢主办方戴嘉乐和董天一的邀请,感谢编辑们.先介绍一下<IPFS开发者圆桌会议>,创办人是戴嘉乐,前百度高级工程师,最早的IPFS工程师,一个会跳街舞的天才程序员,一个成功的价值主链投资者,能做学术研究也能做团队组织者,简直太全面了有木有.联合创办人是董天一,国内IPFS界不可不知的布道者,为IPFS项目在中国的推广做出了很大的贡献.戴嘉乐和董天一发起的<IPFS开发者圆桌会议

实例详解Spring的事务传播机制(二)

上面我们讨论了NEVER和MANDATORY的作用,下面我们接着讨论其他情况. 3. SUPPORTS 如果有事务则加入该事务,如果没有存在的事务则以非事务的方式运行. 我们先让insertSubTable方法在无事务的情况下运行.配置文件为: <tx:attributes>       <!--     <tx:method name="insertSuperTable" propagation="REQUIRED"/>      -

《AngularJS》5个实例详解Directive(指令)机制(转)

转自大漠穷秋:http://damoqiongqiu.iteye.com/blog/1917971 感谢作者分享! <AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请期待口令:Angular 1.一点小说明 指令的作用:实现语义化标签 我们常用的HTML标签是这样的: <div> <span>一点点内容</span> &l

详解npm的模块安装机制

详解npm的模块安装机制 依赖树表面的逻辑结构与依赖树真实的物理结构 依赖树表面的逻辑结构与依赖树真实的物理结构并不一定相同! 这里要先提到两个命令:tree -d(linux)和npm ls(npm) 在一个npm项目下: tree -d命令以树状图的方式列出一个项目下所有依赖的物理结构 npm ls命令以树状图的方式列出一个项目下所有依赖的逻辑结构 以官方文档为例子: 项目example1有两个依赖模块:mod-a模块和mod-c模块: mod-a模块有一个依赖模块[email protec

【许晓笛】重新理解EOS的系统架构

从区块链三要素的角度 区块链系统中,去中心化程度与效率之间天然地存在矛盾关系.如果区块链智能合约系统想追求类似比特币的去中心化程度,理论上效率就会大打折扣.现实也是这样的:比特币每秒钟只能处理7笔左右的交易,每一笔交易要用至少30分钟才能确认,这种效率和速度是远远不如银行转账的.作为一个全球资产交易平台,比特币这样的效率或许可以接受,但对于智能合约平台这样的效率是远远不够的.因为在智能合约中,每一个动作都可以看成是一笔交易,例如五子棋游戏合约中,每下一步棋就是一个交易,用户是无法等待半个小时才能

【许晓笛】从零开始运行EOS系统

复习一下上次文章的内容,EOS 系统主要有三个应用程序: nodeos: EOS 系统的核心进程,也就是所谓的"节点". cleos:本地的命令行工具,通过命令行与真人用户交互,并与节点(nodeos)和钱包(keosd)通信.是用户或者开发者与节点进程交互的桥梁. keosd:本地钱包工具.可以管理多个含有私钥的钱包并加密. 要求本篇教程适用于以下系统,但是不论你的电脑是 windows 还是 mac,都强烈建议安装一个虚拟机,在 Ubuntu 上搞,因为 Mac 上有很多坑.安装

【许晓笛】EOS 区块数据结构

对于一个区块链项目来说,最核心的数据莫过于区块数据,区块数据结构是整个区块链项目的技术基础.不过由于 EOS 项目一直在快速迭代,区块数据结构也不断更新,所以今天才向大家介绍. 区块头(block_header) 首先是区块头数据结构,包括了哈希.时间戳.默克尔根.见证人账户等. //区块头结构体struct block_header{   //前一区块哈希     block_id_type           previous;   //区块时间戳   block_timestamp_typ

【许晓笛】EOS 超级节点的五个使命

在EOS系统中,有"两股势力"是整个系统最关键的因素,那就是项目方和见证人.很多人觉得EOS这个项目"奇葩",就奇葩在项目方和见证人的关系上.EOS的项目方是BlockOne公司,创始人是BlockOne公司的首席技术官(CTO)Daniel Larimer,坊间称BM(ByteMaster).BlockOne公司曾经多次声明,其公司只开发EOS软件,并免费提供给任何想使用软件的人,公司不负责任何EOS网络启动.更令投资者难以接受的是,BlockOne公司公开宣称,

Navigation(三)问题详解——Fragment创建新的实例

背景 之前有人说看了我之前写两篇文章,之后,也在尝试使用Navigation,但是使用的过程当中遇到了问题:每次进入下一个Fragment不管任务栈里是否存在该Fragment的实例,都会创建一个新的实例而不会复用.为了说明问题,我录了一个GIF这样就会出现一个问题,可能我们之前的OneFragment保存一些状态或者数据,当我们跳转OneFragment的时候,因为创建新的实例导致我们之前保存状态或者数据全部消失. popUpTo/popUpToInclusive 在action当中设置两个属