姜 義, 呂榮鎮(zhèn)
(哈爾濱理工大學(xué) 測控技術(shù)與通信工程學(xué)院,黑龍江 哈爾濱 150080)
中本聰在2009年發(fā)表的比特幣白皮書[1]拉開了區(qū)塊鏈發(fā)展的序幕。近年來區(qū)塊鏈技術(shù)的巨大發(fā)展為其在更多領(lǐng)域應(yīng)用提供了可能性。區(qū)塊鏈技術(shù)的研究與應(yīng)用都呈現(xiàn)出爆炸性增長的態(tài)勢,被認為是信息技術(shù)領(lǐng)域的第五次顛覆性創(chuàng)新,是人類信用進化史上繼血親信用、貴金屬信用、央行紙幣信用之后的第四個里程碑[2]。
在對區(qū)塊鏈的研究中,共識算法不僅是核心的技術(shù)之一,也是分布式網(wǎng)絡(luò)重要的研究課題,其研究內(nèi)容包括共識算法和獎勵機制。共識算法是區(qū)塊鏈技術(shù)達成去中心化系統(tǒng)的關(guān)鍵,其作用是使決策高度分散的去中心化系統(tǒng)能夠高效且快速的對數(shù)據(jù)的有效性達成一致。共識中的激勵包含代幣的發(fā)行機制和分配機制,其設(shè)計中引入了經(jīng)濟學(xué)的設(shè)計用于保證參與節(jié)點的積極性。
目前發(fā)表的文獻中,袁勇[3]、蔡曉晴[4]、張亮[5]、何蒲[6]等人分別對區(qū)塊鏈技術(shù)的基礎(chǔ)技術(shù)、概念、以及未來的應(yīng)用方向進行了敘述。該文則對區(qū)塊鏈的共識算法進行綜述。
在區(qū)塊鏈系統(tǒng)中共識機制的目的是使所有的誠實節(jié)點獲得一致的區(qū)塊鏈視圖。一致性視圖包含兩個含義:一致性,即對區(qū)塊鏈的每一次更新后,每個節(jié)點都能獲得相同的視圖;有效性,即由任一誠實節(jié)點在區(qū)塊鏈發(fā)布的信息都最終被其它節(jié)點承認并記錄。而在區(qū)塊鏈系統(tǒng)中達成以上兩個特性的算法就是一致性算法。本節(jié)將對區(qū)塊鏈系統(tǒng)中常見的基于一致性算法的共識機制進行介紹。
早期的分布式系統(tǒng)共識中僅考慮對錯誤節(jié)點的容錯,其中代表性工作包括Paxos[7]和Raft[8]等一致性協(xié)議。這些一致性算法旨在解決如何快速且正確地在集群內(nèi)部對某個數(shù)據(jù)的內(nèi)容達成共識,且保證在可能發(fā)生一定異常的情況下不破壞整個系統(tǒng)的一致性。
1.1.1 Paxos
Paxos算法可以使分布式異步網(wǎng)絡(luò)中存在著二分之一的故障節(jié)點或者網(wǎng)絡(luò)本身出現(xiàn)異常的情況下,網(wǎng)絡(luò)中信息的傳輸也能正常的運行。該算法在一定程度上容忍了信息的丟失、延時、亂序以及重復(fù)的可能性,該算法擁有的容錯能力是2f+1。
Paxos將節(jié)點的角色分為三種:提議者Proposer提出議案(Proposal),提案中包括提案編號(Proposel ID)和提案的值(Value);Acceptor決策者,用來回復(fù)Proposer的提案;收到Proposal后,若獲得多數(shù)的Acceptor的接受,提案才被允許;Learner決策學(xué)習(xí)者,不參與決策,只能學(xué)習(xí)最新達成共識的提案。Paxos算法主要解決了兩個問題:一是各節(jié)點能夠區(qū)分當前的提議者和前一個提議者,能夠阻止共識被破壞;二是一旦提議達成共識,之后的提議者也必須承認該提議,確保達成一致性。
1.1.2 Raft
Raft算法則是從多副本狀態(tài)機的角度提出,通過管理多副本狀態(tài)機的日志復(fù)制來實現(xiàn)共識。Raft算法中有三種角色,分別是領(lǐng)導(dǎo)者(Leader)、跟從者(Follower)、候選人(Candidate)。其中領(lǐng)導(dǎo)者主要用于傳達客戶端的信息,通知跟從者日志的同步,在收到大部分跟從者確認后,提交日志。而跟從者則是接受并持久化日志,在領(lǐng)導(dǎo)者確認之后進行提交。候選人就是節(jié)點從跟從者到領(lǐng)導(dǎo)者的中間角色。該算法的容錯能力與Paxos算法相同,為2f+1,但是比Paxos更容易理解和實現(xiàn)。
Raft算法的關(guān)鍵問題是領(lǐng)導(dǎo)者選舉(Leader Election)和日志同步(Log Replication)。Raft通過心跳觸發(fā)系統(tǒng)進行領(lǐng)導(dǎo)人的選舉。選舉過程分為兩步:首先跟從者將自己的任期期號加一,并將角色轉(zhuǎn)變?yōu)楹蜻x者;其次向其他節(jié)點發(fā)送投票請求,希望跟從者能給其投票。如果某個候選人得票超過半數(shù),就可成為下一任期的領(lǐng)導(dǎo)人。如一段時間內(nèi),沒有節(jié)點獲勝,即多個領(lǐng)導(dǎo)者的票數(shù)相同,則候選人繼續(xù)增加任期號,并重啟選舉。日志同步則是由客戶端發(fā)送請求給領(lǐng)導(dǎo)者,再由領(lǐng)導(dǎo)者進行發(fā)布確保其和其它跟從者之間的狀態(tài)是一致的。
1.2.1 PBTF
實用拜占庭容錯算法(PBFT)[9]出現(xiàn),使得拜占庭協(xié)議的運行復(fù)雜度從指數(shù)級別降低到多項式級別,保證了算法的活性和安全性以及3f+1的容錯能力。該算法首次提出在異步網(wǎng)絡(luò)環(huán)境下使用狀態(tài)副本復(fù)制協(xié)議,并實現(xiàn)了一種拜占庭容錯的分布式文件系統(tǒng)。 PBFT算法中節(jié)點都是副本(Replica),在同一個視圖中有一個副本作為領(lǐng)導(dǎo)者(Primary),其余的副本則作為備份(Backup)。該共識機制主要有兩個部分,其中一個是有五個步驟達成共識:請求(Request)、預(yù)準備(Pre-Prepare)、準備(Prepare)、提交(Commit)、回復(fù)(Reply)。如果領(lǐng)導(dǎo)節(jié)點出現(xiàn)故障或者錯誤的時候,導(dǎo)致了數(shù)據(jù)無法處理,就需要啟動視圖轉(zhuǎn)換。這個過程被稱為視圖轉(zhuǎn)換(View-Change)。
1.2.2 HotStuff
HotStuff[10]算法由Abraham,Gueta和Malkhi提出,該算法以傳統(tǒng)BFT共識算法為基礎(chǔ)實現(xiàn)了Pipeline BFT共識模式,將原先需要兩輪通信才能達成共識寫入鏈中的方式,改成了先將區(qū)塊上鏈。只要一個區(qū)塊后面產(chǎn)生了三個連續(xù)區(qū)塊,那么就說明該區(qū)塊經(jīng)過了三輪投票確認,就可以最終確認該提前上鏈區(qū)塊成功出塊了。這種方式使得系統(tǒng)的響應(yīng)特性大幅度提高了。HotStuff網(wǎng)絡(luò)模型為部分同步網(wǎng)絡(luò),容錯能力為n=3f+1。
HotStuff在PBFT的基礎(chǔ)上做了較多改進。其一將PBFT網(wǎng)狀通信網(wǎng)絡(luò)拓撲換成星形通信網(wǎng)絡(luò)拓撲,降低了系統(tǒng)通信的復(fù)雜度。HotStuff只依靠主節(jié)點進行消息的發(fā)送和處理,再把結(jié)果傳送給其他節(jié)點。其二將視圖切換流程和正常流程合并,采用線性視圖轉(zhuǎn)換(Linear View Change,LVC)降低切換視圖的復(fù)雜度。此外HotStuff引入了門限簽名和流水化處理。引入門限簽名的目的是為了減少共識協(xié)議中的簽名的個數(shù),在其三階段確認中,對消息門限簽名并發(fā)送給主節(jié)點即為投票。這兩個改進大幅度提高了共識的效率。
1.2.3 LibraBFT
LibraBFT算法被稱為另一種HotStuff的共識算法。LibraBFT基于HotStuff設(shè)計并保留了HotStuff的流水線的設(shè)計,但在投票時節(jié)點僅將投票發(fā)給領(lǐng)導(dǎo)者,而不是發(fā)給其他節(jié)點。LibraBFT還使用了HotStuff無法使用的廣播形式,LibraBFT在以下情況中要求非領(lǐng)導(dǎo)者節(jié)點執(zhí)行廣播:節(jié)點定期使用廣播進行狀態(tài)的同步;當網(wǎng)絡(luò)出現(xiàn)問題或者領(lǐng)導(dǎo)節(jié)點故障時,節(jié)點會向其他節(jié)點發(fā)送消息超時。此外在LibraBFT中還添加了現(xiàn)實考量的機制,引入了“代”的概念,允許了共識節(jié)點交換以及增加了一些獎懲機制。
1.2.4 SBFT
可擴展拜占庭容錯協(xié)議(Scalable Byzantine Fault Tolerance, SBFT)由Golan Gueta等人[11]提出,是對拜占庭容錯算法(PBFT)的一種擴展,其主要解決了BFT的去中心化和可擴展性問題。相比于PBFT適用于少數(shù)節(jié)點的情況,SBFT能夠使200個節(jié)點高效的達成共識。此外還有其它一些改進。首先采用相互確認的方式來確認區(qū)塊,而SBFT則是采用收集器的線性通信模式。每個節(jié)點不需要再將信息發(fā)給復(fù)制節(jié)點,而是發(fā)給收集器,再由收集器進行廣播。其次SBFT采用了快速共識的機制,只要節(jié)點沒有發(fā)現(xiàn)錯誤并且使用門限簽名將消息長度降低到常數(shù)。其容錯能力是3f+1。
1.2.5 Honey Badger BFT
傳統(tǒng)的PBFT是一種弱同步網(wǎng)絡(luò)的共識算法,但是這種算法受到網(wǎng)絡(luò)的延時的影響非常大。Honey Badger BFT[12]則是一種異步網(wǎng)絡(luò)的BFT算法,其對網(wǎng)絡(luò)的依賴很低,效率比PBFT提高很多。Honey Badger BFT的容錯能力n=3f+1。Honey Badger BFT是針對異步網(wǎng)絡(luò),采用原子廣播協(xié)議設(shè)計的共識算法,其核心是Reliable Broadcast (RBC)廣播協(xié)議。RBC廣播協(xié)議使用糾刪錯算法降低節(jié)點間的數(shù)據(jù)傳輸量,并通過BA算法形成一致的交易列表。該算法在網(wǎng)絡(luò)節(jié)點少的情況下性能不如PBFT;但在網(wǎng)絡(luò)節(jié)點較多時,Honey Badger BFT算法的性能不會下降,而PBFT性能會顯著下降。
基于工作量證明(Proof of Work)的共識算法是各個節(jié)點通過競爭優(yōu)先計算出隨機數(shù)來決定記賬權(quán),以此來保障數(shù)據(jù)的一致性問題。工作量證明由Dwork和Naor[13]為了反垃圾郵件而提出,其原理為在郵件發(fā)送之前,發(fā)送方需要完成一定的計算量來獲得郵件發(fā)送的權(quán)力。比特幣網(wǎng)絡(luò)是工作量證明共識算法第一次運用在大規(guī)模非授權(quán)網(wǎng)絡(luò)中。
2.1.1 比特幣
作為最典型的工作量證明的代表,比特幣系統(tǒng)的節(jié)點允許隨意進入或者退出。各節(jié)點的工作主要是通過計算一個復(fù)雜的SHA256數(shù)學(xué)難題來爭奪記賬的權(quán)利。該難題通過區(qū)塊預(yù)先設(shè)定的隨機數(shù),各節(jié)點通過哈希函數(shù)不斷的計算出一個小于該數(shù)的數(shù),即稱為挖礦。只有第一時間被發(fā)現(xiàn)并通過校驗的區(qū)塊才會被所有節(jié)點計入?yún)^(qū)塊鏈中。而解題的過程是困難的,需要強大的算力進行暴力計算;但是校驗的過程十分方便,容易很快的達成共識。因為使用了基于工作量證明的共識,比特幣節(jié)點獲得獎勵的概率和其擁有的算力成正比,算力越高越容易拿到獎勵。而隨著算力增加,解題的速度加快,也會產(chǎn)生過多的分叉。而挖礦難度如果過高就會導(dǎo)致系統(tǒng)的性能下降,交易的吞吐量也會為之降低,所以需要不斷的修正難度系數(shù)。
PoW的共識系統(tǒng)中,通過獎勵礦工和繳納交易費來確保了安全性。如果某個惡意節(jié)點試圖破壞區(qū)塊鏈,則它需要超過總節(jié)點的51%的算力,即稱為51%攻擊。而發(fā)動此類攻擊的代價是非常昂貴的,并不符合攻擊者的利益需求。但是隨著比特幣系統(tǒng)的不斷龐大,解題的難度不斷上升,獨立礦工的盈利的可能性越來越低,所以一些礦工組織起來形成了礦池來提高獲取記賬權(quán)的概率。目前算力排名前五的礦池的總算力已經(jīng)占比50%以上[14],這對系統(tǒng)的安全性和公平性有著很大的威脅。由于區(qū)塊大小和生成間隔的限制,導(dǎo)致產(chǎn)生區(qū)塊的時間過長。而單純的提高區(qū)塊的容量又會導(dǎo)致網(wǎng)絡(luò)發(fā)生擁塞。如果縮短區(qū)塊生成時間,就會造成更多的分叉,也會導(dǎo)致雙花等安全問題。
2.1.2 Bitcoin-NG
Bitcoin-NG是由Eyal等人[15]所提出的改進版PoW共識機制。該算法提出了首領(lǐng)選擇(Leader Election)和交易序列化(Transaction Serialization)。它將時間劃分為段,在每個時間段都有個領(lǐng)導(dǎo)者,該領(lǐng)導(dǎo)者有資格序列化交易。該方案極大提高了吞吐量。Bitcoin-NG是序列化交易的區(qū)塊鏈共識算法,和比特幣的共識算法很相似,但是該算法會生成兩種不同的區(qū)塊:首領(lǐng)區(qū)塊和微區(qū)塊。與比特幣相比,首領(lǐng)區(qū)塊多了包含微區(qū)塊的公鑰,而微區(qū)塊中則多了一個對應(yīng)首領(lǐng)區(qū)塊的私鑰。相比于首領(lǐng)區(qū)塊,微區(qū)塊的產(chǎn)生并不需要經(jīng)過挖礦,領(lǐng)導(dǎo)節(jié)點的可以快速高效的生成微區(qū)塊。除此以外,系統(tǒng)通過一個專門的賬目記錄“毒藥交易”來防止分叉。后來的領(lǐng)導(dǎo)者節(jié)點可以對毒藥交易進行舉報,如果成功就能使惡意節(jié)點的酬金無效,舉報者能獲得獎勵。同時因為最長鏈的原則,Bitcoin-NG引入了區(qū)塊重量的概念,并且只有關(guān)鍵區(qū)塊才有重量,微區(qū)塊沒有。所以Bitcoin-NG中只有最重且最長的鏈才是主鏈。
2.1.3 Byzcoin
Byzcoin[16]是基于強共識協(xié)議的加密貨幣,Byzcoin建立在成熟的實用拜占庭容錯算法之上引入聯(lián)名簽名方案來減小PBFT輪次的開銷和輕量級客戶端校驗交易請求的開銷。Byzcoin和Bitcoin-NG一樣,區(qū)塊鏈是由關(guān)鍵區(qū)塊和微區(qū)塊組成,通過PoW機制選出領(lǐng)導(dǎo)區(qū)塊。但是Byzcoin則引入了拜占庭容錯算法,可以在不信任的網(wǎng)絡(luò)中建立信任,同時完成即時的、不可逆的交易。Byzcoin交易的特點主要是其微區(qū)塊的確認需要共識小組聯(lián)合簽名來驗證,只有大多數(shù)礦工同意才能通過,這防止了雙花攻擊。Byzcoin算法相對于Bitcoin-NG在吞吐量有所提升且降低了交易延遲。
除了上述的一些PoW算法的改進,還有一些研究人員通過修改一致性協(xié)議來提升算法的性能,例如以太坊采用GHOST協(xié)議提升吞吐量時保證了區(qū)塊鏈的安全性。另一些研究者則采用DAG數(shù)據(jù)結(jié)構(gòu)來改進區(qū)塊鏈的性能,例如Spectre[17]和Hashgraph[18]。
2.1.4 性能分析
基于工作量證明的共識算法主要面臨以下幾個問題:
51%攻擊[19]:51%攻擊是PoW算法最致命的弱點。一旦有礦工或礦池的算力能夠超過總算力的51%,就可以發(fā)動攻擊。發(fā)動攻擊者可以通過阻止交易被確認,或者不給其他礦工挖礦,只允許自己發(fā)送的交易被確認來進行攻擊。但是該攻擊成本比較大,而且收益低于成本。
自私挖礦(Selfish Mining)[20]:Ittay Eyal等人提出的自私挖礦攻擊揭示了比特幣網(wǎng)絡(luò)中的一個漏洞,即惡意節(jié)點發(fā)現(xiàn)新區(qū)塊,然后將新發(fā)現(xiàn)的區(qū)塊保持為私有并在其后面添加更多的新區(qū)塊。當其他節(jié)點挖掘到該區(qū)塊時,惡意節(jié)點就將之前挖掘的區(qū)塊公布出去,成為主鏈中的最長鏈并被其他節(jié)點所承認成為主鏈。自私挖礦是讓惡意節(jié)點以犧牲所有誠實節(jié)點的利益為代價牟取暴利。
日蝕攻擊(Eclipse Attack)[21-22]:日蝕攻擊主要是攻擊區(qū)塊鏈中的節(jié)點而不是整個網(wǎng)絡(luò)。在比特幣系統(tǒng)中每個網(wǎng)絡(luò)節(jié)點能最多和117個節(jié)點連接,而日蝕攻擊則是將該節(jié)點的輸入切斷,隔離到正常的區(qū)塊鏈網(wǎng)絡(luò)之外。
PoS(Proof of Stake)權(quán)益證明機制,是共識機制的一種,又稱股權(quán)證明機制。簡單來說就是依據(jù)持有代幣的數(shù)量和時間,給相應(yīng)的利息。這樣擁有更多權(quán)益的節(jié)點更會去維護區(qū)塊鏈的安全,以此達成共識。Sunny King和Scott Nadal[23]設(shè)計的點點幣,首次將PoS算法應(yīng)用于實際的工程中,一定程度上減少了工作量證明算法所造成的算力浪費和能源消耗。“權(quán)益證明”共識的優(yōu)點是不需要像PoW算法那樣龐大的計算能力,而是以投入的代幣為資本確定出塊權(quán)。但僅通過投入代幣的數(shù)量來確定偽造者將會為較富有的用戶帶來好處,如不加以限制將削弱區(qū)塊鏈的去中心化特性。“基于幣齡的選擇” 和“隨機塊選擇”則是為了解決該問題所設(shè)計的兩個較優(yōu)秀的方案。
“基于幣齡的選擇”系統(tǒng)根據(jù)將自己的股份保留的時間來確定下一位出塊者。系統(tǒng)計算由節(jié)點擁有的代幣數(shù)量乘以持有代幣的時間,將該乘積作為選擇出塊者的依據(jù)。按照這種方式,貨幣持有越久,被選作下一個出塊者的機會就越高,越能獲得獎勵。但是一旦用戶偽造了區(qū)塊,系統(tǒng)便會取消其出塊的權(quán)利至少30天[24]。為了防止少量用戶控制網(wǎng)絡(luò)并使區(qū)塊鏈更加安全,該方案將貨幣的壽命設(shè)置為不超過90天。此外用戶不能被分配為出塊者的時間越長,其成為下一個出塊者的機會就越大。因此,該方案的設(shè)計可以促進區(qū)塊系統(tǒng)的公平性并促進區(qū)塊系統(tǒng)的成長。防止擁有更多代幣的錢包總是在“權(quán)益證明”系統(tǒng)中獲得獎勵的第二種機制稱為“隨機區(qū)塊選擇”。此實現(xiàn)基于最低哈希值和股份大小的組合選擇新的出塊者,該機制進一步加強了權(quán)益證明公平性。
PoS算法面臨的最重要的問題是如何在不消耗資源的情況下達到PoW算法的安全性能。權(quán)益證明的主流協(xié)議中分別是:Tendermint和Casper the Friendly Gadget(CFFG)。
2.2.1 Tendermint
Tendermint[25]算法基于投票機制進行工作,其設(shè)置一組驗證節(jié)點并形成一個表用于輪換領(lǐng)導(dǎo)者。領(lǐng)導(dǎo)節(jié)點進行全網(wǎng)監(jiān)聽并收集信息,最后將內(nèi)容寫入一個區(qū)塊中并全網(wǎng)廣播;通過全網(wǎng)投票超過三分之二節(jié)點同意后,新區(qū)塊就能寫入?yún)^(qū)塊鏈中。如果出現(xiàn)領(lǐng)導(dǎo)節(jié)點宕機或者網(wǎng)絡(luò)延遲,則該輪次所在區(qū)塊為空,不寫入任何內(nèi)容。除此以外Tendermint引入了一種鎖機制,即使節(jié)點在預(yù)提交后突然中斷導(dǎo)致而無法收到最終結(jié)果,在下一輪中這些節(jié)點仍然會繼續(xù)上一輪的投票,最終與正常節(jié)點的區(qū)塊一致。該算法需要三分之二以上的驗證者存在,才能保證運行的正常,所以其區(qū)塊鏈永遠不會產(chǎn)生分叉。
2.2.2 Casper the Friendly Gadget
CFFG[26]是基于鏈的權(quán)益證明和基于拜占庭容錯的PoS算法的一個共同體,是Tendermint核心算法的一種傾向于活躍性而非安全性環(huán)境下的改編。CFFG可以看作是覆蓋在以太坊上的PoW協(xié)議的PoS算法,旨在使其從PoW算法向PoS算法進行過渡。以太坊作為區(qū)塊鏈技術(shù)2.0版本,從出現(xiàn)以來就備受關(guān)注。以太坊的共識機制是融合了PoW和PoS算法的技術(shù),在其目前的發(fā)展階段中仍然使用的是PoW的共識算法。
CFFG是以保守的方式將以太坊從PoW的模式過渡到PoS的模式,其最終的版本可能會結(jié)合CFFG和CTFG的優(yōu)勢,向著一個完善的PoS共識機制演化。其算法相比于PoW算法消耗大量的算法來獲取記賬權(quán)不同。節(jié)點是通過自身擁有的ETH來成為以太坊中的驗證節(jié)點,將自身的ETH提交來獲取最終確認區(qū)塊的權(quán)利。CFFG采用問責(zé)的方式來確保無利害攻擊的危害,問責(zé)意味著對作惡或者不作為的懲罰將高于獎勵。CFFG共識中最重要的就是有檢查點的存在,在每增加50個區(qū)塊時就需要對其進行最終確定。這被稱之為檢查,而50個區(qū)塊被稱為周期。Casper在每個周期發(fā)送投票消息來觸發(fā)這個處理過程。
CFFG最終化區(qū)塊主要分為兩步:第一步是超過三分之二的節(jié)點在第一個周期對區(qū)塊一進行投票檢查;第二步是超過三分之二的節(jié)點在第二周期的時候,對區(qū)塊二進行投票檢查,并最終化其父區(qū)塊。只有區(qū)塊被最終確認后驗證節(jié)點才能獲得獎勵,如果出現(xiàn)區(qū)塊分叉,那么保證金最少會被降低三分之一。CFFG算法安全性的最大保證是需要在三分之二驗證者一起保證區(qū)塊才能達成一致,協(xié)同作惡的可能性很低,如果進行串謀有可能導(dǎo)致自己受益的降低。
2.2.3 委托權(quán)益證明
委托權(quán)益證明(Delegated Proofs of Stake)[27]的機制類似于股份制有限公司,通過資產(chǎn)占比來進行投票,節(jié)點為了自身利益的最大化會選擇相對可靠的節(jié)點。各個節(jié)點投票選舉出社區(qū)可信度較高的節(jié)點作為共識過程的決定者,選中的決定者輪流作為出塊節(jié)點。如果出塊節(jié)點在委任期間未按要求生產(chǎn)區(qū)塊則會被除名,并從新進行選舉。DPoS算法要求隨機指定節(jié)點的出塊順序且每個周期都將順序打亂。由于該共識機制不需要競爭出塊者,在處理能力得到提升的同時舍棄了一部分的去中心化特性。
2.2.4 性能分析
無利害攻擊(Nothing at Stake)[28]:該攻擊主要是在區(qū)塊鏈出現(xiàn)分叉時,出塊節(jié)點可以在不受任何損失的情況下同時為多個分叉出塊,從而獲得所有可能到利益。而PoS算法則不同,惡意節(jié)點自身利益不會被損害。所以在鏈產(chǎn)生分叉時,可以同時在兩個鏈上都進行挖礦,從而利益達到最大化。
長程攻擊(Long Range Attack)[25]:長程攻擊的本質(zhì)就是惡意節(jié)點通過創(chuàng)建一條從創(chuàng)世區(qū)塊開始的分叉,并通過獲取一些在歷史上某個時刻控制了超過51%的股權(quán)的賬戶的私鑰,來試圖欺騙一些新的節(jié)點相信這條鏈的合法性。由于區(qū)塊鏈網(wǎng)絡(luò)是弱主觀性的,網(wǎng)絡(luò)中有新的節(jié)點或者長期離線的節(jié)點重新加入網(wǎng)絡(luò)時,是需要有節(jié)點為其提供創(chuàng)世區(qū)塊的,但他們并不能分辨該鏈是否為主鏈,比較容易受到欺騙。
2.3.1 燃燒證明
燃燒證明[29]本質(zhì)上是指礦工將虛擬貨幣發(fā)送到一個無法使用但可被公眾驗證的虛擬地址,通過該方式銷毀虛擬貨幣來證明節(jié)點對網(wǎng)絡(luò)的投入,并以此來競爭生成區(qū)塊的權(quán)利。銷毀貨幣的過程代表了類似PoW算法中挖礦的能力。節(jié)點銷毀的貨幣越多,說明其擁有的算力也越大,被選為出塊者的成功率越高。燃燒證明背后的想法是通過燃燒一種加密貨幣,甚至可以是本國貨幣,來表明自己愿意更長期的投資而愿意承受短期的損失。所以該證明鼓勵長期參與,從而獲得網(wǎng)絡(luò)的穩(wěn)定性以及貨幣價格的穩(wěn)定,有助于公平和分散的方式確定加密貨幣的分布。于PoW共識類似,燃燒證明共識存在著資源的浪費,也會造成卡特爾的產(chǎn)生并導(dǎo)致富有的礦工更富有。
2.3.2 活躍度證明
活躍度證明(PoA)[30]通常被稱為工作量證明和權(quán)益證明的混合體。但是PoA算法能夠改進網(wǎng)絡(luò)拓撲,保證一定量的在線節(jié)點,而且能量損耗也比PoW減少很多。
活躍度證明(PoA)算法有兩種節(jié)點分別是:礦工和參與節(jié)點,其中參與節(jié)點不需要一定在線。PoA的區(qū)塊由礦工構(gòu)造,并由區(qū)塊選出N個幣的所有者,將參與后續(xù)的校驗和生成。后續(xù)的參與者的選舉由所擁有的幣的多少數(shù)量決定,而且這些參與者必須得滿足在線的要求,這就是PoA活躍證明的由來。PoA的機制與PoW類似,當?shù)V工發(fā)現(xiàn)新的區(qū)塊,他們將選擇n個活動節(jié)點來廣播該區(qū)塊。n-1個節(jié)點驗證新區(qū)塊并對其進行簽名,第n個節(jié)點除了需要驗證和簽名以外,還需要將該區(qū)塊封裝并廣播該區(qū)塊。本次過程中,構(gòu)造新區(qū)塊的礦工以外,其他參與者也能得到一部分的激勵,來保證其一直維持在在線狀態(tài)。網(wǎng)絡(luò)通過控制參與者的激勵分成比例來控制參與者人數(shù)。
2.3.3 空間證明
空間證明(Proof of Spaces, PoSpace)[31]指的是通過用戶付出的硬盤空間來競爭出塊權(quán)利。PoSpace中有兩種節(jié)點,分別是驗證者和證明者。證明者是普通節(jié)點只存儲區(qū)塊鏈的信息,而驗證者不僅有存儲區(qū)塊信息,還有一些證明者的信息。PoSpace通過一個特殊函數(shù)來選取出塊者,存儲空間越大對應(yīng)函數(shù)的數(shù)字越小。由于付出空間是一次性的,此后的作惡成本變的很低。在競爭出塊權(quán)時,PoSpace通過計算從主鏈出發(fā)的所有區(qū)塊的函數(shù)值之和來判斷,哪個支鏈上的函數(shù)值之和最小,則哪條分叉為主鏈。在此基礎(chǔ)上,為了強調(diào)越早的區(qū)塊所占的比重越高,可增加一個削減函數(shù)對早期的區(qū)塊函數(shù)值進行縮減。
2.3.4 權(quán)益速度證明
權(quán)益速度證明(Proofs of Stake Velocity)[32]是在權(quán)益證明的基礎(chǔ)上進行優(yōu)化,促進網(wǎng)絡(luò)節(jié)點的積極參與。在傳統(tǒng)的PoS中隨著時間的推移,已持有的貨幣會呈線性積累幣齡,這導(dǎo)致了一些長期離線節(jié)點的幣齡也獲得增長,而網(wǎng)絡(luò)卻無法獲得其提供的安全性。所以PoSV引入了一種非線性的貨幣時效功能,在該功能中,交易后的前幾天和幾周積累的幣齡比后幾周要快,與長期離線的節(jié)點相比,活躍在網(wǎng)絡(luò)上的節(jié)點可多獲得獎勵。
2.3.5 貢獻量證明
貢獻量證明(Proofs of Contribution)[33]是對比特幣協(xié)議的一種擴展,在不改變比特幣數(shù)據(jù)結(jié)構(gòu)的條件下,設(shè)定不同地址不同的挖礦難度,并引入黑名單配合實現(xiàn)共識中的懲罰機制。
除了上述的一些證明算法以外,還有幸運證明(Proof of Luck)、融入知識證明的工作量證明(Entangled Proof of Work and Knowledge)、有益工作證明(Proof of Useful Work)等一些類算法。
不同的共識機制都有自己適合的區(qū)塊鏈應(yīng)用場景,證明類算法適合全球性節(jié)點的公有鏈。由于互聯(lián)網(wǎng)范圍內(nèi)巨大數(shù)量的不信任節(jié)點的存在,越開放的系統(tǒng)為了能達成共識需要付出更大的代價。證明類算法中,工作量證明類共識算法適用于加密貨幣類應(yīng)用,而權(quán)益證明類算法則適用于一般性的區(qū)塊鏈。而經(jīng)典的Paxos和Raft算法適合私有鏈,在節(jié)點數(shù)量不多時能夠高效率的達到共識。拜占庭容錯算法則適合只有少量節(jié)點的聯(lián)盟鏈。在設(shè)計區(qū)塊鏈系統(tǒng)時宜根據(jù)不同的需求采用不同的共識算法,也可以將現(xiàn)有的算法進行融合,設(shè)計出最佳的共識機制。