EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,带有拜占庭容错的委托股权证实),本篇文章将详解新共识机制的原理。算法
EOS 项目刚刚发布的时候的共识机制是 DPoS(Deligated Proof of Stake,委托股权证实),相似于 Bitshares 和 Steem,这种共识机制采用随机的见证人出块顺序,出块速度为 3 秒,交易不可逆须要45秒。为何须要 45 秒呢?由于 DPoS 下,见证人生产一个新区块,才表示他对以前的整条区块链进行了确认,代表这个见证人承认目前的整条链。而一个交易要达到不可逆状态,须要 2/3 以上的见证人确认,在 EOS 里就是 14 个见证人。咱们假设一个交易被包含在 1000 号区块中,须要其余13个见证人轮流出块至 1013 号区块,这样才能“收集”到14个见证人对此交易的确认(包括生产1000区块的见证人)。2/3 以上的见证人确认的交易,就是不可逆的交易了,这就是 45 秒确认时间的由来。网络
为了改进传统的 DPoS 算法,咱们能够借鉴 PBFT(Practical Byzantine Fault Tolerance,拜占庭容错算法)的机制。在传统 DPoS 共识机制中,咱们让每一个见证人在出块时向全网广播这个区块,但即便其余见证人收到了目前的新区块,也没法对新区块进行确认,须要等待轮到本身出块时,才能经过生产区块来确认以前的区块。性能
在新的机制下,每一个见证人出块时依然全网广播,其余见证人收到新区块后,当即对此区块进行验证,并将验证签名完成的区块当即返回出块见证人,不需等待其余见证人本身出块时再确认。从当前的出块见证人看来,他生产了一个区块,并全网广播,而后陆续收到了其余见证人对此区块的确认,在收到 2/3 见证人确认的瞬间,区块(包括其中的交易)就不可逆了。交易确认时间大大缩短,从 45 秒缩短至 3 秒左右(主要为等待生产区块的时间)。这种机制能够称为初级版的 BFT-DPoS 共识机制。区块链
为了挖掘 EOS 系统的性能,Daniel Larimer 在以上基础上又进行了修改。首先,他将出块速度由 3 秒 缩短至 0.5 秒,理论上这样能够极大提高系统性能,但带来了网络延迟问题:0.5 秒的确认时间会致使下一个出块者尚未收到上一个出块者的区块,就该生产下一个区块了,那么下一个出块者会忽略上一个区块,致使区块链分叉(相同区块高度有两个区块)。好比:中国见证人后面可能就是美国见证人,中美网络延迟有时高达 300ms,颇有可能到时美国见证人没有收到中国见证人的区块时,就该出块了,那么中国见证人的区块就会被略过。spa
为解决这个问题,Daniel Larimer 将原先的随机出块顺序改成由见证人商议后肯定的出块顺序,这样网络链接延迟较低的见证人之间就能够相邻出块。好比:日本的见证人后面是中国的见证人,再后面是俄罗斯的见证人,再后面是英国的见证人,再后面是美国的见证人。这样能够大大下降见证人之间的网络延迟。使得 0.5 秒的出块速度有了理论上的可能。3d
为了保证万无一失,不让任何一个见证人由于网络延迟的意外而被跳过,Daniel Larimer 让每一个见证人连续生产 6 个区块,也就是每一个见证人仍是负责 3 秒的区块生产,可是由最初的只生产 1 个变成生产 6 个。最恶劣的状况下,6 个区块中,最后一个或两个有可能由于网络延迟或其余意外被下一个见证人略过,但 6 个区块中的前几个会有足够的时间传递给下一个见证人。视频
再来讨论 BFT-DPoS 的交易确认时间问题:每一个区块生产后当即进行全网广播,区块生产者一边等待 0.5 秒生产下一个区块,同时会接收其余见证人对于上一个区块的确认结果。新区块的生产和旧区块确认的接收同时进行。大部分的状况下,交易会在 1 秒以内确认(不可逆)。这其中包括了 0.5 秒的区块生产,和要求其余见证人确认的时间。blog
EOS 系统规定,一旦区块达到不可逆状态(2/3见证人确认),就没法在此以前进行分叉,保证了交易的永久可信。另外,即便多数见证人想分叉区块链,也只能以相同的速度(0.5秒)与主链竞争,就算主链只剩下一个见证人,分叉链也永远不会追上主链,保证了系统的稳定。开发
Daniel Larimer 称 EOS 新的 BFT-DPoS 共识机制还在开发中,会在系统上线前完成开发,让咱们拭目以待。get
圆方圆学院聚集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。