bft是區塊鏈共識演算法中,需要解決的乙個核心問題。
以位元幣和以太訪為代表的pow,eos為代表的dpos,以及今後以太訪逐漸替換的共識演算法pos,這些都是公鏈演算法,解決的是共識節點眾多情況下的bft;而pbft是在聯盟鏈共識節點較少的情況下bft的一種解決方案。
pbft演算法由於每個副本節點都需要和其他節點進行p2p的共識同步,因此隨著節點的增多,效能會下降的很快,但是在較少節點的情況下可以有不錯的效能,並且分叉的機率很低。pbft主要用於聯盟鏈,但是如果能夠結合類似dpos這樣的節點代表選舉規則的話也可以應用於公鏈,並且可以在乙個不可信的網路裡解決拜占庭容錯問題,tps應該是遠大於pow的。
首先了解一下幾個基本概念:(從區塊鏈的視角)
另外,primary是所有節點輪流做的,每個view上都會選出乙個新的primary。
三階段協議是pbft的核心,參見下圖:
從發起請求到最終收到reply,中間的共識過程需要經過3個階段:
pre-prepare:primary(主節點)收到請求,生成新區塊並廣播;
prepare:所有replica(副節點)收到區塊後,廣播區塊驗證結果,同時等待接收超過2/3的節點的廣播;
commit:收到2/3的節點廣播或者超時後,再次傳送廣播,同時再次等待接收超過2/3的節點的廣播;
第一次等待超過2/3的節點廣播,是為了確認「已經有超過2/3的節點收到區塊了」。但是這只是你自己知道,別人並不知道啊,因此需要再傳送一次廣播,告訴別的節點「我已經確認有超過2/3的節點收到區塊啦」;而第二次等待超過2/3的節點廣播,則是為了確認「已經有超過2/3的節點確認(有超過2/3的節點收到區塊啦)」,此時說明已經達成共識,可以把該區塊寫到鏈上了。
裡面有高低水位、checkpoint的解釋
PBFT演算法簡介
pbft practical byzantine fault tolerance 演算法,是乙個能夠容忍拜占庭錯誤的分布式系統共識演算法。首先這裡需要解釋上面幾個名詞 拜占庭錯誤 所謂拜占庭錯誤,通俗來講,可以理解 為的故意作惡導致的錯誤,相對於普通的宕機錯誤,拜占庭錯誤是一種有目的的作惡行為。之所...
PBFT 拜占庭共識演算法
pbft演算法是根據拜占庭問題演變而來的拜占庭共識演算法。在拜占庭問題被提出後一直有各種共識演算法來解決拜占庭問題,但是無論從執行流程的複雜度還是演算法效率來說,pbft是目前公認效率最好的演算法。該演算法是miguel castro 卡斯楚 和barbara liskov 利斯科夫 在1999年提...
PBFT 拜占庭容錯演算法
根據 practical byzantine fault tolerance and proactive recovery 整理 practical byzantine fault tolerance and proactive recoverym.castro and b.liskov.2002....