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
圓方圓學院聚集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。