PBFT(拜占庭容錯)簡述


共識算法

區塊鏈中最重要的便是共識算法,比特幣使用的是POW(Proof of Work,工作量證明),以太幣使用的是POS(Proof of Stake,股權證明)使得算力變的不怎么重要了,而今POS的變體DPOS(Delegated Proof of Stake,股份授權證明)進一步削減算力的浪費,同時也加強了區塊鏈的安全性。
不過,對於不需要貨幣體系的許可鏈或者私有鏈而言,絕對信任的節點,以及高效的需求上述共識算法並不能夠提供,因此對於這樣的區塊鏈,傳統的一致性算法成為首選,PBFT(拜占庭容錯)、PAXOS、RAFT。
 

PBFT(拜占庭容錯)

這是一種基於消息傳遞的一致性算法,算法經過三個階段達成一致性,這些階段可能因為失敗而重復進行。

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

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

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

3、一旦2f個節點接受prepare消息,則節點發送commit消息。

4、當2f+1個節點接受commit消息后,代表該value值被確定

如下圖表示了4個節點,0為leader,同時節點3為fault節點,該節點不響應和發出任何消息。最終節點狀態達到commited時,表示該輪共識成功達成。

 
其中C為發送請求端,0123為服務端,3為宕機的服務端,具體步驟如下:
1. Request:請求端C發送請求到任意一節點,這里是0
2. Pre-Prepare:服務端0收到C的請求后進行廣播,擴散至123
3. Prepare:123,收到后記錄並再次廣播,1->023,2->013,3因為宕機無法廣播
4. Commit:0123節點在Prepare階段,若收到超過一定數量的相同請求,則進入Commit階段,廣播Commit請求
5.Reply:0123節點在Commit階段,若收到超過一定數量的相同請求,則對C進行反饋
 
根據上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決,N為總計算機數,F為有問題的計算機總數
 
N=4 F=0 時:
  得到數據 最終數據
A 1 1 1 1 1
B 1 1 1 1 1
C 1 1 1 1 1
D 1 1 1 1 1
N=4 F=1 時:
  得到數據 最終數據
A 1 1 1 0 1
B 1 1 0 1 1
C 1 0 1 1 1
D 0 1 1 1 1

N=4 F=2 時:
  得到數據 最終數據
A 1 1 0 0 NA
B 1 0 0 1 NA
C 0 0 1 1 NA
D 0 1 1 0 NA
由此可以看出,拜占庭容錯能夠容納將近1/3的錯誤節點誤差,IBM創建的Hyperledger就是使用了該算法作為共識算法。

優點:上述共識算法都脫離不了幣的存在,系統的正常運轉必須有幣的獎勵機制,系統的安全性實際上是由系統幣的持有者維護保證。當我們區塊鏈系統實際運用到商業應用時,由其承載的資產價值可能遠遠超出系統發行的幣的價值,如果由幣的持有者保證系統的安全及穩定性將是不可靠的 。

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

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

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

應用:央行的數字貨幣、布萌區塊鏈。


作者:JoannaD
鏈接:https://www.zhihu.com/question/55794026/answer/146667857
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM