區塊鏈知識系列 - PBFT 共識

眾合網1143561141發表於2020-12-19

瞭解 BFT

拜占庭容錯(Byzantine Fault Tolerance), 是演算法的屬性

共識協議要解決的核心問題是在網路中有節點作惡時如何能夠達成共識。
要解決這個困難,首先需要了解“拜占庭將軍問題”。 1982 年, Leslie Lamport、Robert Shostak 和 Marshall Pease 發表論文《拜占庭將軍問題》 [23] ,提出一項思維實驗:假設一組將軍分別統領拜占庭軍隊的一部分,共同圍困一座城市。這些將軍只能透過信使將自己的策略相互傳遞。但是,這組將軍中有一人或多人可能已經叛變,並試圖傳遞錯誤資訊以破壞作戰計劃。該實驗的問題就在於,這支軍隊最多允許存在多少名叛變的將軍,使得作戰仍然可以順利完成?數字貨幣執行機制可類比於拜占庭將軍問題場景。在分散式賬本中,各參與者節點可近似看作將軍。此問題即轉化為,分散式系統可容許多少作惡節點,使得交易仍可正常進行,且不損害整體系統的可靠性?  Lamport 本人已經給出了達到拜占庭容錯的架構 [24] ,但演算法複雜,難以投入應用。此後,Miguel Castro 和 Barbara Liskov於 1999 年提出實用拜占庭容錯演算法(PBFT) [25] ,此係統能夠提供高效能的運算,可以每秒處理成千的請求。

  • 兩輪2/3投票: pre-prepare, prepare, commit
  • 具有1/3的容錯性,防止雙花攻擊問題,吞吐量高,穩定性較強

瞭解 PBFT

實用拜占庭容錯(Practical Byzantine Fault Tolerance), 是演算法

演算法經過三個階段達成一致性

  • Pre-prepare:負責執行區塊,產生簽名包,並將簽名包廣播給所有共識節點;

  • Prepare:負責收集簽名包,某節點收集滿2*f+1的簽名包後,表明自身達到可以提交區塊的狀態,開始廣播Commit包;

  • Commit:負責收集Commit包,某節點收集滿2*f+1的Commit包後,直接將本地快取的最新區塊提交到資料庫。

假設節點總數為3f+1,f為拜贊庭錯誤節點:

  1. 當節點發現leader作惡時,透過演算法選舉其他的replica為leader。

  2. leader透過pre-prepare 訊息把它選擇的 value廣播給其他replica節點,其他的replica節點如果接受則傳送 prepare,如果失敗則不傳送。

  3. 一旦2f個節點接受prepare訊息,則節點傳送commit訊息。

  4. 當2f+1個節點接受commit訊息後,代表該value值被確定

優點

  • 系統運轉可以脫離幣的存在,pbft演算法共識各節點由業務的參與方或者監管方組成,安全性與穩定性由業務相關方保證。

  • 共識的時延大約在2~5秒鐘,基本達到商用實時處理的要求

  • 共識效率高,可滿足高頻交易量的需求

  • 適用於聯盟鏈/許可鏈,應用於區塊鏈的話,不會出現分叉情況

缺點

  • 可擴充套件性差,通訊的複雜度是節點的平方,很難支援大規模網路節點,參與共識的節點數達到100個已經是極限,共識時間約6秒(採用Tendemint共識的Cosmos的資料)

  • 不能直接用於公鏈,因為公鏈的節點數量很多,無法達成這種巨大的通訊量,需要配合其它共識先選出共識節點

  • 應用於聯盟鏈需要知道參與共識節點的數量和他們對應的公鑰

  • 收集不到足夠的票數,網路將停止出塊

確定性型別

機率確定性 是指基於鏈的協議提供的確定性型別(例如,比特幣的中本聰共識),其中包含該交易的區塊越深地進入該鏈,則該交易將不被還原的可能性越大。區塊越深,包含該區塊的分支越可能是最長的鏈。這就是為什麼我們建議等到一筆交易進入比特幣區塊鏈深6塊之後(大約需要一個小時),然後再進行該交易,以確保該交易被還原的可能性很小。

絕對確定性 是指基於PBFT的協議(例如Tendermint)提供的確定性型別,其中一旦將交易包含在區塊中並新增到區塊鏈中,便立即將其視為最終完成。在這種情況下,由一個leader提議一個區塊,並且必須經過大部分驗證者的批准該區塊才能最終新增到鏈上。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979681/viewspace-2743638/,如需轉載,請註明出處,否則將追究法律責任。

相關文章