易 黎,盧新宇,湯 鯤,王 恒,龔子怡
(1.武漢郵電科學研究院,湖北武漢 430074;2.南京烽火星空通信發展有限公司,江蘇 南京 210019)
進入21 世紀后,人類已邁入了數字時代,特別是關乎國家、政府、企業和個人的信息安全和數據信任問題,已被提上日程。盡管目前采用的中心化管理數據方式已經趨于成熟并取得一定成果,但仍存在管理成本高、安全性能差、數據不透明等缺點。而區塊鏈技術具有去中心化、公開透明、公眾參與度高和可以追溯等優勢,得到了國家政府、學術界和產業界的高度重視。如中國國家科技部在2022 年科研規劃中專門安排了1.78 億元用于區塊鏈研究,對區塊鏈基礎理論、體系構建、安全管理、實驗平臺和重點示范應用等急需攻克的關鍵領域給予了資助。
2008 年10 月31 日,中本聰在線發表了《Bitcoin:A Peer-to-Peer Electronic Cash System》[1]的論文,構思設計了一種點對點直接交易不需要第三方背書的數字貨幣,其核心內容是引入了工作證明(Proof of Work,PoW)機制。2009 年1 月3 日,其設計的比特幣系統正式上線,中本聰挖掘了第一枚創世區塊,獲得50BTC 的獎勵,這標志著不需要政府或銀行背書的點對點支付數字貨幣系統正式誕生[2]。在隨后的數十年間,以比特幣、以太坊和超級聯盟鏈為代表的區塊鏈技術取得了長足的發展。2015 年,支持圖靈完備的智能合約及開源可編程的智能合約平臺大幅度地擴展了區塊鏈的應用場景[3],其已廣泛應用于貨幣金融、通信網絡、信息安全、物聯網和社會職能管理等多個領域[4-5]。
區塊鏈目前存在的主要問題是通信延遲、吞吐量與實際應用場景要求相差甚遠。如證券公司要求每秒鐘處理的交易達到幾十萬甚至百萬,而超級聯盟鏈Hyperledger Fabric 每秒鐘的吞吐量也只有幾千筆;公有鏈的處理量每秒鐘僅有數筆到幾十筆,如比特幣每秒能最多處理七筆交易量,以太坊處理的上限是40 筆交易[6]。而要想改善并解決區塊鏈吞吐量小、通信延遲、分叉等問題,最終均要回歸到共識算法上。因此,有必要系統性地對區塊鏈共識算法進行歸納總結。
區塊鏈是融合了共識、加密、數計簽名、哈希函數、經濟學獎勵機制等內容,以將數據區塊寫入鏈式賬本,實現去中心化為目的的創新性技術。區塊由塊頭和塊體組成,通過哈希指針銜接形成的一種鏈式數據結構,由于哈希函數具有唯一性、不可逆等特性,所以區塊鏈體現了不可追加、不可篡改、不可刪除和各節點數據備存一致性等特點[7]。區塊中的具體內容如圖1 所示。由圖1 可知,區塊頭由版本號、前區塊哈希值、時間戳、默克爾根、隨機數和目標Hash 等組成,區塊體由二叉默克爾樹組成。由于新上鏈的區塊在區塊頭中保留了上一區塊的特征,如果想改變交易記錄,必須更改其后所有區塊頭部值,這也是區塊鏈不可篡改的另一個原因[8]。

圖1 區塊鏈的單個區塊結構
按照節點參與并達成共識的機制和鏈的開放程度可將區塊鏈分為公有鏈(Public Blockchain)、聯盟鏈(Consortium Blockchain)和私有鏈(Private Blockchain)三種[9]。公有鏈是指所有節點都參與共識過程,都有可能通過驗證將數據上傳到區塊鏈上,交易信息公開透明,其本質是一個分布式賬本,采用工作量證明算法達成共識,完成去中心化。比特幣、以太坊等數字貨幣是其典型代表;聯盟鏈是由有交集的行業或部門組成,它們之間并不信任或信任程度較低,其特點介于公有鏈和私有鏈之間,具有準入資格的信任節點才具有投票、共識和驗證權限,其采用拜占庭容錯機制達成共識,與公有鏈相比可顯著降低能源消耗,具有弱中心化的特點,如超級聯盟鏈Hyperledger Fabric 等;私有鏈是指大型集團公司自建的區塊鏈系統。節點需要授權才能參與投票、記賬,只有注冊、驗證后,才能查看相關數據,主要用于集團內部的財務、稅收、物流、供應和銷售等,其本質是一個中心化的賬本,但與傳統的中心化賬本不同,具有區塊鏈的可追溯、不可篡改等特性,如國外的IBM 公司,國內的阿里、百度等公司均采用私有鏈。區塊鏈不同類型的特征如表1 所示。

表1 不同類型區塊鏈特征對比
由表1 可知,公有鏈采用證明類共識,完全去中心化;聯盟鏈主要采用拜占庭容錯算法,部分去中心化;私有鏈采用非拜占庭容錯算法,完全中心化。
區塊鏈的架構主要包括數據層、網絡層、共識層、激勵層、合約層和應用層。數據層、網絡層為底層,激勵層、合約層和應用層為頂層,共識層為中間核心層[10],區塊鏈分層架構結構如表2 所示。由表2可知,底層主要分裝存儲數據,構成區塊鏈的根基,點對點分布式完成數據的傳輸和驗證;中層完成數據的一致性,通過激勵機制鼓勵誠實節點參與區塊鏈的記賬和交易工作、同時懲罰惡意節點;頂層通過腳本代碼、智能合約等合約層技術推廣到應用。

表2 區塊鏈分層架構結構表
區塊鏈共識算法交易流程一般采用“執行—排序—驗證—上鏈”四步驟法,如圖2 所示。通過提案的提交、執行、節點排序、廣播共識、驗證、上鏈等步驟完成。其可廣泛應用于政務、金融、溯源、存證、版權保護、司法和物聯網等應用場景。

圖2 區塊鏈制作流程圖
共識問題是分布式網絡技術的核心問題之一,也是區塊鏈的靈魂。區塊鏈中每個節點都具有決策權,即整體決策權被分散,各節點通過共識算法達成共識,維護了鏈塊數據的一致性:使不同節點之間達成信任;規定并計算各節點的權益;解決了誰來創建上傳區塊的問題。
1980 年Leslie Lamport 就傳統分布式領域共識相關的問題進行了探索研究,在分布式數據的某個節點,如果不存在故障或錯誤,僅考慮網絡延時,導致系統無響應的情況下,只要使用Paxos、Raft 等支持CFT(Crash Fault Tolerance)的算法即可,通過特定值的對比達成共識[11]。
分布式共識算法的設計原則遵循FLP 不可能原理和CAP 定理。FLP 不可能原理是1985 年Fischer等[12]提出的,在異步網絡通信場景中,分布式系統中只要有一個進程發生故障,任何共識算法都不能保證其完全的準確性。但如果系統在運行過程中沒有進程終止,只要有半數以上的進程正常,那么存在一個部分正確的共識算法能夠保證所有的正常進程可以達成一致。CAP 定理是2000 年Brewer 對一致性(系統中的任何操作都應該是原子或串行的,所有操作都是按照全局排序)、可用性(任何正常節點收到請求命令后,都應該在規定的時間給出回復)、容忍性(當網絡在某一時刻發生分區時,系統仍然能夠滿足一致性和可用性)三者無法在分布式系統同時被滿足,最多只能滿足其中兩個。目前,所有共識算法的設計都遵從這兩個定理。基于上述原理,區塊鏈分布式系統共識算法主要解決:1)存在作惡節點;2)通信發生故障;3)節點發生故障三方面的問題。
廣義的共識算法面對分布式計算機節點,解決節點存在惡意、崩潰、宕機等行為。而區塊鏈中的共識算法,不僅要解決上述問題,確保不同節點之間產生的區塊鏈副本都相同,還要避免出現分叉或者重復交易等問題,從而保證區塊鏈的安全性和正確性。
美國微軟歌德爾獎得主算法科學家Dwork C 等人在1993 年首次提出工作量證明的思路,用于解決垃圾郵件的處理問題,要求郵件發送者通過計算一定難度的數學難題獲得郵件發送的資格,目的是增加郵件發送者的發送成本,減少不必要的垃圾郵件的發送[13]。1999 年,文獻[14]正式提出工作量證明的定義。著名的比特幣就采用PoW 算法,目前已成為主流共識算法之一。其原理是利用哈希函數的單向性,即(F(N))有N→F(N),但幾乎不可能由F(N)反推出N。將其應用到區塊鏈中便是給全網所有節點發布一個目標難度值(D),尋找滿足Hash(Block Date,Nonce)<<D 的隨機數(Nonce)。由此,用戶可以通過窮舉試驗,得到隨機數答案,從而達成工作量證明,如SHA256 函數可以通過窮舉演算得到答案。相反地,其驗算非常簡單,驗算一次就可完成。
中本聰將PoW 共識算法引入到比特幣的設計中,所有節點通過算力競爭獲得記賬權。第一個計算出滿足規則隨機數的節點,將向全網廣播,全網其他節點驗證確認后并儲存,該節點獲得創建區塊的權利和出塊獎勵,比特幣從交易到上鏈過程如圖3所示。其主要步驟為:1)收集比特幣網絡中的交易,并制作成交易單;2)每個節點嘗試,計算隨機數,爭奪創建新區塊的權利(記賬權),最終出塊人在這一過程中產生;3)第一個算出符合要求的隨機數的節點,立刻產生時間戳,并將區塊發布到全網節點驗證;4)當半數以上節點驗證通過,共識達成區塊上鏈。PoW 共識算法通過引入獎勵機制,成功解決了節點共識一致性的問題。

圖3 PoW共識流程圖
PoW 共識算法具有以下特點:①算法邏輯簡單、易于實現;②節點之間點對點直接交換信息達成共識;③節點之間進出自由;④攻擊破壞難度大;⑤完全去中心,缺點是吞吐量太小和能耗太高。以比特幣為例,PoW 共識協議中規定一個區塊的大小為1 MB,10 min 產生一個區塊,其吞吐量為7 TPS,太小的容量不能滿足比特幣發展的需要,擴容迫在眉睫。為此,最直接的方法是增加單個區塊的大小,然而區塊容量過大,必然會增加信息傳輸的時間延遲;如果增加區塊的生成速度,會出現更多的分叉,導致區塊鏈的安全性、穩定性降低,并且算力競爭會造成電力和各種資源的浪費,尋找到隨機哈希值,也并沒有任何實際價值。為此,研究者們采用不同的策略方法對PoW 共識算法的擴容問題進行了創新性的研究。文獻[15]采用異步共識將整個網絡分成不同的片區,即分片。每個獨立的片區獨自達成共識,礦工可以平行維護,挖掘多區域的區塊,從而達到擴容的效果。但分片存在單個片區容易被51%算力攻擊的問題。文獻[16]提出了一種Bitcoin-NG 的擴容方案,Bitcoin-NG 共識算法相對于PoW 共識算法吞吐量增加30~60 倍,出塊時間在10~100 s,且其與比特幣類似,也是基于最長鏈原則。文獻[17]提出的貪婪子樹協議(GHOST,Greedy Heaviest-Observed Sub-Tree protocol)用于解決以太坊中大礦池PoW 算力過度壟斷,小礦池幾乎拿不到出塊獎勵、區塊鏈分叉后能夠快速合并的一種PoW 矯正協議。如圖4 所示主鏈的選擇考慮了分叉支鏈,完全沒有用的孤塊被拋棄,礦工將不會獲得任何獎勵收益,而被后續子塊打包吸納的塊將按一定的算法給予獎勵。GHOST 通過對PoW 算法的改進,解決了鏈分叉中算力浪費和主鏈難以確定的問題,提高了獨立礦工和小礦池挖礦的積極性,減少了時延和算力浪費。

圖4 GHOST主鏈選擇改進PoW算法
博弈對PoW 共識算法中節點共識的達成具有重要的影響,文獻[18]從PoW 共識算法挖礦困境入手,采用納什均衡理論,利用零行列式(Zero determinant)策略對PoW 算法中礦工挖礦策略進行優化,實驗結果顯示,優化后的PoW 算法可以使系統的收益達到最大化。文獻[19]針對PoW 算法分叉問題,構建了一種哈希最小證明算法(Proof of Minimum,PoM),其核心是利用抗碰撞性降低分叉,強混淆性提高去中心化程度,仿真實驗設計了211個礦工,進行了104次PoM 共識,結果顯示沒有出現分叉,只出現了三次空塊,去中心化也得到了大幅度的提升。
綜上,對PoW 共識算法的改進研究較少,主要因為PoW 的設計初衷是通過大量算力、能源和資源的消耗來增加惡意節點參與共識的成本。當前PoW 改進的重點在增加其性能、效率和改善安全性上,資源消耗的本質問題無法有效根除。
PoS 本質上是采用權益證明代替PoW 算力證明,具有最大權益的節點獲得記賬權。權益的量化由幣齡(Coin Age)多少決定,幣齡等于貨幣數量與貨幣持有時間的乘積,幣齡多的節點挖礦難度小,成為出塊節點概率大,獲益及獎勵多。同時,為了自身的利益,權益多的節點會主動維護區塊鏈的安全,讓偽區塊無法上鏈,并對偽區塊出塊者采取懲戒措施。PoS 共識算法如圖5 所示。

圖5 PoS共識流程圖
PoS 算法在點點幣中獲得成功應用,其數學函數計算設計為F(區塊頭/時間戮<目標哈希值×幣齡權重),即幣齡越多,權重就越大,節點為出塊節點的概率也越大。PoS 若要發生攻擊,需要擁有51%以上的權益,其攻擊成本高于全網半數算力,且節點的權益是動態的,當區塊上鏈后其權益減少,這使得PoS 發生51%攻擊幾乎不可能,從而在一定程度上增加了區塊鏈的安全性。PoSpace 是PoS 算法的變形,是利用硬盤儲存空間競爭機制,將節點分為普通節點與校驗節點兩種類型,普通節點參與出塊節點競爭,通過哈希函數生成哈希摘要,這個哈希摘要將用于證明該節點確實存儲了特定的數據。校驗節點對其進行驗證,如果儲存了規定的數據,將對其全網廣播、達成共識,生成新區塊。一般來說,節點存儲空間越大,出塊概率就越大。文獻[20]針對PoS 共識算法區塊生成存在局限性,不能滿足實際場景的需要,融合了Raft 算法選舉主節點,改進了Silkworm 算法,通過智能合約對區塊生成速度進行了定義,即無論有無交易發生,都能保證Silkworm 算法高效生成區塊,實驗證實改進的Silkworm 算法能夠提升PoS 共識算法的性能,保證區塊鏈健壯性和安全性。文獻[21]針對PoS 共識算法存在富者愈富的“馬太效應”問題,引入評估方法,提出了一種基于動態分組的重要性共識優化算法(DPoI)。算法依據節點的活躍度、交易、尋找隨機數的時間和信譽度計算每輪節點的重要性分數值,使用斐波那契數列分組,DPoI 投票機制,選出備選節點,有效地避免了系統停止的問題。
綜上,PoS 算法效率高、能耗低,基本上解決了PoW 節點挖礦資源浪費的問題,所有持幣者都能夠分享到獎勵,不易發生51%攻擊,安全性能得到加強。但是,也導致了“贏者通吃”的結果:該方案初期擁有大量貨幣的礦工會比其他礦工更容易獲得出塊權拿到利息獎勵,從而不斷擴大幣齡優勢,容易形成富者越富的馬太效應。且幣零與持幣時間掛鉤,會導致鼓勵礦工存幣拿利息,不利于流動性,不利于長久發展。
DPoS 共識算法是在PoS 基礎上發展而來的,其共識思路是借鑒了現代企業管理制度“董事會”管理制度,即分布系統中的每個節點將自己持有的股份(持幣數量)作為選票委托授予一個代表,獲得票數最多的前101 節點作為代表性的節點,代表全部節點按照時間順序輪流坐莊進行記賬和驗證,生成新區塊,每個代表性的區塊將會獲得交易費的10%作為報酬。DPoS 共識算法如圖6 所示。與PoS 相比,DPoS 參與的共識節點的數量大幅減少,從而縮短了區塊鏈的出塊時間。

圖6 DPoS共識流程圖
DPoS 共識算法相對于PoS 共識算法,大幅度提高了效率,減少了資源浪費,增加了區塊鏈的安全性;但DPoS 算法仍然存在節點不主動積極、容易產生雙花、腐敗攻擊、權益不均等問題。為此,區塊鏈的研究者對DPoS 共識算法進行了一系列的優化探索。文獻[22]針對DPoS 算法容易被惡意節點攻擊的問題,提出了一種基于節點權重的NW-DPoS(Delegated Proof of Stake based on Node Weight)共識算法,算法以埃歐塔(IOTA)為基礎,統籌考慮節點的歷史行為,具體是指將節點的信息、機制和在線狀態綜合考慮,并給予權重來達成共識,保證了誠實節點的高效出塊、作惡節點的處罰和作惡節點的清除。實驗表明,NW-DPoS 共識算法在雙花攻擊、賄賂攻擊方面優于DPoS。文獻[23]針對DPoS 共識算法存在惡意節點聯合串通投票或權益過渡集中等問題,引入神經網絡自適應學習能力,提升了共識節點的可信度,通過動態博弈信譽獎勵機制,提升了見證人區塊打包的安全性,通過沙普利值均衡了節點之間的收益,優化了DPoS 共識算法節點選舉、見證人出塊順序及權益分配。由50 輪共識結果可知,改進后的算法出塊的穩定性、安全性都得到了大幅度提升。文獻[24]對DPoS 共識算法選舉時間過長、惡意節點難以及時清除等問題,引入股票市場的“熔斷機制”,設置了反對票,對作惡節點直接踢出。為了進一步加快DPoS 共識,給節點設置了信用分數和信用等級,通過探針節點動態調整節點的信用,可及時地對作惡節點進行清除。
拜占庭將軍問題具體到區塊鏈中是指在交易中可能出現網絡擁擠堵塞、設備硬件故障、惡意節點攻擊、網絡節點之間缺乏信任等問題時,在保證活性和安全性的條件下,當惡意節點占比小于51%時,不會改變BFT 共識算法達成一致性。
1982 年Leslie 等對于網絡節點存在故障、錯誤或作惡的問題,首次提出了拜占庭將軍問題。BFT是一種基于消除或避免錯誤節點不超過某一臨界值時,正確節點之間就目標達成共識形成一致,不會因為錯誤節點的存在,影響共識的形成的共識算法。拜占庭容錯算法使用節點之間多頻率的信息交互,容忍一定量的惡意節點、強一致性來完成共識,不需要消耗算力挖礦,從而降低了計算機能源消耗。
BFT 本質上是通過每個節點之間發送信息,對客戶端提案、指令最終達成一致共識的結果。然而,隨著節點的增加,節點之間傳遞交換的信息呈指數級別增長,其復雜度也大幅增加,共識時間過長。另外,其加入退出需要單獨處理,其應用并未落地。1999 年文獻[25]構建了實用拜占庭容錯(Practical Byzantine Fault Tolerant,PBFT)算法,其繼承了BFT的優點,創造性地將算法難度系數由指數級別降低到了多項式級別,容錯能力大幅提升。即如果一個區塊鏈系統中存在F個惡意節點,則系統至少需要3F+1 個節點才能完成共識,節點數為N的區塊鏈的容錯能力為(N-1)/3,只要惡意節點小于1/3 拜占庭節點,通過多次信息交換,誠實的共識信息將得到認可和執行[26],系統的活性及安全性將得到保證,拜占庭容錯算法的應用場景大幅增加。
PBFT 是BFT 共識算法代表性的共識協議,PBFT共識算法流程如圖7 所示。PBFT 共識主要分為預準備、準備和接受三個階段,節點分為主節點和副節點,主節點功能主要是收集數據、排序,并提出提案,副節點驗證提案的正確性,并按照順序將結果摘要組播至全網,各節點接受組網投票結果。PBFT 共識算法相對于BFT 共識算法在數據信息處理、共識時長、吞吐容量方面有了較大的改善,但仍然存在請求節點過多時,主節點容易過載、共識效率下降、主節點無退出機制、系統的可用性及安全性較低等問題。如三階段廣播在點對點分布式傳輸中,已造成傳遞次數劇烈增加,引起網絡擁擠等問題。為此,研究者對其從節點選取機制、引入長鏈制度等多方面進行了改進和優化。

圖7 PBFT共識算法流程
文獻[27]針對PBFT 共識算法主節點選取終身制、通信開銷大等問題,對其共識節點的選取設置了動態加入和退出機制,使網絡節點由靜態轉為動態,同時增加了主節點選組最長鏈過程,保證了主節點的可信度。實驗結果表明,該算法提高了共識速度,減少了時延,提供了F=(N-1)/3 的容錯性,通信開銷比PBFT 算法降低了50%,使分布式通信系統的一致性、安全性和有效性都得到改善。改進后的實用拜占庭容錯(Evolution of Practical Byzantine Fault Tolerance,EPBFT)算法流程如圖8 所示。

圖8 EPBFT算法流程
文獻[28]在PBFT 共識算法的基礎上引入了一種動態加權機制,提出了一種聯盟鏈的加權共識算法(Weighted Byzantine Fault Tolerance,WBFT),算法流程如圖9 所示。算法賦予每個節點一個動態權重,限制惡意或故障節點參與共識過程。

圖9 WBFT算法流程
由圖9 可知,與PBFT 相比較,實驗結果顯示,WBFT 平均吞吐量增加了17.18%,平均時延降低了18.01%,其綜合性能得到了較大的改善,其代表性的產品為Fabric v0.6.0。文獻[29]提出的可擴展拜占庭容錯算法(Scalable Byzantine Fault Tolerance,SBFT)很好地解決了拜占庭算法的吞吐量擴容問題,SBFT算法采用收集器的線性傳輸模式,每個節點將信息直接發送給收集器,收集器直接廣播、驗證,只要惡意節點數小于3F+1,即可達成共識,SBFT 可完成200 個節點的共識。文獻[30]針對PBFT 通信資源浪費、效率低下的情況,提出了一種最短通信時間分組的GBFT 共識算法,算法的核心是設計減少節點之間的傳遞消息數來縮短共識時間。具體步驟是引入節點探針,通過節點探針獲取共識節點的IP 位置,以此構建一個通信時間矩陣,在矩陣中分割多個節點中心,并選取組長,組長采取與信用等級掛鉤的辦法輪換,做到探測節點動態感知新節點的加入和共識的自動達成。文獻[31]基于車輛聯網提出了一種安全高效的分布式共識算法SG(Score Groupingpbft)-PBFT 。設計的分布式結構可以減輕中心服務器的壓力,降低單節點攻擊的風險。SG-PBFT 共識算法改進了傳統的PBFT 共識算法,優化了PBFT 共識過程,并使用評分分組機制,實現了更高的共識效率。實驗結果表明,該算法提高了區塊鏈一致性效率,有效防止單節點攻擊。當共識節點數量達到1 000 個時,算法的共識時間為傳統PBFT 共識算法的27%。
Ripple 是一個基于互聯網的開源支付協議,其提供一種數據正確性優先的支付解決方案,旨在通過使用分布式賬本技術來實現全球貨幣之間的實時結算和轉賬。其共識工作流程如圖10 所示。

圖10 Ripple算法共識流程
共識主要步驟為:1)驗證節點對交易直接驗證后,剔出不合法的交易,合法的交易進入候選集;2)每個驗證節點將自己的候選集作為提案點對點發送給其他驗證節點;3)當交易得到超過50%的票數進入下一步,反之,交易參與下一次共識過程;4)驗證節點將提案發送給其他節點,同時提高所需票數的閾值達到80%;5)將交易寫入本地賬本。共識算法的容錯能力為(N-1)/5,與PoW 相比,其交易確認時間只有數秒鐘,且任何時間都不會產生硬分叉,能夠維護全網的一致性和有效性。缺點是當新節點加入時,共識時間有所延長[32]。
Paxos 算法是著名的算法工程師Lamport 在微軟研究院工作時設計的,是一種基于消息傳遞的一致性算法,用于解決復雜問題中確定值的問題。Paxos算法設計了提議者、決策者、接受者和學習者四種角色,其算法運行流程如圖11 所示[33],共識過程通過三步完成:1)客戶端首先向儲存節點發出提案,儲存節點編制好提案編號、提案價值發送給決策者,當獲得決策者接受時,提案獲得成功,否則返回,等待下一次提案,決策者在這里相當于中間過程,其功能主要用于回復提議者提案;2)當一個提議者收到副本數半數以上的接受者回應,就選取一個值向所有儲存節點的接受者發送接受請求。如果之前接受者有回應值,這個請求的值就是該值,否則由提議者自己決定接收值;3)提議者如果收到半數以上的接受者回應,表示該次請求成功,通知各儲存節點的學習者,反之,返回重新提案。

圖11 Paxos算法共識流程
Paxos 共識算法能夠容忍部分節點信息缺失、延時和亂序等,其容錯能力為2F+1,在網絡存在異常或節點故障小于1/2 時能正常運轉。
Raft 算法相對于Paxos 算法采用許多假設,簡化了共識流程,使得其更容易應用。Raft 算法共識步驟:首先,采用心跳觸發機制選舉領導人,領導人定期向跟隨者發送心跳,跟隨者將自己的任期號遞進一位,將角色變成候選人,然后,向所有跟隨者發出投票請求,當該候選人獲得50%的跟隨者投票時,將成為下一位領導人,領導人將依據客戶端的請求,將日記條目加入到它的日記中復制,當日記被復制到多數服務器時,即認為達成了共識[34]。
Paxos 共識算法是單條日志項復制,進而組合多次決策實現一致,其安全性、活性較好,但其構建系統復雜且難以理解,技術一直未落地使用。Raft 算法對Paxos 共識算法進行了一些限制,要求新的連續日志才能當選領導人,跟隨者日志都是領導人的子集,而Paxos 算法無此要求,改進后的Raft 共識算法更容易。目前Raft 共識算法主要從優化選舉方法、增加跟隨者對數據塊的校驗方法兩個方面進行改進,希望提高選舉成功率和屏蔽或剔除惡意節點。文獻[35]針對Raft 算法領導者選舉過程中投票分裂造成的時延問題,提出了一種基于PoW 高效共識的RPFT 算法,其步驟為先用PoW 共識算法選出副領導節點,然后給每一個節點一個等待時間,依據節點行為調整等待時間,建立時間選舉模型,快速選出高效領導者節點。實驗證實,RPFT 較Raft 算法性能提高了75%,共識效率提高了40%。
文中對目前成熟獲得應用的PoW、PoS、DPoS、PBFT 和Raft 等主流算法從設計思想、吞吐量、時延和優缺點方面進行了對比,結果如表3 所示[16-18,21,25-27,29,32-34,36-38]。基于算力競爭的PoW 算法完全去中心化、抗51%的攻擊,其應用場景主要在公有鏈,如比特幣將PoW 算法發揮的淋漓盡致,但其存在資源消耗大、容量小等問題;PoS 算法采用幣齡權益競爭機制,資源消耗、共識時間都大幅度減少,但容易產生雙花問題;投票類DPoS、BFT 等共識算法,采用節點投票選取代表節點達成共識,中心化程度有所降低,大多呈弱中心化,容錯概率也有所下降,如PBFT 的容錯率只有1/3,但其吞吐量大幅增加,其應用場景主要在公有鏈,也可用于私有鏈;Raft 等非拜占庭算法采用主從日志復制方案,識效率高、一致性好,主要用于聯盟鏈和私有鏈。

表3 共識算法比較
文中在研究區塊鏈結構、組成及架構的基礎上,對目前主流共識算法進行了概括總結,總結了PoW算法、PoS 權益類工作證明算法基本完全去中心化,其規模、安全性得到了很好的擴展,以公有鏈為應用場景;DPoS、DBFT 投票結果類共識算法擴展性好,適應于聯盟鏈;Raft 是推選領導,復制日志的算法,共識一致性好、可擴展性強,適合聯盟鏈、私有鏈。
受制區塊鏈去中心化、安全性及擴展性“三元悖論”的制約,只能弱化一方功能來提升另外兩方面性能,目前開發的多種算法都不能同時解決去中心化、網絡延遲、吞吐量擴容問題。為了解決網絡延遲、吞吐量擴容問題,建議研究者從如下幾個方面進行優化:1)考慮在拜占庭算法引入“征信”、“網格化”增加惡意節點參與共識的成本,通過網格化管理。減少參與共識的節點數,節省底層網絡和通信資源,提升共識算法的效率和安全性;2)將證明類共識與選舉類共識算法進行加成融合,期望融合后的算法性能優于單一算法,如PoW 與PoS 融合,PoW 與DBFT 融合等;3)現有共識算法與機器學習結合,通過有向無環圖選舉、排序和去重,提升區塊鏈共識效率及擴展性;4)研究并鏈、串鏈相關的技術,提升共識算法的擴展性、通用性等。