CBFT共识机制
簡介
CBFT(Concurrent Byzantine Fault Tolerance) 并行拜占庭容錯算法,從是拜占庭容錯算法上發展而來新的共識算法。
CBFT算法有四個階段:block determination、pre-prepare、prepare 和 commit,后三個階段與PBFT算法的三個階段類似。CBFT的一個重要優勢是并發性,每個塊可以與其他塊并發的方式投票及建塊,從而大大的提高共識速度。CBFT另一個重要特點就是可以在提交階段檢測受損節點,可以在最后階段廣播消息來識別叛徒節點。步驟包含:交易級別的確認和投票、建塊、塊驗證、塊確認。
交易級別的確認和投票
所有節點對收到的交易進行hash映射,得到一個交易Hash集合,將交易Hash集合發出給其余所有節點,每個節點對收到的交易Hash集合進行2/3與運算,求得2/3以上節點的交易交集對應的交易Hash集合;對于副本Ni,假設Si是其捕獲中的一組交易。 Ni廣播Hi = {hash(t)| t∈S},并向其他副本sign(Hi,Ni)。這個階段也選擇一個主要的副本Np;
建塊
建塊節點根據這個交易Hash集合得到交易集合進行建塊,將塊提交給其余節點;對于每個接收到的消息(Hi,sign(Hi,Ni)),主副本Np首先使用sign(Hi,Ni)和Ni的公鑰來檢查Hi的一致性。然后,Np計算∩in = 1Hi。交集中的交易被添加到塊B中。然后,Np向其他副本廣播B和sign(B,Np)。
對塊進行驗證
收到塊的節點通過自身的交易Hash集合和塊中的交易集合對比完成驗證,驗證結束后將驗證結果的數字簽名發給其余所有節點;在這個階段,每個副本首先使用sign(B,Np)和Np的公鑰來檢查B的一致性,每個副本投票B。使vote(B,Ni)表示副本Ni對B的投票(vote(B,Ni)是表示同意或拒絕)。之后,Ni將vbi =(vote(B,Ni),sign(vote(B,Ni),Ni))廣播給其他副本。
塊投票
第二輪投票將所有節點收到的所有對該塊的投票簽名后轉發,從而使得每個節點收到所有節點的投票,對投票進行統計得到最終的結果,從而決定是否接納該塊;每個副本已收到所有其他副本的投票。然而,惡意副本可以向不同的副本發送不同的投票。因此,在這個階段,每個副本Nj首先使用sign(vote(B,Ni))和Ni的公鑰來檢查vote(B,Ni)的一致性。然后,Nj向所有其他副本廣播svj = {vb0,vb1,...,vbn}和sign(svj,Nj)。
塊確認
對于每個副本Ni,它接收sv0,sv1,...,svn。對于0≤j≤n,它首先使用sign(svj,Nj)和Nj的公鑰來檢查svj的一致性。然后,計算B的同意的數量。如果同意的數量超過2n / 3,Ni回復agree給調用者。請注意,如果svj中的vbk與svl不同,對于j ≠ l,Nk是惡意副本。
作者:vdes
鏈接:https://www.jianshu.com/p/ff99453fd9a7
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
- 上一篇: PBTF共识机制
- 下一篇: UTXO与账户/余额模型