易 黎,盧新宇,湯 鯤,王 恒,龔子怡
(1.武漢郵電科學(xué)研究院,湖北武漢 430074;2.南京烽火星空通信發(fā)展有限公司,江蘇 南京 210019)
進(jìn)入21 世紀(jì)后,人類已邁入了數(shù)字時(shí)代,特別是關(guān)乎國(guó)家、政府、企業(yè)和個(gè)人的信息安全和數(shù)據(jù)信任問(wèn)題,已被提上日程。盡管目前采用的中心化管理數(shù)據(jù)方式已經(jīng)趨于成熟并取得一定成果,但仍存在管理成本高、安全性能差、數(shù)據(jù)不透明等缺點(diǎn)。而區(qū)塊鏈技術(shù)具有去中心化、公開(kāi)透明、公眾參與度高和可以追溯等優(yōu)勢(shì),得到了國(guó)家政府、學(xué)術(shù)界和產(chǎn)業(yè)界的高度重視。如中國(guó)國(guó)家科技部在2022 年科研規(guī)劃中專門安排了1.78 億元用于區(qū)塊鏈研究,對(duì)區(qū)塊鏈基礎(chǔ)理論、體系構(gòu)建、安全管理、實(shí)驗(yàn)平臺(tái)和重點(diǎn)示范應(yīng)用等急需攻克的關(guān)鍵領(lǐng)域給予了資助。
2008 年10 月31 日,中本聰在線發(fā)表了《Bitcoin:A Peer-to-Peer Electronic Cash System》[1]的論文,構(gòu)思設(shè)計(jì)了一種點(diǎn)對(duì)點(diǎn)直接交易不需要第三方背書(shū)的數(shù)字貨幣,其核心內(nèi)容是引入了工作證明(Proof of Work,PoW)機(jī)制。2009 年1 月3 日,其設(shè)計(jì)的比特幣系統(tǒng)正式上線,中本聰挖掘了第一枚創(chuàng)世區(qū)塊,獲得50BTC 的獎(jiǎng)勵(lì),這標(biāo)志著不需要政府或銀行背書(shū)的點(diǎn)對(duì)點(diǎn)支付數(shù)字貨幣系統(tǒng)正式誕生[2]。在隨后的數(shù)十年間,以比特幣、以太坊和超級(jí)聯(lián)盟鏈為代表的區(qū)塊鏈技術(shù)取得了長(zhǎng)足的發(fā)展。2015 年,支持圖靈完備的智能合約及開(kāi)源可編程的智能合約平臺(tái)大幅度地?cái)U(kuò)展了區(qū)塊鏈的應(yīng)用場(chǎng)景[3],其已廣泛應(yīng)用于貨幣金融、通信網(wǎng)絡(luò)、信息安全、物聯(lián)網(wǎng)和社會(huì)職能管理等多個(gè)領(lǐng)域[4-5]。
區(qū)塊鏈目前存在的主要問(wèn)題是通信延遲、吞吐量與實(shí)際應(yīng)用場(chǎng)景要求相差甚遠(yuǎn)。如證券公司要求每秒鐘處理的交易達(dá)到幾十萬(wàn)甚至百萬(wàn),而超級(jí)聯(lián)盟鏈Hyperledger Fabric 每秒鐘的吞吐量也只有幾千筆;公有鏈的處理量每秒鐘僅有數(shù)筆到幾十筆,如比特幣每秒能最多處理七筆交易量,以太坊處理的上限是40 筆交易[6]。而要想改善并解決區(qū)塊鏈吞吐量小、通信延遲、分叉等問(wèn)題,最終均要回歸到共識(shí)算法上。因此,有必要系統(tǒng)性地對(duì)區(qū)塊鏈共識(shí)算法進(jìn)行歸納總結(jié)。
區(qū)塊鏈?zhǔn)侨诤狭斯沧R(shí)、加密、數(shù)計(jì)簽名、哈希函數(shù)、經(jīng)濟(jì)學(xué)獎(jiǎng)勵(lì)機(jī)制等內(nèi)容,以將數(shù)據(jù)區(qū)塊寫(xiě)入鏈?zhǔn)劫~本,實(shí)現(xiàn)去中心化為目的的創(chuàng)新性技術(shù)。區(qū)塊由塊頭和塊體組成,通過(guò)哈希指針銜接形成的一種鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),由于哈希函數(shù)具有唯一性、不可逆等特性,所以區(qū)塊鏈體現(xiàn)了不可追加、不可篡改、不可刪除和各節(jié)點(diǎn)數(shù)據(jù)備存一致性等特點(diǎn)[7]。區(qū)塊中的具體內(nèi)容如圖1 所示。由圖1 可知,區(qū)塊頭由版本號(hào)、前區(qū)塊哈希值、時(shí)間戳、默克爾根、隨機(jī)數(shù)和目標(biāo)Hash 等組成,區(qū)塊體由二叉默克爾樹(shù)組成。由于新上鏈的區(qū)塊在區(qū)塊頭中保留了上一區(qū)塊的特征,如果想改變交易記錄,必須更改其后所有區(qū)塊頭部值,這也是區(qū)塊鏈不可篡改的另一個(gè)原因[8]。
圖1 區(qū)塊鏈的單個(gè)區(qū)塊結(jié)構(gòu)
按照節(jié)點(diǎn)參與并達(dá)成共識(shí)的機(jī)制和鏈的開(kāi)放程度可將區(qū)塊鏈分為公有鏈(Public Blockchain)、聯(lián)盟鏈(Consortium Blockchain)和私有鏈(Private Blockchain)三種[9]。公有鏈?zhǔn)侵杆泄?jié)點(diǎn)都參與共識(shí)過(guò)程,都有可能通過(guò)驗(yàn)證將數(shù)據(jù)上傳到區(qū)塊鏈上,交易信息公開(kāi)透明,其本質(zhì)是一個(gè)分布式賬本,采用工作量證明算法達(dá)成共識(shí),完成去中心化。比特幣、以太坊等數(shù)字貨幣是其典型代表;聯(lián)盟鏈?zhǔn)怯捎薪患男袠I(yè)或部門組成,它們之間并不信任或信任程度較低,其特點(diǎn)介于公有鏈和私有鏈之間,具有準(zhǔn)入資格的信任節(jié)點(diǎn)才具有投票、共識(shí)和驗(yàn)證權(quán)限,其采用拜占庭容錯(cuò)機(jī)制達(dá)成共識(shí),與公有鏈相比可顯著降低能源消耗,具有弱中心化的特點(diǎn),如超級(jí)聯(lián)盟鏈Hyperledger Fabric 等;私有鏈?zhǔn)侵复笮图瘓F(tuán)公司自建的區(qū)塊鏈系統(tǒng)。節(jié)點(diǎn)需要授權(quán)才能參與投票、記賬,只有注冊(cè)、驗(yàn)證后,才能查看相關(guān)數(shù)據(jù),主要用于集團(tuán)內(nèi)部的財(cái)務(wù)、稅收、物流、供應(yīng)和銷售等,其本質(zhì)是一個(gè)中心化的賬本,但與傳統(tǒng)的中心化賬本不同,具有區(qū)塊鏈的可追溯、不可篡改等特性,如國(guó)外的IBM 公司,國(guó)內(nèi)的阿里、百度等公司均采用私有鏈。區(qū)塊鏈不同類型的特征如表1 所示。
表1 不同類型區(qū)塊鏈特征對(duì)比
由表1 可知,公有鏈采用證明類共識(shí),完全去中心化;聯(lián)盟鏈主要采用拜占庭容錯(cuò)算法,部分去中心化;私有鏈采用非拜占庭容錯(cuò)算法,完全中心化。
區(qū)塊鏈的架構(gòu)主要包括數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層、合約層和應(yīng)用層。數(shù)據(jù)層、網(wǎng)絡(luò)層為底層,激勵(lì)層、合約層和應(yīng)用層為頂層,共識(shí)層為中間核心層[10],區(qū)塊鏈分層架構(gòu)結(jié)構(gòu)如表2 所示。由表2可知,底層主要分裝存儲(chǔ)數(shù)據(jù),構(gòu)成區(qū)塊鏈的根基,點(diǎn)對(duì)點(diǎn)分布式完成數(shù)據(jù)的傳輸和驗(yàn)證;中層完成數(shù)據(jù)的一致性,通過(guò)激勵(lì)機(jī)制鼓勵(lì)誠(chéng)實(shí)節(jié)點(diǎn)參與區(qū)塊鏈的記賬和交易工作、同時(shí)懲罰惡意節(jié)點(diǎn);頂層通過(guò)腳本代碼、智能合約等合約層技術(shù)推廣到應(yīng)用。
表2 區(qū)塊鏈分層架構(gòu)結(jié)構(gòu)表
區(qū)塊鏈共識(shí)算法交易流程一般采用“執(zhí)行—排序—驗(yàn)證—上鏈”四步驟法,如圖2 所示。通過(guò)提案的提交、執(zhí)行、節(jié)點(diǎn)排序、廣播共識(shí)、驗(yàn)證、上鏈等步驟完成。其可廣泛應(yīng)用于政務(wù)、金融、溯源、存證、版權(quán)保護(hù)、司法和物聯(lián)網(wǎng)等應(yīng)用場(chǎng)景。
圖2 區(qū)塊鏈制作流程圖
共識(shí)問(wèn)題是分布式網(wǎng)絡(luò)技術(shù)的核心問(wèn)題之一,也是區(qū)塊鏈的靈魂。區(qū)塊鏈中每個(gè)節(jié)點(diǎn)都具有決策權(quán),即整體決策權(quán)被分散,各節(jié)點(diǎn)通過(guò)共識(shí)算法達(dá)成共識(shí),維護(hù)了鏈塊數(shù)據(jù)的一致性:使不同節(jié)點(diǎn)之間達(dá)成信任;規(guī)定并計(jì)算各節(jié)點(diǎn)的權(quán)益;解決了誰(shuí)來(lái)創(chuàng)建上傳區(qū)塊的問(wèn)題。
1980 年Leslie Lamport 就傳統(tǒng)分布式領(lǐng)域共識(shí)相關(guān)的問(wèn)題進(jìn)行了探索研究,在分布式數(shù)據(jù)的某個(gè)節(jié)點(diǎn),如果不存在故障或錯(cuò)誤,僅考慮網(wǎng)絡(luò)延時(shí),導(dǎo)致系統(tǒng)無(wú)響應(yīng)的情況下,只要使用Paxos、Raft 等支持CFT(Crash Fault Tolerance)的算法即可,通過(guò)特定值的對(duì)比達(dá)成共識(shí)[11]。
分布式共識(shí)算法的設(shè)計(jì)原則遵循FLP 不可能原理和CAP 定理。FLP 不可能原理是1985 年Fischer等[12]提出的,在異步網(wǎng)絡(luò)通信場(chǎng)景中,分布式系統(tǒng)中只要有一個(gè)進(jìn)程發(fā)生故障,任何共識(shí)算法都不能保證其完全的準(zhǔn)確性。但如果系統(tǒng)在運(yùn)行過(guò)程中沒(méi)有進(jìn)程終止,只要有半數(shù)以上的進(jìn)程正常,那么存在一個(gè)部分正確的共識(shí)算法能夠保證所有的正常進(jìn)程可以達(dá)成一致。CAP 定理是2000 年Brewer 對(duì)一致性(系統(tǒng)中的任何操作都應(yīng)該是原子或串行的,所有操作都是按照全局排序)、可用性(任何正常節(jié)點(diǎn)收到請(qǐng)求命令后,都應(yīng)該在規(guī)定的時(shí)間給出回復(fù))、容忍性(當(dāng)網(wǎng)絡(luò)在某一時(shí)刻發(fā)生分區(qū)時(shí),系統(tǒng)仍然能夠滿足一致性和可用性)三者無(wú)法在分布式系統(tǒng)同時(shí)被滿足,最多只能滿足其中兩個(gè)。目前,所有共識(shí)算法的設(shè)計(jì)都遵從這兩個(gè)定理。基于上述原理,區(qū)塊鏈分布式系統(tǒng)共識(shí)算法主要解決:1)存在作惡節(jié)點(diǎn);2)通信發(fā)生故障;3)節(jié)點(diǎn)發(fā)生故障三方面的問(wèn)題。
廣義的共識(shí)算法面對(duì)分布式計(jì)算機(jī)節(jié)點(diǎn),解決節(jié)點(diǎn)存在惡意、崩潰、宕機(jī)等行為。而區(qū)塊鏈中的共識(shí)算法,不僅要解決上述問(wèn)題,確保不同節(jié)點(diǎn)之間產(chǎn)生的區(qū)塊鏈副本都相同,還要避免出現(xiàn)分叉或者重復(fù)交易等問(wèn)題,從而保證區(qū)塊鏈的安全性和正確性。
美國(guó)微軟歌德?tīng)柂?jiǎng)得主算法科學(xué)家Dwork C 等人在1993 年首次提出工作量證明的思路,用于解決垃圾郵件的處理問(wèn)題,要求郵件發(fā)送者通過(guò)計(jì)算一定難度的數(shù)學(xué)難題獲得郵件發(fā)送的資格,目的是增加郵件發(fā)送者的發(fā)送成本,減少不必要的垃圾郵件的發(fā)送[13]。1999 年,文獻(xiàn)[14]正式提出工作量證明的定義。著名的比特幣就采用PoW 算法,目前已成為主流共識(shí)算法之一。其原理是利用哈希函數(shù)的單向性,即(F(N))有N→F(N),但幾乎不可能由F(N)反推出N。將其應(yīng)用到區(qū)塊鏈中便是給全網(wǎng)所有節(jié)點(diǎn)發(fā)布一個(gè)目標(biāo)難度值(D),尋找滿足Hash(Block Date,Nonce)<<D 的隨機(jī)數(shù)(Nonce)。由此,用戶可以通過(guò)窮舉試驗(yàn),得到隨機(jī)數(shù)答案,從而達(dá)成工作量證明,如SHA256 函數(shù)可以通過(guò)窮舉演算得到答案。相反地,其驗(yàn)算非常簡(jiǎn)單,驗(yàn)算一次就可完成。
中本聰將PoW 共識(shí)算法引入到比特幣的設(shè)計(jì)中,所有節(jié)點(diǎn)通過(guò)算力競(jìng)爭(zhēng)獲得記賬權(quán)。第一個(gè)計(jì)算出滿足規(guī)則隨機(jī)數(shù)的節(jié)點(diǎn),將向全網(wǎng)廣播,全網(wǎng)其他節(jié)點(diǎn)驗(yàn)證確認(rèn)后并儲(chǔ)存,該節(jié)點(diǎn)獲得創(chuàng)建區(qū)塊的權(quán)利和出塊獎(jiǎng)勵(lì),比特幣從交易到上鏈過(guò)程如圖3所示。其主要步驟為:1)收集比特幣網(wǎng)絡(luò)中的交易,并制作成交易單;2)每個(gè)節(jié)點(diǎn)嘗試,計(jì)算隨機(jī)數(shù),爭(zhēng)奪創(chuàng)建新區(qū)塊的權(quán)利(記賬權(quán)),最終出塊人在這一過(guò)程中產(chǎn)生;3)第一個(gè)算出符合要求的隨機(jī)數(shù)的節(jié)點(diǎn),立刻產(chǎn)生時(shí)間戳,并將區(qū)塊發(fā)布到全網(wǎng)節(jié)點(diǎn)驗(yàn)證;4)當(dāng)半數(shù)以上節(jié)點(diǎn)驗(yàn)證通過(guò),共識(shí)達(dá)成區(qū)塊上鏈。PoW 共識(shí)算法通過(guò)引入獎(jiǎng)勵(lì)機(jī)制,成功解決了節(jié)點(diǎn)共識(shí)一致性的問(wèn)題。
圖3 PoW共識(shí)流程圖
PoW 共識(shí)算法具有以下特點(diǎn):①算法邏輯簡(jiǎn)單、易于實(shí)現(xiàn);②節(jié)點(diǎn)之間點(diǎn)對(duì)點(diǎn)直接交換信息達(dá)成共識(shí);③節(jié)點(diǎn)之間進(jìn)出自由;④攻擊破壞難度大;⑤完全去中心,缺點(diǎn)是吞吐量太小和能耗太高。以比特幣為例,PoW 共識(shí)協(xié)議中規(guī)定一個(gè)區(qū)塊的大小為1 MB,10 min 產(chǎn)生一個(gè)區(qū)塊,其吞吐量為7 TPS,太小的容量不能滿足比特幣發(fā)展的需要,擴(kuò)容迫在眉睫。為此,最直接的方法是增加單個(gè)區(qū)塊的大小,然而區(qū)塊容量過(guò)大,必然會(huì)增加信息傳輸?shù)臅r(shí)間延遲;如果增加區(qū)塊的生成速度,會(huì)出現(xiàn)更多的分叉,導(dǎo)致區(qū)塊鏈的安全性、穩(wěn)定性降低,并且算力競(jìng)爭(zhēng)會(huì)造成電力和各種資源的浪費(fèi),尋找到隨機(jī)哈希值,也并沒(méi)有任何實(shí)際價(jià)值。為此,研究者們采用不同的策略方法對(duì)PoW 共識(shí)算法的擴(kuò)容問(wèn)題進(jìn)行了創(chuàng)新性的研究。文獻(xiàn)[15]采用異步共識(shí)將整個(gè)網(wǎng)絡(luò)分成不同的片區(qū),即分片。每個(gè)獨(dú)立的片區(qū)獨(dú)自達(dá)成共識(shí),礦工可以平行維護(hù),挖掘多區(qū)域的區(qū)塊,從而達(dá)到擴(kuò)容的效果。但分片存在單個(gè)片區(qū)容易被51%算力攻擊的問(wèn)題。文獻(xiàn)[16]提出了一種Bitcoin-NG 的擴(kuò)容方案,Bitcoin-NG 共識(shí)算法相對(duì)于PoW 共識(shí)算法吞吐量增加30~60 倍,出塊時(shí)間在10~100 s,且其與比特幣類似,也是基于最長(zhǎng)鏈原則。文獻(xiàn)[17]提出的貪婪子樹(shù)協(xié)議(GHOST,Greedy Heaviest-Observed Sub-Tree protocol)用于解決以太坊中大礦池PoW 算力過(guò)度壟斷,小礦池幾乎拿不到出塊獎(jiǎng)勵(lì)、區(qū)塊鏈分叉后能夠快速合并的一種PoW 矯正協(xié)議。如圖4 所示主鏈的選擇考慮了分叉支鏈,完全沒(méi)有用的孤塊被拋棄,礦工將不會(huì)獲得任何獎(jiǎng)勵(lì)收益,而被后續(xù)子塊打包吸納的塊將按一定的算法給予獎(jiǎng)勵(lì)。GHOST 通過(guò)對(duì)PoW 算法的改進(jìn),解決了鏈分叉中算力浪費(fèi)和主鏈難以確定的問(wèn)題,提高了獨(dú)立礦工和小礦池挖礦的積極性,減少了時(shí)延和算力浪費(fèi)。
圖4 GHOST主鏈選擇改進(jìn)PoW算法
博弈對(duì)PoW 共識(shí)算法中節(jié)點(diǎn)共識(shí)的達(dá)成具有重要的影響,文獻(xiàn)[18]從PoW 共識(shí)算法挖礦困境入手,采用納什均衡理論,利用零行列式(Zero determinant)策略對(duì)PoW 算法中礦工挖礦策略進(jìn)行優(yōu)化,實(shí)驗(yàn)結(jié)果顯示,優(yōu)化后的PoW 算法可以使系統(tǒng)的收益達(dá)到最大化。文獻(xiàn)[19]針對(duì)PoW 算法分叉問(wèn)題,構(gòu)建了一種哈希最小證明算法(Proof of Minimum,PoM),其核心是利用抗碰撞性降低分叉,強(qiáng)混淆性提高去中心化程度,仿真實(shí)驗(yàn)設(shè)計(jì)了211個(gè)礦工,進(jìn)行了104次PoM 共識(shí),結(jié)果顯示沒(méi)有出現(xiàn)分叉,只出現(xiàn)了三次空塊,去中心化也得到了大幅度的提升。
綜上,對(duì)PoW 共識(shí)算法的改進(jìn)研究較少,主要因?yàn)镻oW 的設(shè)計(jì)初衷是通過(guò)大量算力、能源和資源的消耗來(lái)增加惡意節(jié)點(diǎn)參與共識(shí)的成本。當(dāng)前PoW 改進(jìn)的重點(diǎn)在增加其性能、效率和改善安全性上,資源消耗的本質(zhì)問(wèn)題無(wú)法有效根除。
PoS 本質(zhì)上是采用權(quán)益證明代替PoW 算力證明,具有最大權(quán)益的節(jié)點(diǎn)獲得記賬權(quán)。權(quán)益的量化由幣齡(Coin Age)多少?zèng)Q定,幣齡等于貨幣數(shù)量與貨幣持有時(shí)間的乘積,幣齡多的節(jié)點(diǎn)挖礦難度小,成為出塊節(jié)點(diǎn)概率大,獲益及獎(jiǎng)勵(lì)多。同時(shí),為了自身的利益,權(quán)益多的節(jié)點(diǎn)會(huì)主動(dòng)維護(hù)區(qū)塊鏈的安全,讓偽區(qū)塊無(wú)法上鏈,并對(duì)偽區(qū)塊出塊者采取懲戒措施。PoS 共識(shí)算法如圖5 所示。
圖5 PoS共識(shí)流程圖
PoS 算法在點(diǎn)點(diǎn)幣中獲得成功應(yīng)用,其數(shù)學(xué)函數(shù)計(jì)算設(shè)計(jì)為F(區(qū)塊頭/時(shí)間戮<目標(biāo)哈希值×幣齡權(quán)重),即幣齡越多,權(quán)重就越大,節(jié)點(diǎn)為出塊節(jié)點(diǎn)的概率也越大。PoS 若要發(fā)生攻擊,需要擁有51%以上的權(quán)益,其攻擊成本高于全網(wǎng)半數(shù)算力,且節(jié)點(diǎn)的權(quán)益是動(dòng)態(tài)的,當(dāng)區(qū)塊上鏈后其權(quán)益減少,這使得PoS 發(fā)生51%攻擊幾乎不可能,從而在一定程度上增加了區(qū)塊鏈的安全性。PoSpace 是PoS 算法的變形,是利用硬盤(pán)儲(chǔ)存空間競(jìng)爭(zhēng)機(jī)制,將節(jié)點(diǎn)分為普通節(jié)點(diǎn)與校驗(yàn)節(jié)點(diǎn)兩種類型,普通節(jié)點(diǎn)參與出塊節(jié)點(diǎn)競(jìng)爭(zhēng),通過(guò)哈希函數(shù)生成哈希摘要,這個(gè)哈希摘要將用于證明該節(jié)點(diǎn)確實(shí)存儲(chǔ)了特定的數(shù)據(jù)。校驗(yàn)節(jié)點(diǎn)對(duì)其進(jìn)行驗(yàn)證,如果儲(chǔ)存了規(guī)定的數(shù)據(jù),將對(duì)其全網(wǎng)廣播、達(dá)成共識(shí),生成新區(qū)塊。一般來(lái)說(shuō),節(jié)點(diǎn)存儲(chǔ)空間越大,出塊概率就越大。文獻(xiàn)[20]針對(duì)PoS 共識(shí)算法區(qū)塊生成存在局限性,不能滿足實(shí)際場(chǎng)景的需要,融合了Raft 算法選舉主節(jié)點(diǎn),改進(jìn)了Silkworm 算法,通過(guò)智能合約對(duì)區(qū)塊生成速度進(jìn)行了定義,即無(wú)論有無(wú)交易發(fā)生,都能保證Silkworm 算法高效生成區(qū)塊,實(shí)驗(yàn)證實(shí)改進(jìn)的Silkworm 算法能夠提升PoS 共識(shí)算法的性能,保證區(qū)塊鏈健壯性和安全性。文獻(xiàn)[21]針對(duì)PoS 共識(shí)算法存在富者愈富的“馬太效應(yīng)”問(wèn)題,引入評(píng)估方法,提出了一種基于動(dòng)態(tài)分組的重要性共識(shí)優(yōu)化算法(DPoI)。算法依據(jù)節(jié)點(diǎn)的活躍度、交易、尋找隨機(jī)數(shù)的時(shí)間和信譽(yù)度計(jì)算每輪節(jié)點(diǎn)的重要性分?jǐn)?shù)值,使用斐波那契數(shù)列分組,DPoI 投票機(jī)制,選出備選節(jié)點(diǎn),有效地避免了系統(tǒng)停止的問(wèn)題。
綜上,PoS 算法效率高、能耗低,基本上解決了PoW 節(jié)點(diǎn)挖礦資源浪費(fèi)的問(wèn)題,所有持幣者都能夠分享到獎(jiǎng)勵(lì),不易發(fā)生51%攻擊,安全性能得到加強(qiáng)。但是,也導(dǎo)致了“贏者通吃”的結(jié)果:該方案初期擁有大量貨幣的礦工會(huì)比其他礦工更容易獲得出塊權(quán)拿到利息獎(jiǎng)勵(lì),從而不斷擴(kuò)大幣齡優(yōu)勢(shì),容易形成富者越富的馬太效應(yīng)。且?guī)帕闩c持幣時(shí)間掛鉤,會(huì)導(dǎo)致鼓勵(lì)礦工存幣拿利息,不利于流動(dòng)性,不利于長(zhǎng)久發(fā)展。
DPoS 共識(shí)算法是在PoS 基礎(chǔ)上發(fā)展而來(lái)的,其共識(shí)思路是借鑒了現(xiàn)代企業(yè)管理制度“董事會(huì)”管理制度,即分布系統(tǒng)中的每個(gè)節(jié)點(diǎn)將自己持有的股份(持幣數(shù)量)作為選票委托授予一個(gè)代表,獲得票數(shù)最多的前101 節(jié)點(diǎn)作為代表性的節(jié)點(diǎn),代表全部節(jié)點(diǎn)按照時(shí)間順序輪流坐莊進(jìn)行記賬和驗(yàn)證,生成新區(qū)塊,每個(gè)代表性的區(qū)塊將會(huì)獲得交易費(fèi)的10%作為報(bào)酬。DPoS 共識(shí)算法如圖6 所示。與PoS 相比,DPoS 參與的共識(shí)節(jié)點(diǎn)的數(shù)量大幅減少,從而縮短了區(qū)塊鏈的出塊時(shí)間。
圖6 DPoS共識(shí)流程圖
DPoS 共識(shí)算法相對(duì)于PoS 共識(shí)算法,大幅度提高了效率,減少了資源浪費(fèi),增加了區(qū)塊鏈的安全性;但DPoS 算法仍然存在節(jié)點(diǎn)不主動(dòng)積極、容易產(chǎn)生雙花、腐敗攻擊、權(quán)益不均等問(wèn)題。為此,區(qū)塊鏈的研究者對(duì)DPoS 共識(shí)算法進(jìn)行了一系列的優(yōu)化探索。文獻(xiàn)[22]針對(duì)DPoS 算法容易被惡意節(jié)點(diǎn)攻擊的問(wèn)題,提出了一種基于節(jié)點(diǎn)權(quán)重的NW-DPoS(Delegated Proof of Stake based on Node Weight)共識(shí)算法,算法以埃歐塔(IOTA)為基礎(chǔ),統(tǒng)籌考慮節(jié)點(diǎn)的歷史行為,具體是指將節(jié)點(diǎn)的信息、機(jī)制和在線狀態(tài)綜合考慮,并給予權(quán)重來(lái)達(dá)成共識(shí),保證了誠(chéng)實(shí)節(jié)點(diǎn)的高效出塊、作惡節(jié)點(diǎn)的處罰和作惡節(jié)點(diǎn)的清除。實(shí)驗(yàn)表明,NW-DPoS 共識(shí)算法在雙花攻擊、賄賂攻擊方面優(yōu)于DPoS。文獻(xiàn)[23]針對(duì)DPoS 共識(shí)算法存在惡意節(jié)點(diǎn)聯(lián)合串通投票或權(quán)益過(guò)渡集中等問(wèn)題,引入神經(jīng)網(wǎng)絡(luò)自適應(yīng)學(xué)習(xí)能力,提升了共識(shí)節(jié)點(diǎn)的可信度,通過(guò)動(dòng)態(tài)博弈信譽(yù)獎(jiǎng)勵(lì)機(jī)制,提升了見(jiàn)證人區(qū)塊打包的安全性,通過(guò)沙普利值均衡了節(jié)點(diǎn)之間的收益,優(yōu)化了DPoS 共識(shí)算法節(jié)點(diǎn)選舉、見(jiàn)證人出塊順序及權(quán)益分配。由50 輪共識(shí)結(jié)果可知,改進(jìn)后的算法出塊的穩(wěn)定性、安全性都得到了大幅度提升。文獻(xiàn)[24]對(duì)DPoS 共識(shí)算法選舉時(shí)間過(guò)長(zhǎng)、惡意節(jié)點(diǎn)難以及時(shí)清除等問(wèn)題,引入股票市場(chǎng)的“熔斷機(jī)制”,設(shè)置了反對(duì)票,對(duì)作惡節(jié)點(diǎn)直接踢出。為了進(jìn)一步加快DPoS 共識(shí),給節(jié)點(diǎn)設(shè)置了信用分?jǐn)?shù)和信用等級(jí),通過(guò)探針節(jié)點(diǎn)動(dòng)態(tài)調(diào)整節(jié)點(diǎn)的信用,可及時(shí)地對(duì)作惡節(jié)點(diǎn)進(jìn)行清除。
拜占庭將軍問(wèn)題具體到區(qū)塊鏈中是指在交易中可能出現(xiàn)網(wǎng)絡(luò)擁擠堵塞、設(shè)備硬件故障、惡意節(jié)點(diǎn)攻擊、網(wǎng)絡(luò)節(jié)點(diǎn)之間缺乏信任等問(wèn)題時(shí),在保證活性和安全性的條件下,當(dāng)惡意節(jié)點(diǎn)占比小于51%時(shí),不會(huì)改變BFT 共識(shí)算法達(dá)成一致性。
1982 年Leslie 等對(duì)于網(wǎng)絡(luò)節(jié)點(diǎn)存在故障、錯(cuò)誤或作惡的問(wèn)題,首次提出了拜占庭將軍問(wèn)題。BFT是一種基于消除或避免錯(cuò)誤節(jié)點(diǎn)不超過(guò)某一臨界值時(shí),正確節(jié)點(diǎn)之間就目標(biāo)達(dá)成共識(shí)形成一致,不會(huì)因?yàn)殄e(cuò)誤節(jié)點(diǎn)的存在,影響共識(shí)的形成的共識(shí)算法。拜占庭容錯(cuò)算法使用節(jié)點(diǎn)之間多頻率的信息交互,容忍一定量的惡意節(jié)點(diǎn)、強(qiáng)一致性來(lái)完成共識(shí),不需要消耗算力挖礦,從而降低了計(jì)算機(jī)能源消耗。
BFT 本質(zhì)上是通過(guò)每個(gè)節(jié)點(diǎn)之間發(fā)送信息,對(duì)客戶端提案、指令最終達(dá)成一致共識(shí)的結(jié)果。然而,隨著節(jié)點(diǎn)的增加,節(jié)點(diǎn)之間傳遞交換的信息呈指數(shù)級(jí)別增長(zhǎng),其復(fù)雜度也大幅增加,共識(shí)時(shí)間過(guò)長(zhǎng)。另外,其加入退出需要單獨(dú)處理,其應(yīng)用并未落地。1999 年文獻(xiàn)[25]構(gòu)建了實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerant,PBFT)算法,其繼承了BFT的優(yōu)點(diǎn),創(chuàng)造性地將算法難度系數(shù)由指數(shù)級(jí)別降低到了多項(xiàng)式級(jí)別,容錯(cuò)能力大幅提升。即如果一個(gè)區(qū)塊鏈系統(tǒng)中存在F個(gè)惡意節(jié)點(diǎn),則系統(tǒng)至少需要3F+1 個(gè)節(jié)點(diǎn)才能完成共識(shí),節(jié)點(diǎn)數(shù)為N的區(qū)塊鏈的容錯(cuò)能力為(N-1)/3,只要惡意節(jié)點(diǎn)小于1/3 拜占庭節(jié)點(diǎn),通過(guò)多次信息交換,誠(chéng)實(shí)的共識(shí)信息將得到認(rèn)可和執(zhí)行[26],系統(tǒng)的活性及安全性將得到保證,拜占庭容錯(cuò)算法的應(yīng)用場(chǎng)景大幅增加。
PBFT 是BFT 共識(shí)算法代表性的共識(shí)協(xié)議,PBFT共識(shí)算法流程如圖7 所示。PBFT 共識(shí)主要分為預(yù)準(zhǔn)備、準(zhǔn)備和接受三個(gè)階段,節(jié)點(diǎn)分為主節(jié)點(diǎn)和副節(jié)點(diǎn),主節(jié)點(diǎn)功能主要是收集數(shù)據(jù)、排序,并提出提案,副節(jié)點(diǎn)驗(yàn)證提案的正確性,并按照順序?qū)⒔Y(jié)果摘要組播至全網(wǎng),各節(jié)點(diǎn)接受組網(wǎng)投票結(jié)果。PBFT 共識(shí)算法相對(duì)于BFT 共識(shí)算法在數(shù)據(jù)信息處理、共識(shí)時(shí)長(zhǎng)、吞吐容量方面有了較大的改善,但仍然存在請(qǐng)求節(jié)點(diǎn)過(guò)多時(shí),主節(jié)點(diǎn)容易過(guò)載、共識(shí)效率下降、主節(jié)點(diǎn)無(wú)退出機(jī)制、系統(tǒng)的可用性及安全性較低等問(wèn)題。如三階段廣播在點(diǎn)對(duì)點(diǎn)分布式傳輸中,已造成傳遞次數(shù)劇烈增加,引起網(wǎng)絡(luò)擁擠等問(wèn)題。為此,研究者對(duì)其從節(jié)點(diǎn)選取機(jī)制、引入長(zhǎng)鏈制度等多方面進(jìn)行了改進(jìn)和優(yōu)化。
圖7 PBFT共識(shí)算法流程
文獻(xiàn)[27]針對(duì)PBFT 共識(shí)算法主節(jié)點(diǎn)選取終身制、通信開(kāi)銷大等問(wèn)題,對(duì)其共識(shí)節(jié)點(diǎn)的選取設(shè)置了動(dòng)態(tài)加入和退出機(jī)制,使網(wǎng)絡(luò)節(jié)點(diǎn)由靜態(tài)轉(zhuǎn)為動(dòng)態(tài),同時(shí)增加了主節(jié)點(diǎn)選組最長(zhǎng)鏈過(guò)程,保證了主節(jié)點(diǎn)的可信度。實(shí)驗(yàn)結(jié)果表明,該算法提高了共識(shí)速度,減少了時(shí)延,提供了F=(N-1)/3 的容錯(cuò)性,通信開(kāi)銷比PBFT 算法降低了50%,使分布式通信系統(tǒng)的一致性、安全性和有效性都得到改善。改進(jìn)后的實(shí)用拜占庭容錯(cuò)(Evolution of Practical Byzantine Fault Tolerance,EPBFT)算法流程如圖8 所示。
圖8 EPBFT算法流程
文獻(xiàn)[28]在PBFT 共識(shí)算法的基礎(chǔ)上引入了一種動(dòng)態(tài)加權(quán)機(jī)制,提出了一種聯(lián)盟鏈的加權(quán)共識(shí)算法(Weighted Byzantine Fault Tolerance,WBFT),算法流程如圖9 所示。算法賦予每個(gè)節(jié)點(diǎn)一個(gè)動(dòng)態(tài)權(quán)重,限制惡意或故障節(jié)點(diǎn)參與共識(shí)過(guò)程。
圖9 WBFT算法流程
由圖9 可知,與PBFT 相比較,實(shí)驗(yàn)結(jié)果顯示,WBFT 平均吞吐量增加了17.18%,平均時(shí)延降低了18.01%,其綜合性能得到了較大的改善,其代表性的產(chǎn)品為Fabric v0.6.0。文獻(xiàn)[29]提出的可擴(kuò)展拜占庭容錯(cuò)算法(Scalable Byzantine Fault Tolerance,SBFT)很好地解決了拜占庭算法的吞吐量擴(kuò)容問(wèn)題,SBFT算法采用收集器的線性傳輸模式,每個(gè)節(jié)點(diǎn)將信息直接發(fā)送給收集器,收集器直接廣播、驗(yàn)證,只要惡意節(jié)點(diǎn)數(shù)小于3F+1,即可達(dá)成共識(shí),SBFT 可完成200 個(gè)節(jié)點(diǎn)的共識(shí)。文獻(xiàn)[30]針對(duì)PBFT 通信資源浪費(fèi)、效率低下的情況,提出了一種最短通信時(shí)間分組的GBFT 共識(shí)算法,算法的核心是設(shè)計(jì)減少節(jié)點(diǎn)之間的傳遞消息數(shù)來(lái)縮短共識(shí)時(shí)間。具體步驟是引入節(jié)點(diǎn)探針,通過(guò)節(jié)點(diǎn)探針獲取共識(shí)節(jié)點(diǎn)的IP 位置,以此構(gòu)建一個(gè)通信時(shí)間矩陣,在矩陣中分割多個(gè)節(jié)點(diǎn)中心,并選取組長(zhǎng),組長(zhǎng)采取與信用等級(jí)掛鉤的辦法輪換,做到探測(cè)節(jié)點(diǎn)動(dòng)態(tài)感知新節(jié)點(diǎn)的加入和共識(shí)的自動(dòng)達(dá)成。文獻(xiàn)[31]基于車輛聯(lián)網(wǎng)提出了一種安全高效的分布式共識(shí)算法SG(Score Groupingpbft)-PBFT 。設(shè)計(jì)的分布式結(jié)構(gòu)可以減輕中心服務(wù)器的壓力,降低單節(jié)點(diǎn)攻擊的風(fēng)險(xiǎn)。SG-PBFT 共識(shí)算法改進(jìn)了傳統(tǒng)的PBFT 共識(shí)算法,優(yōu)化了PBFT 共識(shí)過(guò)程,并使用評(píng)分分組機(jī)制,實(shí)現(xiàn)了更高的共識(shí)效率。實(shí)驗(yàn)結(jié)果表明,該算法提高了區(qū)塊鏈一致性效率,有效防止單節(jié)點(diǎn)攻擊。當(dāng)共識(shí)節(jié)點(diǎn)數(shù)量達(dá)到1 000 個(gè)時(shí),算法的共識(shí)時(shí)間為傳統(tǒng)PBFT 共識(shí)算法的27%。
Ripple 是一個(gè)基于互聯(lián)網(wǎng)的開(kāi)源支付協(xié)議,其提供一種數(shù)據(jù)正確性優(yōu)先的支付解決方案,旨在通過(guò)使用分布式賬本技術(shù)來(lái)實(shí)現(xiàn)全球貨幣之間的實(shí)時(shí)結(jié)算和轉(zhuǎn)賬。其共識(shí)工作流程如圖10 所示。
圖10 Ripple算法共識(shí)流程
共識(shí)主要步驟為:1)驗(yàn)證節(jié)點(diǎn)對(duì)交易直接驗(yàn)證后,剔出不合法的交易,合法的交易進(jìn)入候選集;2)每個(gè)驗(yàn)證節(jié)點(diǎn)將自己的候選集作為提案點(diǎn)對(duì)點(diǎn)發(fā)送給其他驗(yàn)證節(jié)點(diǎn);3)當(dāng)交易得到超過(guò)50%的票數(shù)進(jìn)入下一步,反之,交易參與下一次共識(shí)過(guò)程;4)驗(yàn)證節(jié)點(diǎn)將提案發(fā)送給其他節(jié)點(diǎn),同時(shí)提高所需票數(shù)的閾值達(dá)到80%;5)將交易寫(xiě)入本地賬本。共識(shí)算法的容錯(cuò)能力為(N-1)/5,與PoW 相比,其交易確認(rèn)時(shí)間只有數(shù)秒鐘,且任何時(shí)間都不會(huì)產(chǎn)生硬分叉,能夠維護(hù)全網(wǎng)的一致性和有效性。缺點(diǎn)是當(dāng)新節(jié)點(diǎn)加入時(shí),共識(shí)時(shí)間有所延長(zhǎng)[32]。
Paxos 算法是著名的算法工程師Lamport 在微軟研究院工作時(shí)設(shè)計(jì)的,是一種基于消息傳遞的一致性算法,用于解決復(fù)雜問(wèn)題中確定值的問(wèn)題。Paxos算法設(shè)計(jì)了提議者、決策者、接受者和學(xué)習(xí)者四種角色,其算法運(yùn)行流程如圖11 所示[33],共識(shí)過(guò)程通過(guò)三步完成:1)客戶端首先向儲(chǔ)存節(jié)點(diǎn)發(fā)出提案,儲(chǔ)存節(jié)點(diǎn)編制好提案編號(hào)、提案價(jià)值發(fā)送給決策者,當(dāng)獲得決策者接受時(shí),提案獲得成功,否則返回,等待下一次提案,決策者在這里相當(dāng)于中間過(guò)程,其功能主要用于回復(fù)提議者提案;2)當(dāng)一個(gè)提議者收到副本數(shù)半數(shù)以上的接受者回應(yīng),就選取一個(gè)值向所有儲(chǔ)存節(jié)點(diǎn)的接受者發(fā)送接受請(qǐng)求。如果之前接受者有回應(yīng)值,這個(gè)請(qǐng)求的值就是該值,否則由提議者自己決定接收值;3)提議者如果收到半數(shù)以上的接受者回應(yīng),表示該次請(qǐng)求成功,通知各儲(chǔ)存節(jié)點(diǎn)的學(xué)習(xí)者,反之,返回重新提案。
圖11 Paxos算法共識(shí)流程
Paxos 共識(shí)算法能夠容忍部分節(jié)點(diǎn)信息缺失、延時(shí)和亂序等,其容錯(cuò)能力為2F+1,在網(wǎng)絡(luò)存在異常或節(jié)點(diǎn)故障小于1/2 時(shí)能正常運(yùn)轉(zhuǎn)。
Raft 算法相對(duì)于Paxos 算法采用許多假設(shè),簡(jiǎn)化了共識(shí)流程,使得其更容易應(yīng)用。Raft 算法共識(shí)步驟:首先,采用心跳觸發(fā)機(jī)制選舉領(lǐng)導(dǎo)人,領(lǐng)導(dǎo)人定期向跟隨者發(fā)送心跳,跟隨者將自己的任期號(hào)遞進(jìn)一位,將角色變成候選人,然后,向所有跟隨者發(fā)出投票請(qǐng)求,當(dāng)該候選人獲得50%的跟隨者投票時(shí),將成為下一位領(lǐng)導(dǎo)人,領(lǐng)導(dǎo)人將依據(jù)客戶端的請(qǐng)求,將日記條目加入到它的日記中復(fù)制,當(dāng)日記被復(fù)制到多數(shù)服務(wù)器時(shí),即認(rèn)為達(dá)成了共識(shí)[34]。
Paxos 共識(shí)算法是單條日志項(xiàng)復(fù)制,進(jìn)而組合多次決策實(shí)現(xiàn)一致,其安全性、活性較好,但其構(gòu)建系統(tǒng)復(fù)雜且難以理解,技術(shù)一直未落地使用。Raft 算法對(duì)Paxos 共識(shí)算法進(jìn)行了一些限制,要求新的連續(xù)日志才能當(dāng)選領(lǐng)導(dǎo)人,跟隨者日志都是領(lǐng)導(dǎo)人的子集,而Paxos 算法無(wú)此要求,改進(jìn)后的Raft 共識(shí)算法更容易。目前Raft 共識(shí)算法主要從優(yōu)化選舉方法、增加跟隨者對(duì)數(shù)據(jù)塊的校驗(yàn)方法兩個(gè)方面進(jìn)行改進(jìn),希望提高選舉成功率和屏蔽或剔除惡意節(jié)點(diǎn)。文獻(xiàn)[35]針對(duì)Raft 算法領(lǐng)導(dǎo)者選舉過(guò)程中投票分裂造成的時(shí)延問(wèn)題,提出了一種基于PoW 高效共識(shí)的RPFT 算法,其步驟為先用PoW 共識(shí)算法選出副領(lǐng)導(dǎo)節(jié)點(diǎn),然后給每一個(gè)節(jié)點(diǎn)一個(gè)等待時(shí)間,依據(jù)節(jié)點(diǎn)行為調(diào)整等待時(shí)間,建立時(shí)間選舉模型,快速選出高效領(lǐng)導(dǎo)者節(jié)點(diǎn)。實(shí)驗(yàn)證實(shí),RPFT 較Raft 算法性能提高了75%,共識(shí)效率提高了40%。
文中對(duì)目前成熟獲得應(yīng)用的PoW、PoS、DPoS、PBFT 和Raft 等主流算法從設(shè)計(jì)思想、吞吐量、時(shí)延和優(yōu)缺點(diǎn)方面進(jìn)行了對(duì)比,結(jié)果如表3 所示[16-18,21,25-27,29,32-34,36-38]?;谒懔Ω?jìng)爭(zhēng)的PoW 算法完全去中心化、抗51%的攻擊,其應(yīng)用場(chǎng)景主要在公有鏈,如比特幣將PoW 算法發(fā)揮的淋漓盡致,但其存在資源消耗大、容量小等問(wèn)題;PoS 算法采用幣齡權(quán)益競(jìng)爭(zhēng)機(jī)制,資源消耗、共識(shí)時(shí)間都大幅度減少,但容易產(chǎn)生雙花問(wèn)題;投票類DPoS、BFT 等共識(shí)算法,采用節(jié)點(diǎn)投票選取代表節(jié)點(diǎn)達(dá)成共識(shí),中心化程度有所降低,大多呈弱中心化,容錯(cuò)概率也有所下降,如PBFT 的容錯(cuò)率只有1/3,但其吞吐量大幅增加,其應(yīng)用場(chǎng)景主要在公有鏈,也可用于私有鏈;Raft 等非拜占庭算法采用主從日志復(fù)制方案,識(shí)效率高、一致性好,主要用于聯(lián)盟鏈和私有鏈。
表3 共識(shí)算法比較
文中在研究區(qū)塊鏈結(jié)構(gòu)、組成及架構(gòu)的基礎(chǔ)上,對(duì)目前主流共識(shí)算法進(jìn)行了概括總結(jié),總結(jié)了PoW算法、PoS 權(quán)益類工作證明算法基本完全去中心化,其規(guī)模、安全性得到了很好的擴(kuò)展,以公有鏈為應(yīng)用場(chǎng)景;DPoS、DBFT 投票結(jié)果類共識(shí)算法擴(kuò)展性好,適應(yīng)于聯(lián)盟鏈;Raft 是推選領(lǐng)導(dǎo),復(fù)制日志的算法,共識(shí)一致性好、可擴(kuò)展性強(qiáng),適合聯(lián)盟鏈、私有鏈。
受制區(qū)塊鏈去中心化、安全性及擴(kuò)展性“三元悖論”的制約,只能弱化一方功能來(lái)提升另外兩方面性能,目前開(kāi)發(fā)的多種算法都不能同時(shí)解決去中心化、網(wǎng)絡(luò)延遲、吞吐量擴(kuò)容問(wèn)題。為了解決網(wǎng)絡(luò)延遲、吞吐量擴(kuò)容問(wèn)題,建議研究者從如下幾個(gè)方面進(jìn)行優(yōu)化:1)考慮在拜占庭算法引入“征信”、“網(wǎng)格化”增加惡意節(jié)點(diǎn)參與共識(shí)的成本,通過(guò)網(wǎng)格化管理。減少參與共識(shí)的節(jié)點(diǎn)數(shù),節(jié)省底層網(wǎng)絡(luò)和通信資源,提升共識(shí)算法的效率和安全性;2)將證明類共識(shí)與選舉類共識(shí)算法進(jìn)行加成融合,期望融合后的算法性能優(yōu)于單一算法,如PoW 與PoS 融合,PoW 與DBFT 融合等;3)現(xiàn)有共識(shí)算法與機(jī)器學(xué)習(xí)結(jié)合,通過(guò)有向無(wú)環(huán)圖選舉、排序和去重,提升區(qū)塊鏈共識(shí)效率及擴(kuò)展性;4)研究并鏈、串鏈相關(guān)的技術(shù),提升共識(shí)算法的擴(kuò)展性、通用性等。