如今很火的项目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还有相当大的距离。