郝文濤 魯燁


關鍵詞 區塊鏈 共識機制 去中心化
1引言
區塊鏈概念首次出現在中本聰[1] 發表的論文中。作為一種按時間順序鏈接形成的特殊的分布式數據庫系統,區塊鏈利用P2P 網絡技術、加密算法、共識機制等實現了完全去中心化的特性,解決了中心化模式性能差、效率低等問題。區塊鏈作為一種按時間順序序列化存儲數據的數據結構[2] ,可支持多類共識機制。目前,雖然出現了多類共識機制,但每一類共識機制都不完美。如何在一個節點互不信任的分布式系統中達成有效共識,是區塊鏈共識機制研究的重點。因此,設計一種能夠滿足特定場景的共識機制,是區塊鏈技術的研究方向之一。
文章主要討論了PoW、PoS 等幾類共識機制,并從去中心化程度、安全性等多角度對共識機制進行分析和總結,最后對共識機制的發展進行了展望,明確了未來區塊鏈共識機制的設計方向和具體思路,旨在促進區塊鏈技術的發展。
2區塊鏈共識機制
2.1Pow 共識機制
PoW(Proof of Work)[3] 工作量證明機制是比特幣系統所采用的共識機制之一。其原理是節點通過自身算力來爭取交易的記賬權,將產生的區塊添加到主鏈之中,系統中交易的合法性由整個網絡合力驗證,只有6 個甚至更多節點驗證通過之后,才能認同某筆交易。然而,在該機制下,敵手會盜用誠實節點的身份,發起女巫攻擊(Sybil attack)。交易發起方偽造多個身份,隨后對自己的交易進行確認,這樣同時造成了雙重支付(Double Spending)[4] 的安全風險。
比特幣系統使用工作量證明機制來防止安全攻擊。在區塊交易確認之前,節點需要計算一個密碼學難題,尋找一個使區塊頭哈希值小于或等于難度目標的隨機數(nonce),通過多次計算嘗試不同的隨機數,當節點找的隨機數與難度目標值匹配時,通過全網進行廣播,其他節點則會驗證該隨機數,驗證通過之后,將該筆交易添加到區塊中。
在比特幣系統中,難度目標值即隨機數(nonce)每經過2016 個區塊后會進行調整,使出塊的平均速度保持在每10 分鐘一個。因此,每兩周(2016 ?10min)難度目標會進行一次更新,新難度值T 的計算公式為:
其中,Tprev 是舊難度目標,tactual 是最近產生的2016 個區塊的實際花費時間。難度值越小,尋找到滿足條件的隨機數就越困難。
工作量證明機制保障了比特幣系統的安全運行,為拜占庭將軍問題提供了一種解法。該算法保證節點之間無需交換額外的信息即可達成共識,破壞系統需要投入極大的成本。但是,在解決難題的過程中造成了巨大的資源浪費;交易效率低;區塊確認時間長達一個小時,導致不適用于敏感型交易;在比特幣交易的驗證過程中容易導致區塊鏈分叉。
2.2PoS 共識機制
2012 年,Sunny King 發布的點點幣中首次采用了PoS(Proof of Stake,權益證明)共識機制[5] 實現挖礦,其核心思路是采用權益證明來代替算力證明,即由系統中具有最高權益的節點獲得區塊記賬權[6] 。
PoS 共識機制不需要消耗過度的算力,并且其共識過程能夠在一定程度上縮短達成共識的時間。PoS共識機制使用了股份權益的虛擬綠色資源,從而降低了資源消耗;采用了清空幣齡方法,解決了算力集中的缺陷;鼓勵眾多的節點聯網在線進行挖礦,保障了P2P 網絡的健壯性和安全性。
不過,低成本的挖礦過程使得PoS 共識機制存在安全風險。權益過于集中在持幣數量龐大的節點手中,一旦區塊鏈發生安全攻擊,受到嚴重損害的便是擁有大量貨幣的節點,然而這些持有大量貨幣的節點又在一定程度上保證了PoS 算法的安全性。同時,PoS 共識機制中一筆交易的驗證需要等待更多節點確認,這也提高了出現分叉的可能性。目前,PoS 算法的安全性和容錯性還未得到嚴格的理論證明,這是其應用受限的一個主要原因。
2.3DPoS 共識機制
Daniel Larimer 于2014 年4 月提出了一種新的共識算法DPoS(Delegated Proof of Stake,股份授權證明)[7] 。DPoS 共識機制解決了PoW 共識機制中算力集中、電力耗費過大等問題,同時也解決了PoS 共識機制中幣齡累積的安全問題,進一步加快了交易速度。DPoS 是一種基于投票選舉的共識算法,在節點達成共識的過程中不需要消耗算力,也不用解決數學難題,而是由股東節點授權一定數量的委托人節點,由受托節點來保證整個系統正常運行。
在DPoS 共識機制的運作下,參與記賬權競爭的節點數量減少,驗證區塊合法性的速度明顯加快,縮短了共識的周期。同時,DPoS 會將一部分獎勵分配給系統維護節點和投票者,作為系統維護的獎勵,以降低節點聚集的風險。但是,DPoS 共識機制也存一定的缺陷,即數量固定而且獲取益少的授權節點會做出迎合股東節點的行為以及損害普通用戶利益的共謀行為。目前,DPoS 是比特股、Crypti 平臺內置的共識機制。
2.4PBFT 共識機制
PBFT(Practical Byzantine Fault Tolerance,實用拜占庭容錯)[8] 共識機制將算法復雜度由指數級降低到多項式級,使得拜占庭容錯算法在實際系統應用中變得可行,解決了原始拜占庭容錯算法效率不高的問題。
PBFT 是一種狀態機副本復制算法,其將服務作為狀態機進行建模;狀態機在分布式系統的不同節點之間進行副本復制;所有的副本在一個視圖輪換的過程中進行操作;主節點通過視圖編號以及節點數集合來確定;每個狀態機的副本都保存了服務的狀態,同時也實現了服務的操作。
PBFT 共識機制需要運行三類基本協議,即一致性協議、檢查點協議和視圖更換協議,以此保證節點行動一致,共同維護一個狀態。PBFT 一致性協議包含以下幾個階段:客戶端請求(request)、主節點序號分配(pre?prepare)、節點交互(prepare)、節點序號確認(commit)和響應(reply)等階段,具體見圖1。gzslib202204022211假設PBFT 容忍的惡意節點數為f,節點總數為3f+1。(1)當節點發現主節點作惡時,通過算法選舉其他的候選節點為主節點;(2)主節點通過序號分配消息把它選擇的節點廣播給其他候選節點,其他候選節點如果接受則發送交互信息,如果接受失敗則不發送交互信息;(3)一旦2f 個節點接受交互消息,則節點發送確認消息;(4)當2f+1 個節點接受確認消息后,代表該節點被確定。
由于PBFT 共識算法的靈活性較差,一般適合用于對強一致性有要求的區塊鏈場景,如聯盟鏈和私有鏈場景。
2.5Ripple:瑞波共識
Ripple 聯盟鏈[9] 項目中提出并實現了RPCA 共識算法。RPCA 引入了一個新的概念:獨立節點列表(Unique Node List,UNL)。節點相信該列表的節點不會聯合起來作惡,不需要相信該列表的每一個節點。
每個節點維護自己的UNL,各個節點的UNL 相互獨立。共識過程如下:(1)共識開始之前,每個節點接受所有的交易,放到本地的“交易候選集”;(2)每個節點各自維護UNL 列表中的“交易候選集”,并將其合并到本地,然后以UNL 為單位對每筆交易進行投票;(3)當UNL 中超過一定數量的節點都認為某筆交易正確的時候,這筆交易進入第4 步。若交易沒有達到要求要么被丟棄,要么繼續被留在“交易候選集”中等待下一輪共識開始后重新被投票;(4)共識過程的最后一步,對于第3 步中通過的交易,如果在UNL 中超過80%的節點都認為該筆交易正確,則這筆交易滿足共識要求。所有滿足這一要求的交易被添加進賬本。
RPCA 共識算法能夠容忍不超過20%數量的拜占庭錯誤節點,即可保證區塊鏈系統的可用性。
2.6Raft 算法
作為一種傳統的一致性算法,Raft[10] 算法可以對分布式系統中的日志進行管理。Raft 將一致性算法分為三個部分,即領導選取、日志復制和安全性。
(1)領導選舉:當前領導節點突發故障時,節點集群會選舉出新的領導節點。
(2)日志復制:領導節點接收客戶端的請求,并且將其復制到集群中的其他節點,強制要求其他節點和自己保持數據一致。
(3)安全性:如果集群中某個節點在自己的狀態機中應用了一條特定的日志,那么集群中其他節點不能應用同一條日志。
在Raft 算法開始執行時,首先在節點集群中選舉出負責日志復制的管理領導節點,領導節點處理來自客戶端的日志,同時將日志復制分發給集群中的其他節點,并提醒其他節點提交日志。領導節點主要日志同步和其他節點的通信,如果領導節點出現突發故障(如宕機),節點集群中其他節點會發起選舉,選出新的領導節點。
3共識機制的比較和評價標準
本文從去中心化程度、容錯能力等多個維度對上述共識機制進行了分析與比較,總結了共識機制所存在的問題,并給出了評價標準(表1)。
問題包括:(1)資源消耗高。在PoW 共識機制中,挖礦造成了巨大的算力浪費;(2)算力和權益過于集中。在比特幣系統中,礦池壟斷了巨大的算力資源,破壞了區塊鏈系統的平衡,違背了區塊鏈去中心化的本質特征;(3)數據一致性弱。當分布式系統中惡意節點的算力超過全網一半的算力時,這些惡意節點就有可能聯合起來對系統強行分叉,使得數據一致性減弱。
共識機制解決了區塊鏈在分布式場景下達成一致性的問題。基于上述分析,可以從去中心化、資源消耗、容錯能力、安全性、一致性、可用性、分區容忍性七個方面來評估共識算法。
4總結與展望
區塊鏈因其完全去中心化、匿名可溯源等特性,成為構建可信數字經濟的重要基礎設施。近年來,共識機制作為區塊鏈核心技術得到廣泛關注。現有的共識機制研究雖然取得了一定成果,但仍存在不足。在此基礎上如何因地制宜,設計出適用于不同區塊鏈技術應用場景的共識機制,是未來研究的主要方向。(1)如何降低區塊生成的成本,避免資源的過度浪費是當前研究的熱點,可以嘗試將PoW 與其他共識機制結合起來;(2)比特幣系統中交易的驗證存在嚴重的延遲,如何減少區塊驗證的時間,是將來研究的重點;(3)設計合理的獎懲機制,可以促進區塊鏈網絡中節點的公平性,從而進一步加強完全去中心化的本質特征。