EOS代碼分析1 理解EOS共識機制BFT-DPoS

EOS 最新的白皮書中已經將共識機制從 DPoS 升級爲了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,帶有拜占庭容錯的委託股權證明)。

傳統 DPoS
EOS 項目剛剛發佈的時候的共識機制是 DPoS(Deligated Proof of Stake,委託股權證明),類似於 Bitshares 和 Steem,這種共識機制採用隨機的見證人出塊順序,出塊速度爲 3 秒,交易不可逆需要45秒。爲什麼需要 45 秒呢?因爲 DPoS 下,見證人生產一個新區塊,才表示他對之前的整條區塊鏈進行了確認,表明這個見證人認可目前的整條鏈。而一個交易要達到不可逆狀態,需要 2/3 以上的見證人確認,在 EOS 裏就是 14 個見證人。我們假設一個交易被包含在 1000 號區塊中,需要其他13個見證人輪流出塊至 1013 號區塊,這樣才能“收集”到14個見證人對此交易的確認(包括生產1000區塊的見證人)。2/3 以上的見證人確認的交易,就是不可逆的交易了,這就是 45 秒確認時間的由來。

BFT的全稱是Byzantine fault tolerance,即拜占庭容錯。是解決拜占庭將軍問題中,當存在叛徒時,叛徒用盡了各種手段來破壞時,將軍們仍然能夠達成達成共識。所以叫拜占庭容錯,容錯的意思就是容納節點出現錯誤(或者叛徒),網絡仍然能達成一致的行動,正常運作。
在新的機制下,每個見證人出塊時依然全網廣播,其他見證人收到新區塊後,立即對此區塊進行驗證,並將驗證簽名完成的區塊立即返回出塊見證人,不需等待其他見證人自己出塊時再確認。從當前的出塊見證人看來,他生產了一個區塊,並全網廣播,然後陸續收到了其他見證人對此區塊的確認,在收到 2/3 見證人確認的瞬間,區塊(包括其中的交易)就不可逆了。交易確認時間大大縮短,從 45 秒縮短至 3 秒左右(主要爲等待生產區塊的時間)。這種機制可以稱爲初級版的 BFT-DPoS 共識機制。

BFT-DPoS
爲了挖掘 EOS 系統的性能,Daniel Larimer 在以上基礎上又進行了修改。首先,他將出塊速度由 3 秒 縮短至 0.5 秒,理論上這樣可以極大提升系統性能,但帶來了網絡延遲問題:0.5 秒的確認時間會導致下一個出塊者還沒有收到上一個出塊者的區塊,就該生產下一個區塊了,那麼下一個出塊者會忽略上一個區塊,導致區塊鏈分叉(相同區塊高度有兩個區塊)。比如:中國見證人後面可能就是美國見證人,中美網絡延遲有時高達 300ms,很有可能到時美國見證人沒有收到中國見證人的區塊時,就該出塊了,那麼中國見證人的區塊就會被略過。
爲解決這個問題,Daniel Larimer 將原先的隨機出塊順序改爲由見證人商議後確定的出塊順序,這樣網絡連接延遲較低的見證人之間就可以相鄰出塊。比如:日本的見證人後面是中國的見證人,再後面是俄羅斯的見證人,再後面是英國的見證人,再後面是美國的見證人。這樣可以大大降低見證人之間的網絡延遲。使得 0.5 秒的出塊速度有了理論上的可能。
爲了保證萬無一失,不讓任何一個見證人因爲網絡延遲的意外而被跳過,Daniel Larimer 讓每個見證人連續生產 6 個區塊,也就是每個見證人還是負責 3 秒的區塊生產,但是由最初的只生產 1 個變成生產 6 個。最惡劣的情況下,6 個區塊中,最後一個或兩個有可能因爲網絡延遲或其他意外被下一個見證人略過,但 6 個區塊中的前幾個會有足夠的時間傳遞給下一個見證人。
再來討論 BFT-DPoS 的交易確認時間問題:每個區塊生產後立即進行全網廣播,區塊生產者一邊等待 0.5 秒生產下一個區塊,同時會接收其他見證人對於上一個區塊的確認結果。新區塊的生產和舊區塊確認的接收同時進行。大部分的情況下,交易會在 1 秒之內確認(不可逆)。這其中包括了 0.5 秒的區塊生產,和要求其他見證人確認的時間。

EOS代碼分析1 理解EOS共識機制BFT-DPoS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章