EOS 链的最新块和不可逆块之间,目前有 335 个块的差距,按照 EOS 每0.5秒出一个块,意味着他们的差距将近 167.5s,那么问题来了,一个交易进入了最新块,是否能够确认它已经成功?
本文来讨论下 EOS 不可逆块的概念到底指的是什么。
![Screen Shot 2018-09-21 at 15.56.15](http://qiniu.eth.fm/2018-09-22-Screen Shot 2018-09-21 at 15.56.15.png)
然后我们看 BFT 的确认机制
我们按目前 EOS 的 21 个节点来计算:
每个区块必须由 21 * (2/3 + 1) = 15 个节点确认;
每个节点连续生产12个区块再切换下一个记账人出块,就是 12 * 0.5s = 6s;
节点按确定的顺序记账;
每个节点出块前会等待上一次的块被至少 15 个节点在链上通过出块确认,也就是 90s;
基于BFT的逻辑分为 Pre Commitment 和 Commitment 阶段,各自需要 15 个节点确认,那么完成两个阶段需要 90 * 2 = 180s;
但 EOS 并没有用 BFT,而是用 DPOS + aBFT (异步BFT)
DPOS 机制其实已经能够保证在交易进入区块后 99.9% 的概率不可逆,而aBFT保证100%不可逆。
aBFT 大概意思是说可以提前完成其它节点的确认签名,而非等到这个节点出块才能完成签名,所以目前达到不可逆时间是小于 180s 的。
综合来说,当交易出现在一个区块中,并能够被区块浏览器查询到,那么99.9%这笔转账已经成功,剩下0.1%的概率需要等到不可逆块高度达到被打包区块高度是才能最终确认为100%不可逆。
更多细节可阅读 BM 写的文章:
https://medium.com/eosio/dpos-bft-pipelined-byzantine-fault-tolerance-8a0634a270ba