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