簡(jiǎn)介
CBFT(Concurrent Byzantine Fault Tolerance) 并行拜占庭容錯(cuò)算法撩银,從是拜占庭容錯(cuò)算法上發(fā)展而來新的共識(shí)算法抛虫。
CBFT算法有四個(gè)階段:block determination贾漏、pre-prepare岖常、prepare 和 commit顿膨,后三個(gè)階段與PBFT算法的三個(gè)階段類似。CBFT的一個(gè)重要優(yōu)勢(shì)是并發(fā)性敛苇,每個(gè)塊可以與其他塊并發(fā)的方式投票及建塊妆绞,從而大大的提高共識(shí)速度。CBFT另一個(gè)重要特點(diǎn)就是可以在提交階段檢測(cè)受損節(jié)點(diǎn)枫攀,可以在最后階段廣播消息來識(shí)別叛徒節(jié)點(diǎn)摆碉。步驟包含:交易級(jí)別的確認(rèn)和投票、建塊脓豪、塊驗(yàn)證、塊確認(rèn)忌卤。
交易級(jí)別的確認(rèn)和投票
所有節(jié)點(diǎn)對(duì)收到的交易進(jìn)行hash映射扫夜,得到一個(gè)交易Hash集合,將交易Hash集合發(fā)出給其余所有節(jié)點(diǎn)驰徊,每個(gè)節(jié)點(diǎn)對(duì)收到的交易Hash集合進(jìn)行2/3與運(yùn)算笤闯,求得2/3以上節(jié)點(diǎn)的交易交集對(duì)應(yīng)的交易Hash集合;對(duì)于副本Ni棍厂,假設(shè)Si是其捕獲中的一組交易颗味。 Ni廣播Hi = {hash(t)| t∈S},并向其他副本sign(Hi牺弹,Ni)浦马。這個(gè)階段也選擇一個(gè)主要的副本Np时呀;
建塊
建塊節(jié)點(diǎn)根據(jù)這個(gè)交易Hash集合得到交易集合進(jìn)行建塊,將塊提交給其余節(jié)點(diǎn)晶默;對(duì)于每個(gè)接收到的消息(Hi谨娜,sign(Hi,Ni))磺陡,主副本Np首先使用sign(Hi趴梢,Ni)和Ni的公鑰來檢查Hi的一致性。然后币他,Np計(jì)算∩in = 1Hi坞靶。交集中的交易被添加到塊B中。然后蝴悉,Np向其他副本廣播B和sign(B彰阴,Np)。
對(duì)塊進(jìn)行驗(yàn)證
收到塊的節(jié)點(diǎn)通過自身的交易Hash集合和塊中的交易集合對(duì)比完成驗(yàn)證辫封,驗(yàn)證結(jié)束后將驗(yàn)證結(jié)果的數(shù)字簽名發(fā)給其余所有節(jié)點(diǎn)硝枉;在這個(gè)階段,每個(gè)副本首先使用sign(B倦微,Np)和Np的公鑰來檢查B的一致性妻味,每個(gè)副本投票B。使vote(B欣福,Ni)表示副本Ni對(duì)B的投票(vote(B责球,Ni)是表示同意或拒絕)。之后拓劝,Ni將vbi =(vote(B雏逾,Ni),sign(vote(B郑临,Ni)栖博,Ni))廣播給其他副本。
塊投票
第二輪投票將所有節(jié)點(diǎn)收到的所有對(duì)該塊的投票簽名后轉(zhuǎn)發(fā)厢洞,從而使得每個(gè)節(jié)點(diǎn)收到所有節(jié)點(diǎn)的投票仇让,對(duì)投票進(jìn)行統(tǒng)計(jì)得到最終的結(jié)果,從而決定是否接納該塊躺翻;每個(gè)副本已收到所有其他副本的投票丧叽。然而,惡意副本可以向不同的副本發(fā)送不同的投票公你。因此踊淳,在這個(gè)階段,每個(gè)副本Nj首先使用sign(vote(B陕靠,Ni))和Ni的公鑰來檢查vote(B迂尝,Ni)的一致性脱茉。然后,Nj向所有其他副本廣播svj = {vb0雹舀,vb1芦劣,...,vbn}和sign(svj说榆,Nj)虚吟。
塊確認(rèn)
對(duì)于每個(gè)副本Ni,它接收sv0签财,sv1串慰,...,svn唱蒸。對(duì)于0≤j≤n邦鲫,它首先使用sign(svj,Nj)和Nj的公鑰來檢查svj的一致性神汹。然后庆捺,計(jì)算B的同意的數(shù)量。如果同意的數(shù)量超過2n / 3屁魏,Ni回復(fù)agree給調(diào)用者滔以。請(qǐng)注意,如果svj中的vbk與svl不同氓拼,對(duì)于j ≠ l你画,Nk是惡意副本。