區塊鏈知識系列 - PBFT 共識
瞭解 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提議一個區塊,並且必須經過大部分驗證者的批准該區塊才能最終新增到鏈上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979681/viewspace-2743638/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 區塊鏈知識系列 - Raft 共識區塊鏈Raft
- 讀懂區塊鏈共識機制 :PoW、PoS、PAXOS、RAFT、PBFT區塊鏈Raft
- 區塊鏈共識機制區塊鏈
- 區塊鏈知識,區塊鏈簡史區塊鏈
- 區塊鏈共識的確定性區塊鏈
- 區塊鏈100講: 區塊鏈共識的確定性區塊鏈
- PBFT共識演算法演算法
- 區塊鏈主流共識演算法區塊鏈演算法
- 區塊鏈知識系列 - DAG的應用場景區塊鏈
- 區塊鏈DAPP的小知識區塊鏈APP
- 區塊鏈錢包科普知識區塊鏈
- 016 | 漫談區塊鏈共識機制區塊鏈
- 區塊鏈共識機制的演進區塊鏈
- 近幾天對區塊鏈中幾種常見的共識機制(PBFT,Raft,PoW,PoS,DPoS,Ripple)區塊鏈Raft
- 區塊鏈入門知識介紹!區塊鏈
- 可用於區塊鏈的共識演算法區塊鏈演算法
- 區塊鏈主流共識演算法彙總區塊鏈演算法
- 共識機制-區塊鏈核心技術之一區塊鏈
- 程式必備區塊鏈基礎知識區塊鏈
- 區塊鏈初識區塊鏈
- 區塊鏈共識機制技術一--POW(工作量證明)共識機制區塊鏈
- 共識問題:區塊鏈如何確認記賬權?區塊鏈
- 區塊鏈中五種常見共識演算法區塊鏈演算法
- 第4章 區塊鏈靈魂:共識演算法區塊鏈演算法
- 區塊鏈中的共識機制分析與對比區塊鏈
- 1.3 初識區塊鏈:區塊鏈分類區塊鏈
- 學習下區塊鏈技術基礎知識區塊鏈
- 解密區塊鏈最強心臟 迅雷鏈共識演算法詳解解密區塊鏈演算法
- 【阿菜讀論文】區塊鏈共識演算法綜述區塊鏈演算法
- 區塊鏈共識之Paxos演算法理解與實戰區塊鏈演算法
- 區塊鏈學習筆記01--區塊鏈常識區塊鏈筆記
- 萬字長文:解讀區塊鏈7類共識演算法區塊鏈演算法
- 區塊鏈通識問題(二)區塊鏈
- 區塊鏈通識問題(四)區塊鏈
- 共識演算法之爭(PBFT,Raft,PoW,PoS,DPoS,Ripple)演算法Raft
- 初識區塊鏈 - 用JS構建你自己的區塊鏈區塊鏈JS
- 區塊鏈型別和共識機制 | 公共、私有和聯盟鏈開發搭建區塊鏈型別
- (二)區塊鏈的共識演算法:PoS 及其 例子 程式碼 實現區塊鏈演算法