共識算法
區塊鏈中最重要的便是共識算法,比特幣使用的是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
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。