了解 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為拜贊庭錯誤節點:
-
當節點發現leader作惡時,通過演算法選舉其他的replica為leader,
-
leader通過pre-prepare 訊息把它選擇的 value廣播給其他replica節點,其他的replica節點如果接受則發送 prepare,如果失敗則不發送,
-
一旦2f個節點接受prepare訊息,則節點發送commit訊息,
-
當2f+1個節點接受commit訊息后,代表該value值被確定

優點
-
系統運轉可以脫離幣的存在,pbft演算法共識各節點由業務的參與方或者監管方組成,安全性與穩定性由業務相關方保證,
-
共識的時延大約在2~5秒鐘,基本達到商用實時處理的要求
-
共識效率高,可滿足高頻交易量的需求
-
適用于聯盟鏈/許可鏈,應用于區塊鏈的話,不會出現分叉情況
缺點
-
可擴展性差,通訊的復雜度是節點的平方,很難支持大規模網路節點,參與共識的節點數達到100個已經是極限,共識時間約6秒(采用Tendemint共識的Cosmos的資料)
-
不能直接用于公鏈,因為公鏈的節點數量很多,無法達成這種巨大的通信量,需要配合其它共識先選出共識節點
-
應用于聯盟鏈需要知道參與共識節點的數量和他們對應的公鑰
-
收集不到足夠的票數,網路將停止出塊
確定性型別
概率確定性 是指基于鏈的協議提供的確定性型別(例如,位元幣的中本聰共識),其中包含該交易的區塊越深地進入該鏈,則該交易將不被還原的可能性越大,區塊越深,包含該區塊的分支越可能是最長的鏈,這就是為什么我們建議等到一筆交易進入位元幣區塊鏈深6塊之后(大約需要一個小時),然后再進行該交易,以確保該交易被還原的可能性很小,
絕對確定性 是指基于PBFT的協議(例如Tendermint)提供的確定性型別,其中一旦將交易包含在區塊中并添加到區塊鏈中,便立即將其視為最終完成,在這種情況下,由一個leader提議一個區塊,并且必須經過大部分驗證者的批準該區塊才能最終添加到鏈上,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/236653.html
標籤:區塊鏈
上一篇:江卓爾:這個世界已多出貨幣自由(位元幣)和合同自由(以太坊)
下一篇:《The swirlds hashgraph consensus algorithm: Fair, fast, byzantine fault tolerance》Hashgraph論文的學習
