拜占庭將軍問題(Byzantine Generals Problem),由Leslie Lamport短曾、Robert Shostak和Marshall Pease寒砖,在其同名論文中提出(1982年)。拜占庭將軍問題現(xiàn)在主要指分布式對(duì)等網(wǎng)絡(luò)節(jié)點(diǎn)間的通信容錯(cuò)問題嫉拐。在分布式網(wǎng)絡(luò)中哩都,不同的計(jì)節(jié)點(diǎn)通過交換信息達(dá)成共識(shí)。但有時(shí)候婉徘,系統(tǒng)中的成員節(jié)點(diǎn)可能出錯(cuò)而發(fā)送錯(cuò)誤的信息漠嵌,用于傳遞信息的通訊網(wǎng)絡(luò)也可能導(dǎo)致信息損壞,也可能存在惡意節(jié)點(diǎn)或被黑客攻破的節(jié)點(diǎn)故意發(fā)送錯(cuò)誤的信息盖呼,從而導(dǎo)致系統(tǒng)無法達(dá)成共識(shí)或者達(dá)成錯(cuò)誤的共識(shí)儒鹿。(參考:BFT Wikipedia)
拜占庭將軍問題提出后,有很多的算法被提出用于解決這個(gè)問題塌计。這類算法統(tǒng)稱拜占庭容錯(cuò)算法(BFT: Byzantine Fault Tolerance)挺身。BFT從上世紀(jì)80年代開始被研究侯谁,目前已經(jīng)是一個(gè)被研究得比較透徹的理論锌仅,具體實(shí)現(xiàn)都已經(jīng)有現(xiàn)成的算法章钾。
BFT算法中最典型的是PBFT(Practical BFT)。PBFT是由Miguel Castro和Barbara Liskov于1999年提出热芹。PBFT算法解決了之前拜占庭容錯(cuò)算法效率不高的問題贱傀,將算法復(fù)雜度由指數(shù)級(jí)降低到多項(xiàng)式級(jí),使得拜占庭容錯(cuò)算法在實(shí)際系統(tǒng)應(yīng)用中變得可行伊脓。PBFT在保證安全性和可用性的前提下府寒,提供了 (n-1)/3 的容錯(cuò)性。(細(xì)節(jié)請(qǐng)參考:PBFT)
PBFT之后报腔,很多進(jìn)一步提升性能或魯棒性的BFT算法先后被提出株搔,例如Zyzzyva、ABsTRACTs纯蛾、Aardvark纤房、RBFT等等。近幾年翻诉,由于區(qū)塊鏈的熱度炮姨,無數(shù)針對(duì)區(qū)塊鏈應(yīng)用場(chǎng)景優(yōu)化過的BFT算法也不斷涌現(xiàn)出來。雖然目前PBFT已經(jīng)不能說是最好的碰煌,或最適合區(qū)塊鏈的BFT算法舒岸。但是PBFT已經(jīng)足夠好了,而且在實(shí)際應(yīng)用中已經(jīng)非常成熟芦圾。
在BFT共識(shí)機(jī)制中蛾派,網(wǎng)絡(luò)中節(jié)點(diǎn)的數(shù)量和身份必須是提前確定好的。BFT共識(shí)機(jī)制無法做到PoW共識(shí)機(jī)制中實(shí)現(xiàn)的任何人都可以隨時(shí)加入挖礦个少。另外碍脏,BFT算法無法應(yīng)用到大量的節(jié)點(diǎn),業(yè)內(nèi)普遍認(rèn)為100個(gè)節(jié)點(diǎn)是BFT算法的上限稍算。所以BFT算法無法直接用于公有鏈典尾,BFT算法適合的場(chǎng)景是私有鏈和聯(lián)盟鏈。業(yè)內(nèi)大名鼎鼎的聯(lián)盟鏈Hyperledger fabric v0.6采用的是PBFT糊探,v1.0又推出PBFT的改進(jìn)版本SBFT钾埂。這里再順便提一句,在可信環(huán)境下共識(shí)算法一般使用傳統(tǒng)的分布式一致算法PAXOS或者RAFT科平。
公有鏈?zhǔn)褂肂FT的一個(gè)例外是NEO褥紫,NEO使用了DBFT(delegated BFT)共識(shí)機(jī)制。DBFT共識(shí)機(jī)制下投票選出7個(gè)共識(shí)節(jié)點(diǎn)瞪慧。這些代理節(jié)點(diǎn)是通過靜態(tài)選出的髓考,并完全由項(xiàng)目方部署。這也是NEO被外界質(zhì)疑過于中心化的原因弃酌。(參考:早期公有鏈明星項(xiàng)目-NEO)
BFT算法和公有鏈合適的結(jié)合點(diǎn)在于基于BFT的PoS共識(shí)算法(BFT based PoS)氨菇±芰叮基于BFT的PoS共識(shí)算法要點(diǎn)有:一,網(wǎng)絡(luò)節(jié)點(diǎn)通過鎖定虛擬資產(chǎn)申請(qǐng)成為區(qū)塊鏈系統(tǒng)的驗(yàn)證者(或礦工)查蓉。系統(tǒng)驗(yàn)證者的數(shù)量是動(dòng)態(tài)變化的乌询。二,系統(tǒng)從當(dāng)前驗(yàn)證者中隨機(jī)選擇一個(gè)人作為區(qū)塊提案人豌研。三妹田,系統(tǒng)驗(yàn)證者對(duì)區(qū)塊提案進(jìn)行投票表決,投票可能要進(jìn)行多輪才能達(dá)成共識(shí)鹃共。每個(gè)人的投票比重與鎖定的虛擬資產(chǎn)成比例鬼佣。
基于BFT的PoS的典型例子是tendermint(Cosmos采用了tendermint作為共識(shí)核心)。