欢迎所有爱好区块链技术的人加入。

ARCHIVES / 512.HTML

谈谈 EOS 的出块时间,不可逆时间,BFT

Surou EOS-新手教程EOS-优秀转载

EOS出块时间

我们知道,新生产节点必须基于上一个区块生产新区块,因此新生产节点必须在指定的时候内接收到上一个区块的内容,否则只能跳过(只能基于上上一个区块生产)。如果出块时间太短,新节点很大可能接收不到上一个区块的内容,进而频繁出现跳块。只要有跳块,系统就会出现临时分叉,尽管EOS的DPOS的定时出块和最长链共识让系统很大可能最终达成共识,但是也会造成更多缺块,进而降低了有效单位出块数量,得不偿失。

因而一个合适的出块时间就显的很重要了,比如STEAM, BTXS的出块时间就设置为3S。那凭啥EOS能将出块时间设置为0.5S呢?因为EOS做了如下改进:

然后我们来看下节点地域和实际出块顺序:

中国的节点没有将服务器部署在中国大陆的,要么在香港要么在日本,新加坡,甚至美国。

EOS区块不可逆时间

EOS中,21个生产节点轮流出块。一个区块是通过后续节点基于该区块的生产行为来间接确认的,为了实现BFT级别的不可逆,自然需要得到2/3+1的节点确认。由于每个节点生产12个区块,所以需要12*(2/321+1)=1215=180个区块确认。因而大家第一感觉是1个区块只需要后续180个区块即可变成不可逆状态。然而,如果大家在EOS区块链上查询区块的实时信息,就会发现一个区块都是在300多区块的时候才会被标识为不可逆状态。这是因为区块的确认分为两个阶段,第一个阶段是pre-commit阶段,该阶段需要接受2/3+1个节点的确认表明,超过2/3节点认可该区块。但是此时并不意味着超过2/3的节点已经了解到这个2/3确认信息。因而再次需要2/3的commit签名确认过程。两阶段签名确认流程类似下图:

EOS的特殊BFT

常规的BFT都是生产一个区块,等待共识,然后再生产一个区块,比如Tendermint和Cosmos里的PBFT的实现。由于PBFT共识需要比较长的时间(至少1s以上),因而采用传统的PBFT是没法满足0.5s出块需求的。因而EOS 的BFT采取了不同的实现方式,出块和共识是流水并行工作的,区块生产完成后,不等待PBFT共识,继续生产同时参与并处理上一个区块的PBFT共识,当PBFT共识完成后即修改为不可逆状态。

EOS是否已采用BFT

其实很多人都在问我这个问题,我只能说,根据我目前了解点到的信息是代码和测试代码都有,但还没实行。其实从目前不可逆时间也可推测出BFT没有启用,如果BFT已经启用,1个区块在一个BFT共识完成后(该共识一般只需1s多)即可被确认,而不是目前的3分钟。

转载自 https://mp.weixin.qq.com/s/DlKA5xBhNUFC203t7sKy4A