如今很火的项目EOS的学习,以下主要的内容是基于白皮书

参考: http://chainx.org/paper/index/index/id/20.html

  EOS.IO软件引入了一种新的块链架构,旨在实现分布式应用的性能扩展。这是通过创建一个可以构建应用程序的类似操作系统的架构来实现的。该软件架构提供帐户,身份验证,数据库,异步通信以及在数以百计的CPU或群集上的程序调度。该技术的最终形式是一个块链体系架构,该区块链每秒可以支持数百万个交易,同时普通用户无需支付使用费用。

  写到了成功区块链应用平台的要求:

  • 支持百万级用户
  • 免费使用
  • 轻松升级和BUG恢复
  • 低延迟
  • 串行性能
  • 并行性能

重点部分-共识算法(DPOS):

  全网持有代币的人可以通过投票系统来选择区块生产者,一旦当选任何人都可以参与区块的生产。

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

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

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

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

交易的确认:

  由DPOS共识算法维护的区块链一般出块者都是100%在线的。这就是说一个交易平均1.5秒后,会被写入区块链中,同时被所有出块节点知晓这笔交易。这就意味着只需要1.5秒,一笔交易可以认定为99.9%被区块链接收了。

  有一些非常情况下例如,软件bug,Internet拥塞或恶意出块者出现,区块链可能出现分叉。为了确保一个交易是不可逆转的,可以等待15个区块确认。根据EOS.IO软件的配置,在正常情况下15个区块确认平均需要45秒

  在分叉产生的9秒钟内,出块节点就可能发现这个分叉可能并警告用户。一个节点观察网络的时候如果发现连续2次的丢块事件,这意味着该节点有95%可能性在区块链的分叉分支上。有出现3个连续的丢块以后,该节点有99%的可能性在一条分叉出来的区块链上。可以生成一个预测模型,它将利用节点丢失的信息,最近的参与率以及其他因素来快速地警告用户出现什么问题。

  对这种警告的反应完全取决于业务交易的性质,但最简单的反应是等待15/21确认,直到警告停止。

交易证明(TaPoS)

  EOS.IO软件要求每个交易都包括最近的区块头的哈希。 这个哈希有两个目的:

  • 1. 防止分叉区块链上出现大量交易记录;
  • 2. 使得系统能感知到用户是否在分叉出来的区块链上

  随着时间的推移,所有用户最终直接确认块链,这使得难以伪造假冒链,因为假冒将无法从合法链路迁移交易。

----------------------------------------------------------------------------(以下是更新后的github上白皮书翻译)

  EOS.IO软件利用唯一已知的分散式一致性算法,该算法经证明能够满足区块链上的应用程序的性能要求,即代理权证明(DPOS)。在这种算法下,那些在采用EOS.IO软件的区块链上持有令牌的人可以通过持续的批准投票系统选择区块生产者。任何人都可以选择参与块生产,并有机会生产积木,只要他们可以说服代币持有人投票给他们。

  EOS.IO软件能够精确地每0.5秒生成一个区块,并且只有一个生产者有权在任何给定的时间点生成区块。如果在预定时间没有生成块,则跳过该时间段的块。当跳过一个或多个区块时,区块链中会出现0.5秒或更多秒的间隔。

  使用EOS.IO软件,模块以126个轮次(每个6个,21个生产者)生产。在每轮的开始,21个独特的区块制作者优先选择由代币持有者投票。选定的生产者按照15个(三分之二以上)或更多生产者约定的顺序安排。

  如果生产商错过了一个区块,并且在过去24小时内没有生成任何区块,则他们将被移除,直到他们通知区块链他们打算再次开始生产区块为止。这可以确保网络平稳运行,最大限度地减少由于未被证明不可靠的调度生产者而造成的错误数量。

  在正常情况下,DPOS区块链不会遇到任何分叉,因为区块生产商不会竞争,而是合作生产区块。如果有分叉,共识将自动切换到最长的链条。这种方法是有效的,因为块添加到区块链分叉的速率与共享相同共识的区块生产者的百分比直接相关。换句话说,拥有更多生产者的区块链分支的生长速度要比拥有更少生产者的区块链更快,因为拥有更多生产者的分叉会遇到更少的缺失区块。

  此外,没有块生产者可以在两个分叉上同时生产块。这样做的块生产者可能会被投票出局。这种双重制作的密码证据也可用于自动删除滥用者。

  通过允许所有生产者签署所有块,拜占庭容错被添加到传统DPOS中,只要没有生产者签署具有相同时间戳或相同块高度的两个块。一旦15个生产者签署了一个区块,该区块被认为是不可逆转的。任何拜占庭式的制作人都必须通过以相同的时间戳或区块高度签署两个区块来产生他们背叛的密码证据。在这种模式下,不可逆转的共识应该在1秒内到达。

 

  典型的DPOS区块链有100%的区块生产者参与。在广播时间平均0.25秒后,交易可以被认为以99.9%的确定性得到确认。

  除了DPOS,EOS.IO还添加了异步拜占庭容错(aBFT),以加快实现不可逆转性。 aBFT算法在1秒内提供100%的不可逆性确认。

交易作为证明的凭证(TaPoS)
  EOS.IO软件要求每个事务都包含最近块标题的部分散列。这个散列有两个目的:

  • 阻止不包括引用块的叉子上的事务重放;和
  • 向网络指示特定用户及其赌注位于特定分支上。

  随着时间的推移,所有用户最终都会直接确认区块链,这使得伪造伪造链变得困难,因为伪造者无法将合法链中的交易迁移。

------------------------------------------------------------------------------------------

https://www.zhihu.com/question/62034483/answer/246790815  区块链朋克

EOS每3秒出一个大块,而目前EOS团队又提出一个方案,将3秒的区块继续分割成间隔为0.5秒的若干小块,这些小块之间不切换记账权。每一个小块一出来之后,就会马上广播。这样的设计可以使得区块更加快速得到确认的同时,尽可能减少因为网络延迟而产生的分叉影响。

此外,EOS还引入了BFT的机制:每当一个小区块在区块链网络内被广播时,其余节点将会立即对这个区块进行确认。经过2/3节点确认的区块将会进入不可逆状态。在这个共识机制下,安全确认的时间为0.5s(区块间隔)+0.3s(区块传播延时)<1s,从而到了秒级的确认性能。此外,如果将小块的出块间隔继续分割,理论上确认所需要的时间,会约等于区块传播的网络延时,甚至可以小于0.5秒。

此外,恶意攻击,除非控制了超过2/3的节点,否则无法恶意区块进入不可逆状态。这里特意提一下,如果恶意节点控制了超过1/2但小于2/3的节点,由于恶意区块不会进入不可逆状态,这样可以留给其它观察者节点和见证人节点足够的时间,将恶意节点投票出局。因此,这种模式也极大的提升了安全性

并行机制

在DPOS的基础上,EOS的链已经可以实现远超BTC或ETH的系统吞吐量,但是离十万或百万的TPS还有相当大的距离。

EOS.IO技术学习的更多相关文章

  1. IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)

    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...

  2. 绝版珍珍藏:web前端技术学习指南

    绝版珍珍藏:web前端技术学习指南 优秀的Web前端开发工程师要在知识体系上既要有广度和深度!应该具备快速学习能力. 前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的 ...

  3. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  4. Java基础之IO技术(一)

    ---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理 ...

  5. IT软件人员的技术学习内容(写给技术迷茫中的你) - 项目管理系列文章

    前面笔者曾经写过一篇关于IT从业者的职业道路文章(见笔者文:IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章).然后有读者提建议说写写技术方面的路线,所以就有了本文.本文从初学者到思想 ...

  6. EMV技术学习和研究(转)

    刚开始学习EMV&PBOC,磕磕碰碰,感谢xuture的<EMV技术学习和研究>给了很大帮助,让我少走了很多弯路,也感谢广俊.surge.艾零.小SO.Spinach.龙行天下的帮 ...

  7. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

  8. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  9. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

随机推荐

  1. 【bzoj3672】[Noi2014]购票 斜率优化dp+CDQ分治+树的点分治

    题目描述  给出一棵以1为根的带边权有根树,对于每个根节点以外的点$v$,如果它与其某个祖先$a$的距离$d$不超过$l_v$,则可以花费$p_vd+q_v$的代价从$v$到$a$.问从每个点到1花费 ...

  2. BZOJ4767 两双手(组合数学+容斥原理)

    因为保证了两向量不共线,平面内任何一个向量都被这两个向量唯一表示.问题变为一张有障碍点的网格图由左上走到右下的方案数. 到达终点所需步数显然是平方级别的,没法直接递推.注意到障碍点数量很少,那么考虑容 ...

  3. (六)Redis有序集合Sorted set操作

     Sorted set全部命令如下: zadd key score1 member1 score2 member2 ... # 将一个或多个member元素及其score值加入到有序集合key当中 z ...

  4. ZOJ3229:Shoot the Bullet——题解

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3229 题目大意:射命丸文要给幻想乡的居民照相,共照n天m个人,每天射命丸文 ...

  5. 洛谷 P2898 [USACO08JAN]haybale猜测Haybale Guessing 解题报告

    [USACO08JAN]haybale猜测Haybale Guessing 题目描述 给一段长度为\(n\),每个位置上的数都不同的序列\(a[1\dots n]\)和\(q\)和问答,每个问答是\( ...

  6. 从零开始学Linux系统(一)之引导流程解析

    Linux系统:分时多用户多任务的操作系统: Linux系统引导流程: inittab配置文件中: 定义了linux系统的运行的7个级别:从0~6 0.6:分别代表关机和重启,不建议设置为默认的运行级 ...

  7. STL中的map和unordered_map

    STL中的map和unordered_map map 头文件:#include 原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素 ...

  8. springcloud文章推荐

    有幸加入到springcloud中国社区,在这里获取到了不一样的技术,也接触到了不少的大牛! 这篇文章对于springcloud能否在企业中应用或者对springcloud想了解的人个人感觉写的非常好 ...

  9. 再来说一说sudo

    app        ALL = (ALL:ALL) ALL eric.zhan ALL = (app : app) ALLDefaults:eric.zhan runas_default=app 如 ...

  10. stout代码分析之六:Stopwatch

    在进行性能测试时,经常需要计算某个函数执行的时长.stout中的Stopwatch类可实现纳秒精度的计时. Stopwatch内部使用timespec记录开始和技术时间.   timeval和time ...