1. 程式人生 > >談談EOS的出塊時間,不可逆時間,BFT

談談EOS的出塊時間,不可逆時間,BFT

  • EOS出塊時間

    我們知道,新生產節點必須基於上一個區塊生產新區塊,因此新生產節點必須在指定的時候內接收到上一個區塊的內容,否則只能跳過(只能基於上上一個區塊生產)。如果出塊時間太短,新節點很大可能接收不到上一個區塊的內容,進而頻繁出現跳塊。只要有跳塊,系統就會出現臨時分叉,儘管EOS的DPOS的定時出塊和最長鏈共識讓系統很大可能最終達成共識,但是也會造成更多缺塊,進而降低了有效單位出塊數量,得不償失。

    因而一個合適的出塊時間就顯的很重要了,比如STEAM, BTXS的出塊時間就設定為3S。那憑啥EOS能將出塊時間設定為0.5S呢?因為EOS做了如下改進:

    

   1)1個生產節點連續出12個塊

        1個生產節點內的12個塊不存在接收等待問題,是0等待,肯定也不存在跳塊問題。比如生產區塊2時,肯定能拿到區塊1的資料

    2)21個生產節點的出塊順序是固定的,且直連

         當A個節點完成12個區塊時,系統會切換生產者,新的生產者B就需要通過網路接收上一個生產者的區塊。由於A的區塊是生產一個就廣播一個,12區塊傳播到生產者B的可用時間最短, 由於網路時延和擁堵問題,B不一定能接收A的12區塊。因此為了減少跳塊,必須降低A->B的時延。由於STEEM,BTSX中,生產節點是隨機排序的,A->B的時延是不確定的,可能A在美國,B在中國,美國和中國的來回傳播就可能需要600ms, 同時A和B可能沒有直連還需要中間節點跳轉才能傳播,時延就更久了,因而需要設定一個比較大的出塊時間,最後測試除錯下來,STEEM和BTXS就設定了一個比較合理的3S經驗值。EOS為了減少相鄰兩個節點的時延,按照節點之間的時延安排出塊順序,即時延小的安排在鄰近,比如A安排為香港,B為中國就比A是美國,B為中國好太多。同時,由於這21個節點的資訊是透明的,這21個節點可以直連,進一步降低傳播時延。有了這兩個改進後,0.5s變為可能了。當然這種固定出塊順序的確定性也帶來了不安全因素,比如攻擊者可以準確預估每個出塊節點,就可以更容易發起攻擊行為。

然後我們來看下節點地域和實際出塊順序:

    中國的節點沒有將伺服器部署在中國大陸的,要麼在香港要麼在日本,新加坡,甚至美國。

    還有,仔細的網友可能可以看出,目前的實際出塊順序其實滿足按字母排序,但是同時時延排序也接近滿足。這和BM最初提的完全根據時延安排出塊順序有一些差異,這可能因為節點直連,同時沒有中國大陸節點,時延已經可以滿足了,同時幾乎固定的節點,其他優化的方式會很多。(多謝網友Angelia提供資訊)        

  • EOS區塊不可逆時間

    EOS中,21個生產節點輪流出塊。一個區塊是通過後續節點基於該區塊的生產行為來間接確認的,為了實現BFT級別的不可逆,自然需要得到2/3+1的節點確認。由於每個節點生產12個區塊,所以需要12*(2/3*21+1)=12*15=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分鐘。

個人能力有限,本文的分析可能有不足或者錯誤的地方,歡迎大家告知

------------------------------------------------

如果你喜歡我的文章,請關注

如果你對EOS,ETH技術及開發感興趣,請關注本公眾號,一起探索區塊鏈未來

有任何疑問或者遇到EOS,ETH的任何問題,請新增本人的微訊號