共識機制堪稱區塊鏈的核心。我們知道,EOS、Hyperledger以及Stellar等著名的項目,都采用了BFT(拜占庭容錯)共識機制,那么,BFT到底是什么鬼?和其它共識機制相比,又有什么優勢和特點呢?
1、什么是共識機制?
所謂共識機制,就是區塊鏈中的節點,其中包括誠實節點和惡意的節點,就如何寫入一個區塊達成共識。
我們以最熟悉的比特幣為例,因為有比特幣的獎勵,所以礦工們都會爭奪每十分鍾一次的記賬權。公平起見,比特幣采用了PoW(工作量)證明的共識機制,也就是通過增加算力來增加獲得記賬權的概率。
PoW的容錯性是50%,也就是說只要超過一半的節點是誠實的,就可以保證區塊鏈數據的有效性。不過,PoW存在出塊慢、吞吐量小、耗電大的局限,因此PoS、BFT等共識機制也在不斷被廣泛應用。
2、BFT的原理
下面,我們先回到中世紀的西方世界。想象一下,強大的拜占庭帝國的幾支部隊在一個敵人的城市之外扎營,每支部隊都由自己的將軍指揮,將軍只能通過信使互相溝通。在觀察敵人后,他們必須決定共同的行動計划。然而,其中一些將軍可能是叛徒,試圖阻止忠誠的將軍達成協議。將軍必須決定何時攻擊這座城市,但他們需要大部分軍隊同時進行攻擊才有勝算。
協同進攻方能取勝,不協同進攻將會失敗
為了取得戰斗的勝利,將軍們必須有一個算法來保證:
(a)所有忠誠的將軍采取同一行動計划;
(b)少數叛徒不能使忠誠的將軍采取不良計划。
忠誠的將軍們都會按照算法所說的去做,但叛徒可以做任何他們想做的事情。無論叛徒做什么,算法都必須保證上述條件(a)。忠誠的將軍不僅應該達成協議,而且應該就合理的計划達成一致。
在此我們將這個寓言放到區塊鏈中:故事中的“將軍”是參與運行區塊鏈(數據庫)分布式網絡的各方,他們來回進行通訊的信使就是通過網絡進行通信的方式。 “忠誠將軍”的集體目標是攻占敵軍----寫入一個大家公認的區塊記錄。
在我們的寓言中,有效的信息將是決定支持攻擊的正確機會。對於忠誠的區塊鏈參與者而言,他們有興趣確保區塊鏈(數據庫)的完整性,從而確保只接受正確的信息。另一方面,叛變的將軍將是任何試圖偽造區塊鏈(數據庫)信息的一方,他們的潛在動機有很多種:可能是試圖花費他實際上並不擁有的數字貨幣,或者是不想履行之前已經簽署和提交的智能合同中所述義務等等。
區塊鏈的力量在於它需要在一個分布式的網絡中、其中可能或者肯定有“惡意節點”----如同拜占庭將軍們所處的境地,也能達成正確的共識。
各種計算機科學家已經從寓言中概述了拜占庭將軍問題的一些潛在解決方案,用於在區塊鏈系統中建立共識的實用拜占庭容錯算法(PBFT),是那些潛在的解決方案之一。簡單地說,PBFT的作用如下:每個“將軍”維持一個內部狀態(持續的特定信息或狀態),當“將軍”接收消息時,它們將消息與其內部狀態結合使用,以運行計算或操作。這種計算反過來告訴這個“將軍”如何思考有關信息。然后,在達成關於新消息的個人決定之后,這個“將軍”再與系統中所有其他“將軍”共享該決定,最后根據所有將軍提交的全部決定,確定共識決定。
算法的研究結果顯示,當“叛變將軍”少於將軍總數的三分之一時,“忠誠將軍”將可以做出正確的決定並達成一致。
下面我們看這個例子,一共三個將軍,其中一個是發令將軍A、兩個是普通將軍B和C。當A告訴B攻擊而告訴C撤退時,B和C互相發送消息,因為他倆都是忠誠的,都將如實轉發A的消息。這樣B和C都不能弄清楚到底誰是叛徒----因為不確定A是叛徒、或者是否另一個普通將軍可能偽造了據稱來自A的信息。可以證明,如果n是將軍總數,而t是其中的叛徒數量 ,那么只有當n> 3t並且通信是同步的時候,拜占庭將軍問題才能得到解決。
3、結論
與最傳統的PoW共識機制相比,PBFT有以下優勢:
1、效率高
PBFT要求所有節點之間的兩兩通信,因此這種通信機制要求節點數量不能太多,通常是幾十個,在這種模式下,節點達成一致的速度更快,延時更低。
2、吞吐量高
節點數量的控制,使PBFT網絡不用像大型PoW網絡那樣,受限於處理能力最低的節點;因此帶來全網吞吐量的大幅提升。
3、節能
無須使用工作量證明的耗電模式,因此更加節能環保。
所謂有得必有失,相對而言,PBFT又有以下劣勢:
1、可擴展性及去中心化程度較弱
由於節點數量的限制,因此可擴展性較弱;同時節點需要選舉、或者許可,不像PoW節點那樣可以自由加入,去中心化程度較弱。
2、容錯性較低
PoW網絡的容錯性是50%,也就是須防范51%攻擊;而PBFT容錯性只有三分之一,也就是34%的惡意節點即可發起攻擊。
