从丐帮帮主及丐帮长老的选举说起。

金庸小说中塑造了众多丐帮帮主的形象,如汪剑通、萧峰、洪七公、黄蓉、鲁有脚、耶律齐、史火龙等。这些帮主在未当选帮主之前大都是丐帮中普普通通的一员,后来经过投票选举---也就是吐唾沫的方式当上了帮主。这和现在eos的各大BP的竞选类似,eos的持有者可以通过投票的方式或者代理投票的方式选择自己意向中的BP,今天我们就从选举和投票的角度来谈谈丐帮帮主选举,来谈谈eos的投票机制以及对共识的理解。

关于共识的理解准备分两篇来解读,本篇只针对在eos中使用到的共识机制做简单的分析,在接下来的文章中会结合eos源码来解读BFT-DPoS共识机制。说道BFT-DPoS我们就要从Pos机制和DPos机制说起,文章文字较多,代码较少,请谨慎阅读:

那么什么是PoS呢?

PoS:Proof  of  Stake,也称股权证明,类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。通俗的讲,有个丐帮弟子名为白世镜,曾是丐帮八袋弟子,他持有这八个袋子已经五年了,要知道这些在丐帮都是资历的证明。有一天,白世镜给丐帮立功了,再加上他在丐帮的资历,帮主就提拔他做了九袋弟子并擢升为执法长老。这就是Pos机制,一个丐帮弟子持有的袋子越多,持有的时间越长就越有可能上升到丐帮的长老位。

那么什么又是DPoS呢?

DPoS:Deligated Proof of Stake,也称委托股权证明,eos使用了DPoS的机制,在eos的白皮书中对eos为何使用DPoS进行了详尽的解释,简单摘录如下:

EOS.IO软件架构中采用目前为止唯一能够复合上述性能要求的区块链共识算(DPoS)。根据这种算法,全网持有代币的人可以通过投票系统来选择区块生产者,一旦当选任何人都可以参与区块的生产。

EOS.IO里预计每3秒生产一个区块。任何时刻,只有一个生产者被授权产生区块。如果在某个时间内没有成功出块,则跳过该块。

EOS.IO架构中区块产生是以21个区块为一个周期。在每个出块周期开始时,21个区块生产者会被投票选出。前20名出块者首选自动选出,第21个出块者按所得投票数目对应概率选出。所选择的生产者会根据从块时间导出的伪随机数进行混合。以便保证出块者之间的连接尽量平衡。

如果出块者错过了一个块,并且在最近24小时内没有产生任何块,则这个出块者将被删除。这确保了网络的顺利运行。

在正常情况下,DPOS块链不会经历任何叉,因为块生产者合作生产区块而不是竞争。如果有区块分叉,共识将自动切换到最长的链条。具有更多生产者的区块链长度将比具有较少生产者的区块链增长速度更快。此外,没有块生产者应该同时在两个区块链分叉上生产块。如果一个块生产者发现这么做了,就可能被投票出局。

仍旧以白世镜为例,白世镜和其他二十位长老共二十一位长老被吐唾沫选举出来来维持整个丐帮的发展,这就是DPoS的投票机制,通过持有的布袋投票出自己意向中的丐帮长老。有一天丐帮需要修改帮规的第三十二条:若要当选丐帮帮主必须接受帮内弟子的唾沫洗礼。如何才能修改成功呢,需要这二十一位长老中的2/3以上的人同意修改才可以,也就是十五位或者十五位以上的长老签了字,下一任帮主任职的时候才能免去唾沫的洗礼,这就是DPoS的可以根据协议修改共识参数的功能。

那么如果在修改帮规的那一天这二十一位中的其中一位因为不在场这个帮规还能修改成功么?当然可以,这就是我们所说的委托股权证明,比如护帮长老被西夏一品堂的人纠缠而不能亲临帮规修改现场,那么他可以把自己的权利委托给传功长老,让他替自己行使权利,从而完成帮规的修改,这就是DPoS的股权委托证明机制。

当然,当上了长老就一劳永逸了么?并不是,拿白世镜来说由于他和康敏之间不得不说的关系被丐帮弟子发现之后,群丐不再支持他做丐帮长老,因此他就会被从丐帮长老的位置上除名,这就是DPoS的不作为淘汰机制。

前些天如火如荼的超级节点竞选亦是如此,持有的eos大都冻结在交易所里,而各大交易所纷纷声明自己要参与超级节点竞选的投票,其实他们这些交易所拿的都是eos持有者的权益去投票的。因为币冻结了,相当于eos的持有者将投票权委托给交易所进行了投票。这

些超级节点如果没能正确履行自己的权利和义务,eos的持有者将不再投票支持他们,他们也将从超级节点除名,从而产生下一个新的超级节点。

那么什么又是BFT-DPoS

BFT-DPoS: Byzantine Fault Tolerance- Deligated Proof of Stake,又称具有拜占庭容错机制的DPoS。

仍旧以丐帮众位长老为例,帮主选举之前需要以众位长老的的意见统一才可实现。于是执法长老白世镜选出自己意向中的帮主--萧峰并写在纸条上传给传功长老,传功长老如果同意执法长老的意见则确认之后传递给护帮长老,如果不同意执法长老的意见,则写出自己意向中的长老,就这样依次传递下去直到二十一位长老全部传递完,如果有超出2/3以上的长老同意萧峰当帮主,则萧峰就可以上任丐帮帮主了。假设两位长老之间传递纸条的时间为3s一次,那么要完成2/3以上的长老确认就至少需要15*3=45s的时间。

有没有什么更好的办法呢来缩短这个帮主选举确认的时间呢?在eos的最新版本中采用了BFT-DPoS的机制,即在其中一个节点产生区块的时候就通知其他节点来确认这个区块的产生,也就是说当白世镜在纸条上写下萧峰的名字的同时就大吼一声,让其他的长老再他写下名字的同时就来确认丐帮帮主的人选。接下去传功长老也写下一个名字并喊其他长老来确认,这样一来,只需要3s便可确认一个区块的产生,也就是帮主人选的确认。

这种产生区块就广播出去并让其他节点完成签名确认的过程便称之为BFT-DPoS。但是问题也随之而来,我们有过部署nodeos节点经验的小伙伴们都知道,在eos中产生块的速度为500ms,那么这个会不会因为时间太短导致别的节点还没有签名确认结束就轮到下一个区块生产者产生区块呢?就比如白世镜长老写了一个名字在纸条上吼了一声之后等其他长老来确认,但是其中一个长老年迈,走不快了,还没来得及确认,就轮到传功长老写纸条了。这样就导致了纸条传递的延时,在eos链上就体现为网络延时同时产生分叉,如何解决网络延时及分叉这个问题呢?BM团队放弃了原来按随机顺序出块的设计,改用记账人相互协商后确定的顺序。这样就能保证网络延迟较低的记账人之间能以相邻的顺序出块。

具体eos出块的规则及BFT-DPoS共识机制在源码中的体现,会在下一篇文章中结合着源码进行解读。

长按以下二维码,关注本公众号,一起学习eos开发.

微信公众号

有任何疑问或者指教请添加本人个人公众号,当然有对eos开发感兴趣或者金庸粉的也可以添加,备注eos开发或金庸,拉你进群一起交流

个人微信帐号

eos源码赏析(七):EOS智能合约入门之共识机制初探相关推荐

  1. eos源码赏析(十二):EOS之从“狼人游戏”看智能合约调用及权限分配(下)

    接上篇,本篇从智能合约内部权限使用出发,结合"狼人游戏"源码,谈谈eosio中权限的分配及使用,本文主要分为以下三部分: 狼人团队的声明探析 多签名账户 权限eosio.code的 ...

  2. eos源码赏析(五):EOS智能合约入门之无崖子传功虚竹

    读过<天龙八部>小说或者看过<天龙八部>影视剧的朋友们对无崖子将自己毕生功力传给虚竹都应该不算陌生.我们平时在了解或者熟悉基于各种语言或环境的智能合约开发的时候都不可避免的接触 ...

  3. eos源码赏析(二十三):默克尔树在EOS中的应用(上)

    前面文章中在分析push_transactioneos源码赏析(二十):EOS智能合约之push_transaction的天龙八"步"以及区块签名eos源码赏析(二十一):EOS智 ...

  4. eos源码赏析(十一):EOS之从“狼人游戏”看智能合约调用及权限分配(上)

    火了没几天的"狼人游戏"因某些原因遭到口诛笔伐而下线,后期参与的玩家可谓损失惨重,而这一切的操盘仿佛都指向一个并不算匿名的匿名团队,毕竟在区块链上任何动作的执行都是可追溯的.该游戏 ...

  5. [EOS源码分析]1.EOS源码编译运行

    本文所有实践都是基于EOS dawn-v4.1.0,请切到该分支然后实践 切换命令:git checkout dawn-v4.1.0 目前网络上都是针对老版EOS2.0源码编译的文章,我在mac上参考 ...

  6. [EOS源码分析]4.EOS源码调试

    在[EOS源码编译运行]一文已经详细描述了EOS源码编译.但是阅读代码,光跑代码是不够的,必须要可以调试.一搜发现网上没有相关的文章,只好自己探索折腾.不过很快发现其实EOS已经为我们做好了的,只需带 ...

  7. eos源码赏析(六):EOS智能合约入门金叶子兑换碎银

    武侠小说中的群豪们似乎总不缺钱,经常有台词就是小二来两斤熟牛肉.两斤烧酒,不用找了,难道他们都这么有钱的么?熟悉金庸小说<鹿鼎记>的朋友应该对狗官吴之荣还有些印象,庄允城在书中给他夹了若干 ...

  8. [EOS源码分析]7.EOS智能合约开发实践之合约调用合约(inline action)

    首先,目前dawn-4.1, dawn-4.2使用inline action是会报如下错误 transaction declares authority '{"actor":&qu ...

  9. [EOS源码分析]6.EOS特殊智能合约eosio

    这里说的eosio智能合约不是泛指eos的智能合约,它是一个特殊的具体的合约.它本事可大了,我们一起来看看它有哪些功能 负责智能合约部署 大家有注意到如下红色字体的log吗 $ cleos set c ...

  10. [EOS源码分析]5.EOS编写HelloWorld智能合约及各种坑

    本文所有实践都是基于EOS dawn-v4.1.0,请切到该分支然后实践 切换命令:git checkout dawn-v4.1.0 HelloWorld源码 #include <eosioli ...

最新文章

  1. 首个深度强化学习AI,能控制核聚变,成功登上《Nature》
  2. 如何结合因果与强化学习?看最新《因果强化学习:动机,概念,挑战与应用》报告,85页ppt...
  3. 一些随笔,我有故事,你有酒吗
  4. Oracle 10g中对resumable session的增强
  5. 小米6twrp最新第三方rec_闲鱼淘宝购买的有锁小米9等手机怎么升级MIUI12系统呢?...
  6. Uva572(DFS+联通集)
  7. vue e-charts按需引入
  8. Springboot访问jsp页面但是却变成下载该页面
  9. 作者:周园春(1975-),男,博士,中国科学院计算机网络信息中心研究员、博士生导师...
  10. vue中的v-text指令之Vue知识点归纳(二)
  11. 学Python的女生好不好找工作?
  12. Mask Network与Conflux发起联合Bounty
  13. oracle sqlplus命令登录数据库
  14. word 导出编辑ftl_word文档如何变为ftl word文档转化成ftl文件
  15. 【程序员(媛)国人之光】知(美)识(色)贩卖贴】非标题党】
  16. 值得收藏的JavaScript代码
  17. 两个求和符号如何用计算机,计算:两个求和符号∑∑怎么办
  18. poi向excel插入图片demo
  19. matlab绘制累计频率曲线图,累积频率曲线怎么画,怎么画累计曲线图
  20. 极速pdf文件打印时此计算机未连接到网络,PDF文件不能打印的五种解决方案

热门文章

  1. 编写Java程序,使用抽象类和抽象方法构建不同动物的扑食行为,抽象类设计
  2. vue-Vant组件上传图片
  3. 飞机大战小游戏 C语言(课设任务)
  4. Shiro在线刷新权限
  5. 为前端工作者准备的几个炫彩的js动画库
  6. DDR MC DFI PHY
  7. 【Linux学习笔记04】Linux常用命令
  8. Broken Pipe
  9. JS十六进制转浮点、字符串转为ArrayBuffer、ArrayBuffer转16进制字符串、16进制转10进制、crc校验位、十六进制转中文字符串(小程序、浏览器)、十六进制字符串转ascall字串
  10. 渐变背景怎么搞?2分钟教你制作渐变背景