EOS.IO技术学习
如今很火的项目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软件能够精确地每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技术学习的更多相关文章
- IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)
IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...
- 绝版珍珍藏:web前端技术学习指南
绝版珍珍藏:web前端技术学习指南 优秀的Web前端开发工程师要在知识体系上既要有广度和深度!应该具备快速学习能力. 前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的 ...
- Java IO流学习
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
- Java基础之IO技术(一)
---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理 ...
- IT软件人员的技术学习内容(写给技术迷茫中的你) - 项目管理系列文章
前面笔者曾经写过一篇关于IT从业者的职业道路文章(见笔者文:IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章).然后有读者提建议说写写技术方面的路线,所以就有了本文.本文从初学者到思想 ...
- EMV技术学习和研究(转)
刚开始学习EMV&PBOC,磕磕碰碰,感谢xuture的<EMV技术学习和研究>给了很大帮助,让我少走了很多弯路,也感谢广俊.surge.艾零.小SO.Spinach.龙行天下的帮 ...
- Java多线程技术学习笔记(二)
目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...
随机推荐
- hadoop 使用map合并小文件到SequenceFile
上一例是直接用SequenceFile的createWriter来实现,本例采用mapreduce的方式. 1.把小文件整体读入需要自定义InputFormat格式,自定义InputFormat格式需 ...
- 【转】c# 类反射简单操作
转:http://www.jb51.net/article/25863.htm 首先建立一个测试的类 复制代码代码如下: public class MyClass { public int one ...
- Docker的结构(6-13)
一.Docker的结构. Docker命令不清楚的时候可以在命令的最后加上--help Docker和虚拟机的区别? 虚拟机的实现原理是:先模拟出一套硬件,然后在这基础上跑一个操作系统,然后在这个操作 ...
- 【刷题】BZOJ 1143 [CTSC2008]祭祀river
Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成 ...
- BZOJ1031:[JSOI2007]字符加密——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1031 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密 ...
- BZOJ [Ctsc2002] Award 颁奖典礼 解题报告
[Ctsc2002] Award 颁奖典礼 Description IOI2002的颁奖典礼将在YONG-IN Hall隆重举行.人们在经历了充满梦幻的世界杯之后变得更加富于情趣.为了使颁奖典礼更具魅 ...
- 【ST表】【模板】ST表
Definition ST表是一种用于处理静态RMQ问题(无修改区间最值问题)的最快数据结构,书写方便使用简单效率便捷.其中其预处理复杂度为O(nlogn),查询复杂度为O(1).总时间复杂度为O(n ...
- HDU2686 费用流 模板
Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Mybatis(4) 映射文件-参数处理
参数处理: 单参数处理: mybatis 不会做任何特殊处理. #{key} : key 可以写任何字段取出参数值. 测试方法: mapper接口: mapper.xml: 控制台: 多参数处理: m ...
- Mybatis(3) 映射文件-增删改查
映射文件: 映射文件是根据数据库模型生成的编写sql脚本xml文件, mapper标签中namespace属性值为对应模型实体类的全类名. <?xml version="1.0&quo ...