共識機(jī)制堪稱區(qū)塊鏈的核心归露。我們知道定铜,EOS、Hyperledger以及Stellar等著名的項(xiàng)目哄芜,都采用了BFT(拜占庭容錯(cuò))共識機(jī)制柬唯,那么,BFT到底是什么鬼锄奢?和其它共識機(jī)制相比,又有什么優(yōu)勢和特點(diǎn)呢涂屁?
1灰伟、什么是共識機(jī)制?
所謂共識機(jī)制栏账,就是區(qū)塊鏈中的節(jié)點(diǎn),其中包括誠實(shí)節(jié)點(diǎn)和惡意的節(jié)點(diǎn)盟萨,就如何寫入一個(gè)區(qū)塊達(dá)成共識了讨。
我們以最熟悉的比特幣為例,因?yàn)橛斜忍貛诺莫?jiǎng)勵(lì)胞谭,所以礦工們都會(huì)爭奪每十分鐘一次的記賬權(quán)男杈。公平起見,比特幣采用了PoW(工作量)證明的共識機(jī)制,也就是通過增加算力來增加獲得記賬權(quán)的概率彩库。
PoW的容錯(cuò)性是50%先蒋,也就是說只要超過一半的節(jié)點(diǎn)是誠實(shí)的,就可以保證區(qū)塊鏈數(shù)據(jù)的有效性竞漾。不過,PoW存在出塊慢业岁、吞吐量小鳞仙、耗電大的局限笔时,因此PoS、BFT等共識機(jī)制也在不斷被廣泛應(yīng)用借笙。
2右犹、BFT的原理
下面姚垃,我們先回到中世紀(jì)的西方世界。想象一下掂墓,強(qiáng)大的拜占庭帝國的幾支部隊(duì)在一個(gè)敵人的城市之外扎營看成,每支部隊(duì)都由自己的將軍指揮,將軍只能通過信使互相溝通川慌。在觀察敵人后,他們必須決定共同的行動(dòng)計(jì)劃梦重。然而,其中一些將軍可能是叛徒降瞳,試圖阻止忠誠的將軍達(dá)成協(xié)議蚓胸。將軍必須決定何時(shí)攻擊這座城市除师,但他們需要大部分軍隊(duì)同時(shí)進(jìn)行攻擊才有勝算扔枫。
為了取得戰(zhàn)斗的勝利,將軍們必須有一個(gè)算法來保證:
(a)所有忠誠的將軍采取同一行動(dòng)計(jì)劃瞄桨;
(b)少數(shù)叛徒不能使忠誠的將軍采取不良計(jì)劃讶踪。
忠誠的將軍們都會(huì)按照算法所說的去做,但叛徒可以做任何他們想做的事情乳讥。無論叛徒做什么,算法都必須保證上述條件(a)唉工。忠誠的將軍不僅應(yīng)該達(dá)成協(xié)議汹忠,而且應(yīng)該就合理的計(jì)劃達(dá)成一致。
在此我們將這個(gè)寓言放到區(qū)塊鏈中:故事中的“將軍”是參與運(yùn)行區(qū)塊鏈(數(shù)據(jù)庫)分布式網(wǎng)絡(luò)的各方谣膳,他們來回進(jìn)行通訊的信使就是通過網(wǎng)絡(luò)進(jìn)行通信的方式铅乡。 “忠誠將軍”的集體目標(biāo)是攻占敵軍----寫入一個(gè)大家公認(rèn)的區(qū)塊記錄。
在我們的寓言中花履,有效的信息將是決定支持攻擊的正確機(jī)會(huì)挚赊。對于忠誠的區(qū)塊鏈參與者而言,他們有興趣確保區(qū)塊鏈(數(shù)據(jù)庫)的完整性咬腕,從而確保只接受正確的信息。另一方面纽帖,叛變的將軍將是任何試圖偽造區(qū)塊鏈(數(shù)據(jù)庫)信息的一方,他們的潛在動(dòng)機(jī)有很多種:可能是試圖花費(fèi)他實(shí)際上并不擁有的數(shù)字貨幣扒吁,或者是不想履行之前已經(jīng)簽署和提交的智能合同中所述義務(wù)等等室囊。
區(qū)塊鏈的力量在于它需要在一個(gè)分布式的網(wǎng)絡(luò)中、其中可能或者肯定有“惡意節(jié)點(diǎn)”----如同拜占庭將軍們所處的境地盼铁,也能達(dá)成正確的共識尝偎。
各種計(jì)算機(jī)科學(xué)家已經(jīng)從寓言中概述了拜占庭將軍問題的一些潛在解決方案,用于在區(qū)塊鏈系統(tǒng)中建立共識的實(shí)用拜占庭容錯(cuò)算法(PBFT)肤寝,是那些潛在的解決方案之一抖僵。簡單地說,PBFT的作用如下:每個(gè)“將軍”維持一個(gè)內(nèi)部狀態(tài)(持續(xù)的特定信息或狀態(tài))义桂,當(dāng)“將軍”接收消息時(shí)世吨,它們將消息與其內(nèi)部狀態(tài)結(jié)合使用呻征,以運(yùn)行計(jì)算或操作。這種計(jì)算反過來告訴這個(gè)“將軍”如何思考有關(guān)信息沐祷。然后攒岛,在達(dá)成關(guān)于新消息的個(gè)人決定之后,這個(gè)“將軍”再與系統(tǒng)中所有其他“將軍”共享該決定灾锯,最后根據(jù)所有將軍提交的全部決定,確定共識決定吵聪。
算法的研究結(jié)果顯示,當(dāng)“叛變將軍”少于將軍總數(shù)的三分之一時(shí)帽蝶,“忠誠將軍”將可以做出正確的決定并達(dá)成一致块攒。
下面我們看這個(gè)例子,一共三個(gè)將軍驹尼,其中一個(gè)是發(fā)令將軍A琅绅、兩個(gè)是普通將軍B和C。當(dāng)A告訴B攻擊而告訴C撤退時(shí)料祠,B和C互相發(fā)送消息澎羞,因?yàn)樗麄z都是忠誠的,都將如實(shí)轉(zhuǎn)發(fā)A的消息顺呕。這樣B和C都不能弄清楚到底誰是叛徒----因?yàn)椴淮_定A是叛徒括饶、或者是否另一個(gè)普通將軍可能偽造了據(jù)稱來自A的信息⊥佳妫可以證明技羔,如果n是將軍總數(shù),而t是其中的叛徒數(shù)量 藤滥,那么只有當(dāng)n> 3t并且通信是同步的時(shí)候拙绊,拜占庭將軍問題才能得到解決泳秀。
3榄攀、結(jié)論
與最傳統(tǒng)的PoW共識機(jī)制相比,PBFT有以下優(yōu)勢:
1磺陡、效率高
PBFT要求所有節(jié)點(diǎn)之間的兩兩通信漠畜,因此這種通信機(jī)制要求節(jié)點(diǎn)數(shù)量不能太多,通常是幾十個(gè)憔狞,在這種模式下瘾敢,節(jié)點(diǎn)達(dá)成一致的速度更快,延時(shí)更低簇抵。
2碟摆、吞吐量高
節(jié)點(diǎn)數(shù)量的控制,使PBFT網(wǎng)絡(luò)不用像大型PoW網(wǎng)絡(luò)那樣典蜕,受限于處理能力最低的節(jié)點(diǎn)愉舔;因此帶來全網(wǎng)吞吐量的大幅提升。
3轩缤、節(jié)能
無須使用工作量證明的耗電模式,因此更加節(jié)能環(huán)保典奉。
所謂有得必有失丧叽,相對而言踊淳,PBFT又有以下劣勢:
1陕靠、可擴(kuò)展性及去中心化程度較弱
由于節(jié)點(diǎn)數(shù)量的限制脱茉,因此可擴(kuò)展性較弱;同時(shí)節(jié)點(diǎn)需要選舉税肪、或者許可榜田,不像PoW節(jié)點(diǎn)那樣可以自由加入,去中心化程度較弱净捅。
2辩块、容錯(cuò)性較低
PoW網(wǎng)絡(luò)的容錯(cuò)性是50%,也就是須防范51%攻擊国章;而PBFT容錯(cuò)性只有三分之一豆村,也就是34%的惡意節(jié)點(diǎn)即可發(fā)起攻擊。
最后再附上目前業(yè)內(nèi)主流的共識算法對比表坏匪。由于行文倉促,其中難免有不完備之處适滓,歡迎留言進(jìn)行探討。若大家感興趣罚屋,后續(xù)還將繼續(xù)推出更深度的分析嗅绸。
祝您國慶假期愉快!
參考文獻(xiàn):
https://blockonomi.com/practical-byzantine-fault-tolerance/
本文首發(fā)于:幣投財(cái)經(jīng)
作者:幣投研究院 李輝
轉(zhuǎn)載請注明出處猛拴。