袁勇 倪曉春 曾帥 王飛躍
共識(shí)問(wèn)題是社會(huì)科學(xué)和計(jì)算機(jī)科學(xué)等領(lǐng)域的經(jīng)典問(wèn)題,已經(jīng)有很長(zhǎng)的研究歷史。目前有記載的文獻(xiàn)至少可以追溯到1959年,蘭德公司和布朗大學(xué)的埃德蒙·艾森伯格(Edmund Eisenberg)和大衛(wèi)·蓋爾(David Gale)發(fā)表的《Consensus of subjective probabilities:The parimutuel method》,主要研究針對(duì)某個(gè)特定的概率空間,一組個(gè)體各自有其主觀的概率分布時(shí),如何形成一個(gè)共識(shí)概率分布的問(wèn)題。隨后,共識(shí)問(wèn)題逐漸引起了社會(huì)學(xué)、管理學(xué)、經(jīng)濟(jì)學(xué)、特別是計(jì)算機(jī)科學(xué)等各學(xué)科領(lǐng)域的廣泛研究興趣。
計(jì)算機(jī)科學(xué)領(lǐng)域的早期共識(shí)研究一般聚焦于分布式一致性,即如何保證分布式系統(tǒng)集群中所有節(jié)點(diǎn)的數(shù)據(jù)完全相同并且能夠?qū)δ硞€(gè)提案達(dá)成一致的問(wèn)題,是分布式計(jì)算的根本問(wèn)題之一。雖然共識(shí)(consensus)和一致性(consistency)在很多文獻(xiàn)和應(yīng)用場(chǎng)景中被認(rèn)為是近似等價(jià)和可互換使用的,但二者涵義存在著細(xì)微的差別:共識(shí)研究側(cè)重于分布式節(jié)點(diǎn)達(dá)成一致的過(guò)程及其算法,而一致性研究則側(cè)重于節(jié)點(diǎn)共識(shí)過(guò)程最終達(dá)成的穩(wěn)定狀態(tài);此外,傳統(tǒng)分布式一致性研究大多不考慮拜占庭容錯(cuò)問(wèn)題,即假設(shè)不存在惡意篡改和偽造數(shù)據(jù)的拜占庭節(jié)點(diǎn),因此在很長(zhǎng)一段時(shí)間里,傳統(tǒng)分布式一致性算法的應(yīng)用場(chǎng)景大多是節(jié)點(diǎn)數(shù)量有限且相對(duì)可信的分布式數(shù)據(jù)庫(kù)環(huán)境。與之相比,區(qū)塊鏈系統(tǒng)的共識(shí)算法則必須運(yùn)行于更為復(fù)雜、開(kāi)放和缺乏信任的互聯(lián)網(wǎng)環(huán)境下,節(jié)點(diǎn)數(shù)量更多且可能存在惡意拜占庭節(jié)點(diǎn)。因此,即使viewstamped replication(以下簡(jiǎn)稱(chēng) VR)和Paxos等許多分布式一致性算法早在20世紀(jì)80年代就已經(jīng)提出,但是如何跨越拜占庭容錯(cuò)這道鴻溝、設(shè)計(jì)簡(jiǎn)便易行的分布式共識(shí)算法,仍然是分布式計(jì)算領(lǐng)域的難題之一。
2008年10月31日,一位化名為“中本聰”的研究者在密碼學(xué)郵件組中發(fā)表了比特幣的奠基性論文《Bitcoin:A peer-to-peer electronic cash system》,基于區(qū)塊鏈(特別是公有鏈)的共識(shí)研究自此拉開(kāi)序幕。從分布式計(jì)算和共識(shí)的角度來(lái)看,比特幣的根本性貢獻(xiàn)在于首次實(shí)現(xiàn)和驗(yàn)證了一類(lèi)實(shí)用的、互聯(lián)網(wǎng)規(guī)模的拜占庭容錯(cuò)算法,從而打開(kāi)了通往區(qū)塊鏈新時(shí)代的大門(mén)。
一般而言,區(qū)塊鏈系統(tǒng)的節(jié)點(diǎn)具有分布式、自治性、開(kāi)放可自由進(jìn)出等特性,因而大多采用對(duì)等式網(wǎng)絡(luò)(peer-to-peer network,P2P網(wǎng)絡(luò))來(lái)組織散布全球的參與數(shù)據(jù)驗(yàn)證和記賬的節(jié)點(diǎn)。P2P網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)均地位對(duì)等且以扁平式拓?fù)浣Y(jié)構(gòu)相互連通和交互,不存在任何中心化的特殊節(jié)點(diǎn)和層級(jí)結(jié)構(gòu),每個(gè)節(jié)點(diǎn)均會(huì)承擔(dān)網(wǎng)絡(luò)路由、驗(yàn)證區(qū)塊數(shù)據(jù)、傳播區(qū)塊數(shù)據(jù)、發(fā)現(xiàn)新節(jié)點(diǎn)等功能。區(qū)塊鏈系統(tǒng)采用特定的經(jīng)濟(jì)激勵(lì)機(jī)制來(lái)保證分布式系統(tǒng)中所有節(jié)點(diǎn)均有動(dòng)機(jī)參與數(shù)據(jù)區(qū)塊的生成和驗(yàn)證過(guò)程,按照節(jié)點(diǎn)實(shí)際完成的工作量分配共識(shí)過(guò)程所產(chǎn)生的數(shù)字加密貨幣,并通過(guò)共識(shí)算法來(lái)選擇特定的節(jié)點(diǎn)將新區(qū)塊添加到區(qū)塊鏈。以比特幣為代表的一系列區(qū)塊鏈應(yīng)用的蓬勃發(fā)展,彰顯了區(qū)塊鏈技術(shù)的重要性與應(yīng)用價(jià)值,區(qū)塊鏈系統(tǒng)的共識(shí)也成為一個(gè)新的研究熱點(diǎn)。
迄今為止,研究者已經(jīng)在共識(shí)相關(guān)領(lǐng)域做了大量研究工作,不同領(lǐng)域研究者的側(cè)重點(diǎn)也各不相同。計(jì)算機(jī)學(xué)科通常稱(chēng)為共識(shí)算法或者共識(shí)協(xié)議,管理和經(jīng)濟(jì)學(xué)科則通常稱(chēng)為共識(shí)機(jī)制。細(xì)究之下,這些提法存在細(xì)微的差異:算法一般是一組順序敏感的指令集且有明確的輸入和輸出;而協(xié)議和機(jī)制則大多是一組順序不敏感的規(guī)則集。就區(qū)塊鏈領(lǐng)域而言,本文認(rèn)為比特幣和以太坊等可認(rèn)為是底層協(xié)議或機(jī)制,其詳細(xì)規(guī)定了系統(tǒng)或平臺(tái)內(nèi)部的節(jié)點(diǎn)交互規(guī)則、數(shù)據(jù)路由和轉(zhuǎn)發(fā)規(guī)則、區(qū)塊構(gòu)造規(guī)則、交易驗(yàn)證規(guī)則、賬本維護(hù)規(guī)則等集合;而工作量證明(proof-of work,PoW)、權(quán)益證明(proof-of-stake,PoS)等則是建立在特定協(xié)議或機(jī)制基礎(chǔ)上、可靈活切換的算法,其規(guī)定了交易偵聽(tīng)與打包、構(gòu)造區(qū)塊、記賬人選舉、區(qū)塊傳播與驗(yàn)證、主鏈選擇與更新等若干類(lèi)順序敏感的指令集合。因此,本文后續(xù)敘述均采用共識(shí)算法的提法。
現(xiàn)有文獻(xiàn)研究的共識(shí)問(wèn)題實(shí)際上可以分為算法共識(shí)和決策共識(shí)兩個(gè)分支,前者致力于研究在特定的網(wǎng)絡(luò)模型和故障模型前提下,如何在缺乏中央控制和協(xié)調(diào)的分布式網(wǎng)絡(luò)中確保一致性,其實(shí)質(zhì)是一種“機(jī)器共識(shí)”;后者則更為廣泛地研究無(wú)中心的群體決策中,如何就最優(yōu)的決策達(dá)成一致的問(wèn)題,例如關(guān)于比特幣系統(tǒng)擴(kuò)容問(wèn)題和分叉問(wèn)題的社區(qū)討論與路線選擇,其實(shí)質(zhì)是“人的共識(shí)”。二者的區(qū)別在于:前者是機(jī)器間的確定性共識(shí),以工程復(fù)雜性為主;而后者則是以“人在環(huán)路中(human-in-the-loop)”的復(fù)雜系統(tǒng)為特點(diǎn)的不確定性共識(shí),以社會(huì)復(fù)雜性為主。區(qū)塊鏈共識(shí)算法研究應(yīng)屬于算法共識(shí)分支的子集,而決策共識(shí)則大多見(jiàn)于分布式人工智能、多智能體等研究領(lǐng)域。
拜占庭將軍問(wèn)題是分布式共識(shí)的基礎(chǔ),也是上述兩個(gè)研究分支的根源。拜占庭將軍問(wèn)題有兩個(gè)交互一致性條件,即一致性和正確性。由于大多數(shù)情況下,正確性涉及到人的主觀價(jià)值判斷,很難施加到分布式節(jié)點(diǎn)上,因此算法共識(shí)采用的是“降級(jí)的正確性(degraded correctness)”,即從“表達(dá)的內(nèi)容是正確的”降級(jí)為“正確地表達(dá)”,這就導(dǎo)致區(qū)塊鏈的拜占庭共識(shí)實(shí)際上是一種機(jī)器共識(shí),其本身等價(jià)于分布式一致性+正確表達(dá)(不篡改消息)。與之相對(duì)的是,決策共識(shí)可以認(rèn)為是人的共識(shí),不僅要求一致性,而且要求所有節(jié)點(diǎn)相信“表達(dá)的內(nèi)容是正確的”,因而決策共識(shí)不僅要求內(nèi)容的客觀一致性,而且還要求其在共識(shí)節(jié)點(diǎn)間的主觀正確性。由此可見(jiàn),算法共識(shí)處理的是客觀的二值共識(shí),即對(duì)(唯一正確的賬本)和錯(cuò)(所有錯(cuò)誤的賬本),而決策共識(shí)處理的是主觀的多值共識(shí),即意見(jiàn) 1(及其所屬群體)、意見(jiàn) 2(及其所屬群體)……意見(jiàn)N(及其所屬群體),各節(jié)點(diǎn)最終通過(guò)群體間的協(xié)調(diào)和協(xié)作過(guò)程收斂到唯一意見(jiàn)(共識(shí)),而此過(guò)程可能失?。ú皇諗浚?。
本文致力于按時(shí)間順序梳理和討論區(qū)塊鏈發(fā)展過(guò)程中的共識(shí)算法,以期為未來(lái)共識(shí)算法的創(chuàng)新和區(qū)塊鏈技術(shù)的發(fā)展提供參考。本文的后續(xù)章節(jié)安排如下:首先簡(jiǎn)要介紹了分布式共識(shí)領(lǐng)域重要的里程碑式的研究和結(jié)論,包括兩軍問(wèn)題、拜占庭問(wèn)題和 FLP不可能定理,并介紹了傳統(tǒng)的分布式一致性算法;然后提出了區(qū)塊鏈共識(shí)算法的一種基礎(chǔ)模型和分類(lèi)方法,并對(duì)當(dāng)前主流的區(qū)塊鏈共識(shí)算法進(jìn)行了分析;最后總結(jié)了區(qū)塊鏈共識(shí)算法的發(fā)展和研究趨勢(shì)。
1975年,紐約州立大學(xué)石溪分校的阿克云盧(E.A.Akkoyunlu)、??{德漢姆(K.Ekanadham)和胡貝爾(R.V.Huber)在論文《Some constraints and tradeoffs in the design of network communications》中首次提出了計(jì)算機(jī)領(lǐng)域的兩軍問(wèn)題及其無(wú)解性證明,著名的數(shù)據(jù)庫(kù)專(zhuān)家吉姆·格雷正式將該問(wèn)題命名為“兩軍問(wèn)題”。兩軍問(wèn)題表明,在不可靠的通信鏈路上試圖通過(guò)通信達(dá)成一致共識(shí)是不可能的,這被認(rèn)為是計(jì)算機(jī)通信研究中第一個(gè)被證明無(wú)解的問(wèn)題。兩軍問(wèn)題對(duì)計(jì)算機(jī)通信研究產(chǎn)生了重要的影響,互聯(lián)網(wǎng)時(shí)代最重要的 TCP/IP協(xié)議中的“三次握手”過(guò)程即是為解決兩軍問(wèn)題不存理論解而誕生的簡(jiǎn)單易行、成本可控的“工程解”。
分布式計(jì)算領(lǐng)域的共識(shí)問(wèn)題于1980年由馬歇爾·皮斯(Marshall Pease)、羅伯特·肖斯塔克(Robert Shostak)和萊斯利·蘭伯特(Leslie Lamport)提出,該問(wèn)題主要研究在一組可能存在故障節(jié)點(diǎn)、通過(guò)點(diǎn)對(duì)點(diǎn)消息通信的獨(dú)立處理器網(wǎng)絡(luò)中,非故障節(jié)點(diǎn)如何能夠針對(duì)特定值達(dá)成一致共識(shí)。1982年,作者在另一篇文章中正式將該問(wèn)題命名為“拜占庭將軍問(wèn)題”,提出了基于口頭消息和基于簽名消息的兩種算法來(lái)解決該問(wèn)題。拜占庭假設(shè)是對(duì)現(xiàn)實(shí)世界的模型化,強(qiáng)調(diào)的是由于硬件錯(cuò)誤、網(wǎng)絡(luò)擁塞或斷開(kāi)以及遭到惡意攻擊,計(jì)算機(jī)和網(wǎng)絡(luò)可能出現(xiàn)的不可預(yù)料的行為。此后,分布式共識(shí)算法可以分為兩類(lèi),即拜占庭容錯(cuò)和非拜占庭容錯(cuò)類(lèi)共識(shí)。早期共識(shí)算法一般為非拜占庭容錯(cuò)算法,例如廣泛應(yīng)用于分布式數(shù)據(jù)庫(kù)的VR和 Paxos,目前主要應(yīng)用于聯(lián)盟鏈和私有鏈;2008年末,比特幣等公有鏈誕生后,拜占庭容錯(cuò)類(lèi)共識(shí)算法才逐漸獲得實(shí)際應(yīng)用。需要說(shuō)明的是,拜占庭將軍問(wèn)題是區(qū)塊鏈技術(shù)核心思想的根源,直接影響著區(qū)塊鏈系統(tǒng)共識(shí)算法的設(shè)計(jì)和實(shí)現(xiàn),因而在區(qū)塊鏈技術(shù)體系中具有重要意義。
1985年,邁克爾·費(fèi)舍爾(Michael Fisher)、南?!ち制妫∟ancy Lynch)和邁克爾·帕特 森(Michael Paterson)共同發(fā)表了論文《Impossibility of distributed consensus with one faulty process》。這篇文章證明:在含有多個(gè)確定性進(jìn)程的異步系統(tǒng)中,只要有一個(gè)進(jìn)程可能發(fā)生故障,那么就不存在協(xié)議能保證有限時(shí)間內(nèi)使所有進(jìn)程達(dá)成一致。按照作者姓氏的首字母,該定理被命名為FLP不可能定理,是分布式系統(tǒng)領(lǐng)域的經(jīng)典結(jié)論之一,并由此獲得了Dijkstra獎(jiǎng)。FLP不可能定理同樣指出了存在故障進(jìn)程的異步系統(tǒng)的共識(shí)問(wèn)題不存在有限時(shí)間的理論解,因而必須尋找其可行的“工程解”。為此,研究者們只能通過(guò)調(diào)整問(wèn)題模型來(lái)規(guī)避FLP不可能定理,例如犧牲確定性、增加時(shí)間等;加密貨幣則是通過(guò)設(shè)定網(wǎng)絡(luò)同步性(或弱同步性)和時(shí)間假設(shè)來(lái)規(guī)避 FLP不可能性,例如網(wǎng)絡(luò)節(jié)點(diǎn)可以快速同步,且礦工在最優(yōu)鏈上投入有限時(shí)間和資源等。
早期的共識(shí)算法一般也稱(chēng)為分布式一致性算法。與目前主流的區(qū)塊鏈共識(shí)算法相比,分布式一致性算法主要面向分布式數(shù)據(jù)庫(kù)操作、且大多不考慮拜占庭容錯(cuò)問(wèn)題,即假設(shè)系統(tǒng)節(jié)點(diǎn)只發(fā)生宕機(jī)和網(wǎng)絡(luò)故障等非人為問(wèn)題,而不考慮惡意節(jié)點(diǎn)篡改數(shù)據(jù)等問(wèn)題。1988年,麻省理工學(xué)院的布萊恩·奧奇(Brian M.Oki)和芭芭拉·里斯科夫(Barbara H.Liskov,著名計(jì)算機(jī)專(zhuān)家、2008年圖靈獎(jiǎng)得主)提出了VR一致性算法,采用主機(jī)—備份(primarybackup)模式,規(guī)定所有數(shù)據(jù)操作都必須通過(guò)主機(jī)進(jìn)行,然后復(fù)制到各備份機(jī)器以保證一致性。1989年,萊斯利·蘭伯特(Leslie Lamport)在工作論文《The part-time parliament》中提出 Paxos算法,由于文章采用了講故事的敘事風(fēng)格且內(nèi)容過(guò)于艱深晦澀,直到1998年才通過(guò)評(píng)審、發(fā)表在《ACM Transactions on Computer Systems》期刊上。Paxos是基于消息傳遞的一致性算法,主要解決分布式系統(tǒng)如何就某個(gè)特定值達(dá)成一致的問(wèn)題。隨著分布式共識(shí)研究的深入,Paxos算法獲得了學(xué)術(shù)界和工業(yè)界的廣泛認(rèn)可,并衍生出 Abstract Paxos、Classic Paxos、Byzantine Paxos和DiskPaxos等變種算法,成為解決異步系統(tǒng)共識(shí)問(wèn)題最重要的算法家族。實(shí)際上,Liskove等提出的 VR算法本質(zhì)上也是一類(lèi)Paxos算法。需要說(shuō)明的是,VR和Paxos算法均假設(shè)系統(tǒng)中不存在拜占庭故障節(jié)點(diǎn),因而是非拜占庭容錯(cuò)的共識(shí)算法。除以上共識(shí)算法外,獲得較多研究關(guān)注的早期共識(shí)算法還有兩階段提交(Two-Phase Commit)算法、三階段提交(Three-Phase Commit)算法、Zab、Zyzzyva、Kafka等,本文限于篇幅不加詳述。
1993年,美國(guó)計(jì)算機(jī)科學(xué)家、哈佛大學(xué)教授辛西婭·德沃克(Cynthia Dwork)首次提出了工作量證明思想,用來(lái)解決垃圾郵件問(wèn)題。該機(jī)制要求郵件發(fā)送者必須算出某個(gè)數(shù)學(xué)難題的答案來(lái)證明其確實(shí)執(zhí)行了一定程度的計(jì)算工作,從而提高垃圾郵件發(fā)送者的成本。1997年,英國(guó)密碼學(xué)家亞當(dāng)·伯克(Adam Back)也獨(dú)立地提出、并于2002年正式發(fā)表了用于哈希現(xiàn)金(Hash Cash)的工作量證明機(jī)制。哈?,F(xiàn)金也是致力于解決垃圾郵件問(wèn)題,其數(shù)學(xué)難題是尋找包含郵件接受者地址和當(dāng)前日期在內(nèi)的特定數(shù)據(jù)的SHA-1哈希值,使其至少包含 20個(gè)前導(dǎo)零。1999年,馬庫(kù)斯·雅各布松(Markus Jakobsson)正式提出了“工作量證明”概念。這些工作為后來(lái)中本聰設(shè)計(jì)比特幣的共識(shí)機(jī)制奠定了基礎(chǔ)。
1999年,Barbara Liskov等提出了實(shí)用拜占庭容錯(cuò)算法(Practical Byzantine Fault Tolerance,PBFT),解決了原始拜占庭容錯(cuò)算法效率不高的問(wèn)題,將算法復(fù)雜度由指數(shù)級(jí)降低到多項(xiàng)式級(jí),使得拜占庭容錯(cuò)算法在實(shí)際系統(tǒng)應(yīng)用中變得可行。PBFT實(shí)際上是Paxos算法的變種,通過(guò)改進(jìn) Paxos算法使其可以處理拜占庭錯(cuò)誤,因而也稱(chēng)為Byzantine Paxos算法,可以在保證活性(liveness)和安全性(safety)的前提下提供(n-1)/3的容錯(cuò)性,其中n為節(jié)點(diǎn)總數(shù)。
2000年,加利福尼亞大學(xué)的埃里克·布魯爾(Eric Brewer)教授在ACM Symposium on Principles of Distributed Computing研討會(huì)的特邀報(bào)告中提出了一個(gè)猜想:分布式系統(tǒng)無(wú)法同時(shí)滿足一致性(consistency)、可用性(availability)和分區(qū)容錯(cuò)性(partition tolerance),最多只能同時(shí)滿足其中兩個(gè)。其中,一致性是指分布式系統(tǒng)中的所有數(shù)據(jù)備份在同一時(shí)刻保持同樣的值;可用性是指集群中部分節(jié)點(diǎn)出現(xiàn)故障時(shí),集群整體是否還能處理客戶(hù)端的更新請(qǐng)求;分區(qū)容忍性則是指是否允許數(shù)據(jù)分區(qū),不同分區(qū)的集群節(jié)點(diǎn)之間無(wú)法互相通信。2002年,塞斯·吉爾伯特(Seth Gilbert)和南?!ち制妫∟ancy Lynch)在異步網(wǎng)絡(luò)模型中證明了這個(gè)猜想,使其成為 CAP定理或布魯爾定理。該定理使得分布式網(wǎng)絡(luò)研究者不再追求同時(shí)滿足3個(gè)特性的完美設(shè)計(jì),而是不得不在其中做出取舍,這也為后來(lái)的區(qū)塊鏈體系結(jié)構(gòu)設(shè)計(jì)帶來(lái)了影響和限制。
2008年10月,中本聰發(fā)表的比特幣創(chuàng)世論文催生了基于區(qū)塊鏈的共識(shí)算法研究。前文所提到的傳統(tǒng)分布式一致性算法大多應(yīng)用于相對(duì)可信的聯(lián)盟鏈和私有鏈,而面向比特幣、以太坊等公有鏈環(huán)境則誕生了 PoW、PoS等一系列新的拜占庭容錯(cuò)類(lèi)共識(shí)算法。
比特幣采用了PoW共識(shí)算法來(lái)保證比特幣網(wǎng)絡(luò)分布式記賬的一致性,這也是最早和迄今為止最安全可靠的公有鏈共識(shí)算法。PoW 的核心思想是通過(guò)分布式節(jié)點(diǎn)的算力競(jìng)爭(zhēng)來(lái)保證數(shù)據(jù)的一致性和共識(shí)的安全性。比特幣系統(tǒng)的各節(jié)點(diǎn)(即礦工)基于各自的計(jì)算機(jī)算力相互競(jìng)爭(zhēng)來(lái)共同解決一個(gè)求解復(fù)雜但是驗(yàn)證容易的 SHA256數(shù)學(xué)難題(即挖礦),最快解決該難題的節(jié)點(diǎn)將獲得下一區(qū)塊的記賬權(quán)和系統(tǒng)自動(dòng)生成的比特幣獎(jiǎng)勵(lì)。PoW 共識(shí)在比特幣中的應(yīng)用具有重要意義,其近乎完美地整合了比特幣系統(tǒng)的貨幣發(fā)行、流通和市場(chǎng)交換等功能,并保障了系統(tǒng)的安全性和去中心性。然而,PoW 共識(shí)同時(shí)存在著顯著的缺陷,其強(qiáng)大算力造成的資源浪費(fèi)(主要是電力消耗)歷來(lái)為人們所詬病,而且長(zhǎng)達(dá)10分鐘的交易確認(rèn)時(shí)間使其相對(duì)不適合小額交易的商業(yè)應(yīng)用。
2011年7月,一位名為Quantum Mechanic的數(shù)字貨幣愛(ài)好者在比特幣論壇(www.bitcointalk.org)首次提出了權(quán)益證明 PoS共識(shí)算法。隨后,Sunny King在2012年8月發(fā)布的點(diǎn)點(diǎn)幣(Peercoin,PPC)中首次實(shí)現(xiàn)。PoS由系統(tǒng)中具有最高權(quán)益而非最高算力的節(jié)點(diǎn)獲得記賬權(quán),其中權(quán)益體現(xiàn)為節(jié)點(diǎn)對(duì)特定數(shù)量貨幣的所有權(quán),稱(chēng)為幣齡或幣天數(shù)(coin days)。PPC將 PoW 和 PoS兩種共識(shí)算法結(jié)合起來(lái),初期采用PoW挖礦方式以使得Token相對(duì)公平地分配給礦工,后期隨著挖礦難度增加,系統(tǒng)將主要由 PoS共識(shí)算法維護(hù)。PoS一定程度上解決了PoW算力浪費(fèi)的問(wèn)題,并能夠縮短達(dá)成共識(shí)的時(shí)間,因而比特幣之后的許多競(jìng)爭(zhēng)幣都采用PoS共識(shí)算法。
2013年 2月,以太坊創(chuàng)始人Vitalik Buterin在比特幣雜志網(wǎng)站詳細(xì)地介紹了 Ripple(瑞波幣)及其共識(shí)過(guò)程的思路。Ripple項(xiàng)目實(shí)際上早于比特幣,2004年就由瑞安·福格爾(Ryan Fugger)實(shí)現(xiàn),其初衷是創(chuàng)造一種能夠有效支持個(gè)人和社區(qū)發(fā)行自己貨幣的去中心化貨幣系統(tǒng);2014年,大衛(wèi)·施瓦爾茨(David Schwartz)等提出了瑞波協(xié)議共識(shí)算法(Ripple Protocol Consensus Algorithm,RPCA),該共識(shí)算法解決了異步網(wǎng)絡(luò)節(jié)點(diǎn)通訊時(shí)的高延遲問(wèn)題,通過(guò)使用集體信任的子網(wǎng)絡(luò)(collectively-trusted subnetworks),在只需最小化信任和最小連通性的網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)了低延遲、高魯棒性的拜占庭容錯(cuò)共識(shí)算法。目前,Ripple已經(jīng)發(fā)展為基于區(qū)塊鏈技術(shù)的全球金融結(jié)算網(wǎng)絡(luò)。
2013年8月,比特股(Bitshares)項(xiàng)目提出了一種新的共識(shí)算法,即授權(quán)股份證明算法(delegated proofof-stake,DPoS)。DPoS共識(shí)的基本思路類(lèi)似于“董事會(huì)決策”,即系統(tǒng)中每個(gè)節(jié)點(diǎn)可以將其持有的股份權(quán)益作為選票授予一個(gè)代表,獲得票數(shù)最多且愿意成為代表的前N個(gè)節(jié)點(diǎn)將進(jìn)入“董事會(huì)”,按照既定的時(shí)間表輪流對(duì)交易進(jìn)行打包結(jié)算、并且簽署(即生產(chǎn))新區(qū)塊。如果說(shuō)PoW和PoS共識(shí)分別是“算力為王”和“權(quán)益為王”的記賬方式的話,DPoS則可以認(rèn)為是“民主集中式”的記賬方式,其不僅能夠很好地解決PoW浪費(fèi)能源和聯(lián)合挖礦對(duì)系統(tǒng)的去中心化構(gòu)成威脅的問(wèn)題,也能夠彌補(bǔ) PoS中擁有記賬權(quán)益的參與者未必希望參與記賬的缺點(diǎn),其設(shè)計(jì)者認(rèn)為DPoS是當(dāng)時(shí)最快速、最高效、最去中心化和最靈活的共識(shí)算法。
2013年,斯坦福大學(xué)的迭戈·翁伽羅(Diego Ongaro)和約翰·奧斯特豪特(John Ousterhout)提出了Raft共識(shí)算法。正如其論文標(biāo)題《In search of an understandable consensus algorithm》所述,Raft的初衷是為設(shè)計(jì)一種比 Paxos更易于理解和實(shí)現(xiàn)的共識(shí)算法。要知道,由于Paxos論文極少有人理解,Lamport于 2001年曾專(zhuān)門(mén)寫(xiě)過(guò)一篇文章《Paxos made simple》,試圖簡(jiǎn)化描述 Paxos算法但效果不好,這也直接導(dǎo)致了Raft的提出。目前,Raft已經(jīng)在多個(gè)主流的開(kāi)源語(yǔ)言中得以實(shí)現(xiàn)。
隨著比特幣的普及和區(qū)塊鏈技術(shù)的發(fā)展,越來(lái)越多的新共識(shí)算法被提出。為使讀者更為深刻地理解不同的共識(shí)算法,本節(jié)給出區(qū)塊鏈共識(shí)過(guò)程的一個(gè)主流模型。需要說(shuō)明的是,該模型并非通用模型,可能無(wú)法涵蓋所有種類(lèi)的共識(shí)過(guò)程,但是可以體現(xiàn)大多數(shù)主流共識(shí)算法的核心思想。
區(qū)塊鏈系統(tǒng)建立在 P2P網(wǎng)絡(luò)之上,其全體節(jié)點(diǎn)的集合可記為P,一般分為生產(chǎn)數(shù)據(jù)或者交易的普通節(jié)點(diǎn),以及負(fù)責(zé)對(duì)普通節(jié)點(diǎn)生成的數(shù)據(jù)或者交易 進(jìn)行驗(yàn)證、打包、更新上鏈等挖礦操作的“礦工”節(jié)點(diǎn)集合(記為M),兩類(lèi)節(jié)點(diǎn)可能會(huì)有交集;礦工節(jié)點(diǎn)通常情況下會(huì)全體參與共識(shí)競(jìng)爭(zhēng)過(guò)程,在特定算 法中也會(huì)選舉特定的代表節(jié)點(diǎn)、代替他們參加共識(shí)過(guò)程并競(jìng)爭(zhēng)記賬權(quán),這些代表節(jié)點(diǎn)的集合記為 D;通過(guò)共識(shí)過(guò)程選定的記賬節(jié)點(diǎn)記為 A。共識(shí)過(guò)程按照輪次重復(fù)執(zhí)行,每一輪共識(shí)過(guò)程一般重新選擇該輪的記賬節(jié)點(diǎn)。
共識(shí)過(guò)程的核心是“選主”和“記賬”兩部分,在具體操作過(guò)程中每一輪可以分為選主(leader election)、造塊(block generation)、驗(yàn)證(data validation)和上鏈(chain updation,即記賬)4個(gè)階段。共識(shí)過(guò)程的輸入是數(shù)據(jù)節(jié)點(diǎn)生成和驗(yàn)證后的交易或數(shù)據(jù),輸出則是封裝好的數(shù)據(jù)區(qū)塊以及更新后的區(qū)塊鏈。四個(gè)階段循環(huán)往復(fù)執(zhí)行,每執(zhí)行一輪將會(huì)生成一個(gè)新區(qū)塊。
第一階段:選主。選主是共識(shí)過(guò)程的核心,即從全體礦工節(jié)點(diǎn)集M中選出記賬節(jié)點(diǎn)A的過(guò)程;我們可以使用公式f(M)→A來(lái)表示選主過(guò)程,其中函數(shù)f代表共識(shí)算法的具體實(shí)現(xiàn)方式。一般來(lái)說(shuō),|A|=1,即最終選擇唯一的礦工節(jié)點(diǎn)來(lái)記賬。
第二階段:造塊。第一階段選出的記賬節(jié)點(diǎn)根據(jù)特定的策略將當(dāng)前時(shí)間段內(nèi)全體節(jié)點(diǎn) P生成的交易或者數(shù)據(jù)打包到一個(gè)區(qū)塊中,并將生成的新區(qū)塊廣播給全體礦工節(jié)點(diǎn)M 或其代表節(jié)點(diǎn) D。這些交易或者數(shù)據(jù)通常根據(jù)區(qū)塊容量、交易費(fèi)用、交易等待時(shí)間等多種因素綜合排序后,依序打包進(jìn)新區(qū)塊。造塊策略是區(qū)塊鏈系統(tǒng)性能的關(guān)鍵因素,也是貪婪交易打包、自私挖礦等礦工策略性行為的集中體現(xiàn)。
第三階段:驗(yàn)證。礦工節(jié)點(diǎn) M或者代表節(jié)點(diǎn)D收到廣播的新區(qū)塊后,將各自驗(yàn)證區(qū)塊內(nèi)封裝的交易或者數(shù)據(jù)的正確性和合理性。如果新區(qū)塊獲得大多數(shù)驗(yàn)證/代表節(jié)點(diǎn)的認(rèn)可,則該區(qū)塊將作為下一區(qū)塊更新到區(qū)塊鏈。
第四階段:上鏈。記賬節(jié)點(diǎn)將新區(qū)塊添加到主鏈,形成一條從創(chuàng)世區(qū)塊到最新區(qū)塊的完整的、更長(zhǎng)的鏈條。如果主鏈存在多個(gè)分叉鏈,則需根據(jù)共識(shí)算法規(guī)定的主鏈判別標(biāo)準(zhǔn),來(lái)選擇其中一條恰當(dāng)?shù)姆种ё鳛橹麈湣?/p>
區(qū)塊鏈共識(shí)算法可以根據(jù)其容錯(cuò)類(lèi)型、部署方式和一致性程度等多個(gè)維度加以分類(lèi)。例如,根據(jù)容錯(cuò)類(lèi)型,可以將區(qū)塊鏈共識(shí)算法分為拜占庭容錯(cuò)和非拜占庭容錯(cuò)兩類(lèi);根據(jù)部署方式,可以將區(qū)塊鏈共識(shí)算法分為公有鏈共識(shí)、聯(lián)盟鏈共識(shí)和私有鏈共識(shí)3類(lèi);根據(jù)一致性程度,還可以將區(qū)塊鏈共識(shí)算法分為強(qiáng)一致性共識(shí)和弱(最終)一致性共識(shí)等。本文提出一種按照共識(shí)過(guò)程的選主策略的新分類(lèi)方法,其優(yōu)點(diǎn)在于便于刻畫(huà)共識(shí)算法的核心機(jī)理。具體來(lái)說(shuō),可根據(jù)選主策略(即函數(shù)f的具體實(shí)現(xiàn)方式)將區(qū)塊鏈共識(shí)算法分為選舉類(lèi)、證明類(lèi)、隨機(jī)類(lèi)、聯(lián)盟類(lèi)和混合類(lèi)共 5種類(lèi)型。
選舉類(lèi)共識(shí):即礦工節(jié)點(diǎn)在每一輪共識(shí)過(guò)程中通過(guò)“投票選舉”的方式選出當(dāng)前輪次的記賬節(jié)點(diǎn),首先獲得半數(shù)以上選票的礦工節(jié)點(diǎn)將會(huì)獲得記賬權(quán);多見(jiàn)于傳統(tǒng)分布式一致性算法,例如 Paxos和Raft等。
證明類(lèi)共識(shí):也可稱(chēng)為“Proof of X”類(lèi)共識(shí),即礦工節(jié)點(diǎn)在每一輪共識(shí)過(guò)程中必須證明自己具有某種特定的能力,證明方式通常是競(jìng)爭(zhēng)性地完成某項(xiàng)難以解決但易于驗(yàn)證的任務(wù),在競(jìng)爭(zhēng)中勝出的礦工節(jié)點(diǎn)將獲得記賬權(quán);例如PoW和PoS等共識(shí)算法是基于礦工的算力或者權(quán)益來(lái)完成隨機(jī)數(shù)搜索任務(wù),以此競(jìng)爭(zhēng)記賬權(quán)。
隨機(jī)類(lèi)共識(shí):即礦工節(jié)點(diǎn)根據(jù)某種隨機(jī)方式直接確定每一輪的記賬節(jié)點(diǎn),例如下文將要提到的Algorand和PoET共識(shí)算法等。
聯(lián)盟類(lèi)共識(shí):即礦工節(jié)點(diǎn)基于某種特定方式首先選舉出一組代表節(jié)點(diǎn),而后由代表節(jié)點(diǎn)以輪流或者選舉的方式依次取得記賬權(quán)。這是一種以“代議制”為特點(diǎn)的共識(shí)算法,例如DPoS等。
混合類(lèi)共識(shí):即礦工節(jié)點(diǎn)采取多種共識(shí)算法的混合體來(lái)選擇記賬節(jié)點(diǎn),例如PoW+PoS混合共識(shí)、DPoS+BFT共識(shí)等。
自2014年起,隨著比特幣和區(qū)塊鏈技術(shù)快速進(jìn)入公眾視野,許多學(xué)者開(kāi)始關(guān)注并研究區(qū)塊鏈技術(shù),共識(shí)算法也因此進(jìn)入快速發(fā)展、百花齊放的時(shí)期。許多新共識(shí)算法在這段時(shí)間被提出。它們或者是原有算法的簡(jiǎn)單變種,或者是為改進(jìn)某一方面性能而做出的微創(chuàng)新,或者是為適應(yīng)新場(chǎng)景和新需求而做出重大改進(jìn)的新算法。需要說(shuō)明的是,這些共識(shí)算法由于提出時(shí)間晚,目前大多尚未獲得令人信服的實(shí)踐驗(yàn)證,有些甚至只是科研設(shè)想;但這些算法均具有明顯的創(chuàng)新之處,具有一定的大規(guī)模應(yīng)用的前景,因此我們寫(xiě)出來(lái)以饗讀者,并期待能夠啟發(fā)后續(xù)的創(chuàng)新研究。
研究者基于PoW和PoS算法的有機(jī)結(jié)合,相繼提出了權(quán)益—速度證明 (proof of stake velocity,PoSV)、燃燒證明(proof of burn,PoB)、行動(dòng)證明(proof of activity,PoA)和二跳(2-hop)共識(shí)算法,致力于取長(zhǎng)補(bǔ)短、解決PoW與PoS存在的能源消耗與安全風(fēng)險(xiǎn)問(wèn)題。2014年 4月,拉里·雷恩(Larry Ren)在蝸牛幣 Reddcoin白皮書(shū)中提出了PoSV共識(shí)算法,針對(duì)PoS中幣齡是時(shí)間的線性函數(shù)這一問(wèn)題進(jìn)行改進(jìn),致力于消除持幣人的屯幣現(xiàn)象。PoSV算法前期使用 PoW實(shí)現(xiàn)代幣分配,后期使用PoSV維護(hù)網(wǎng)絡(luò)長(zhǎng)期安全。PoSV將PoS中幣齡和時(shí)間的線性函數(shù)修改為指數(shù)式衰減函數(shù),即幣齡的增長(zhǎng)率隨時(shí)間減少最后趨于零。因此新幣的幣齡比老幣增長(zhǎng)地更快,直到達(dá)到上限閾值,這在一定程度上緩和了持幣者的屯幣現(xiàn)象。2014年 5月發(fā)行的Slimcoin借鑒了比特幣和點(diǎn)點(diǎn)幣的設(shè)計(jì),基于PoW和PoS首創(chuàng)提出了PoB共識(shí)算法。其中,PoW共識(shí)被用來(lái)產(chǎn)生初始的代幣供應(yīng),隨著時(shí)間增長(zhǎng),區(qū)塊鏈網(wǎng)絡(luò)累積了足夠的代幣時(shí),系統(tǒng)將依賴(lài)PoB和PoS共識(shí)來(lái)共同維護(hù)。PoB共識(shí)的特色是礦工通過(guò)將其持有的 Slimcoin發(fā)送至特定的無(wú)法找回的地址(燃燒)來(lái)競(jìng)爭(zhēng)新區(qū)塊的記賬權(quán),燃燒的幣越多則挖到新區(qū)塊的概率越高。2014年12月提出的PoA共識(shí)也是基于PoW和PoS,其中采用PoW挖出的部分代幣以抽獎(jiǎng)的方式分發(fā)給所有活躍節(jié)點(diǎn),而節(jié)點(diǎn)擁有的權(quán)益與抽獎(jiǎng)券的數(shù)量即抽中概率成正比。二跳共識(shí)于2017年4月提出,其設(shè)計(jì)初衷是為解決 PoW 潛在的51%算力攻擊問(wèn)題,解決思路是在PoW算力的基礎(chǔ)上引入PoS權(quán)益,使得區(qū)塊鏈安全建立在誠(chéng)實(shí)節(jié)點(diǎn)占有大多數(shù)聯(lián)合資源(算力+權(quán)益)的基礎(chǔ)上。換句話說(shuō),拜占庭節(jié)點(diǎn)必須同時(shí)控制 51%以上的算力和51%以上的權(quán)益,才能成功實(shí)施51%攻擊,這無(wú)疑極大地提高了區(qū)塊鏈的安全性。
原生 PoS共識(shí)算法的改進(jìn)目標(biāo)主要是解決其固有的“無(wú)利害關(guān)系(nothing at stake)” 問(wèn)題,形成了Tendermint以及由其衍生出的 Casper、Ouroboros、Tezos和Honeybadger等新共識(shí)算法。原生PoS共識(shí)一般假設(shè)系統(tǒng)中的對(duì)等節(jié)點(diǎn)都是靜態(tài)和長(zhǎng)期穩(wěn)定的,這在區(qū)塊鏈環(huán)境中并不現(xiàn)實(shí)。2014年提出的 Tendermint的重大突破是使用區(qū)塊、哈希鏈接、動(dòng)態(tài)驗(yàn)證器集合和循環(huán)的領(lǐng)導(dǎo)者選舉,實(shí)現(xiàn)了第一個(gè)基于PBFT的PoS共識(shí)算法。為解決無(wú)利害關(guān)系問(wèn)題,Tendermint節(jié)點(diǎn)需要繳納保證金,如果作惡則保證金就會(huì)被沒(méi)收。Tendermint是一種拜占庭容錯(cuò)的共識(shí)算法,具有抵御雙花攻擊的魯棒性,并且可以抵御網(wǎng)絡(luò)中至多1/3的破壞者的攻擊。
2015年提出的 Casper是以太坊計(jì)劃在其路線圖中稱(chēng)為寧?kù)o(serenity)的第 4階段采用的共識(shí)算法,尚在設(shè)計(jì)、討論和完善階段。目前Casper總共有兩個(gè)版本,即由Vlad Zamjir領(lǐng)導(dǎo)的Casper the Friendly Ghost(CTFG)和由Vitalik Buterin帶領(lǐng)實(shí)現(xiàn)的 Casper Friendly Finality Gadget(CFFG)。前者是明確的 PoS共識(shí),而后者則是 PoW和PoS共識(shí)的有機(jī)結(jié)合。同時(shí),PoS共識(shí)的兩個(gè)主要原理分別是基于鏈的PoS和基于拜占庭容錯(cuò)的PoS。Tendermint是基于拜占庭容錯(cuò)的PoS設(shè)計(jì)。相比之下,CTFG是基于鏈的PoS設(shè)計(jì),而CFFG則是兩者的結(jié)合。
2016年提出的HoneyBadger共識(shí)是首個(gè)實(shí)用的異步拜占庭容錯(cuò)共識(shí)協(xié)議,可以在沒(méi)有任何網(wǎng)絡(luò)時(shí)間假設(shè)的前提下保證區(qū)塊鏈系統(tǒng)的活性(liveness)。該共識(shí)基于一種可實(shí)現(xiàn)漸進(jìn)有效性的原子廣播協(xié)議,能夠在廣域網(wǎng)的上百個(gè)節(jié)點(diǎn)上處理每秒上萬(wàn)筆交易。2017年8月提出的 Ouroboros共識(shí)是首個(gè)基于 PoS并且具有嚴(yán)格安全性保障的區(qū)塊鏈協(xié)議,其特色是提出了一種新的獎(jiǎng)勵(lì)機(jī)制來(lái)驅(qū)動(dòng) PoS共識(shí)過(guò)程,使得誠(chéng)實(shí)節(jié)點(diǎn)的行為構(gòu)成一個(gè)近似納什均衡,可以有效地抵御區(qū)塊截留和自私挖礦等由于礦工的策略性行為而導(dǎo)致的安全攻擊。
原生PoW共識(shí)算法的改進(jìn)目標(biāo)主要是實(shí)現(xiàn)比特幣擴(kuò)容或者降低其能耗。2016年3月,康奈爾大學(xué)的Ittay Eyal等提出一種新的共識(shí)算法Bitcoin NG,將時(shí)間切分為不同的時(shí)間段。在每一個(gè)時(shí)間段上由一個(gè)領(lǐng)導(dǎo)者負(fù)責(zé)生成區(qū)塊、打包交易。該協(xié)議引入了兩種不同的區(qū)塊:用于選舉領(lǐng)導(dǎo)者的關(guān)鍵區(qū)塊和包含交易數(shù)據(jù)的微區(qū)塊。關(guān)鍵區(qū)塊采用比特幣PoW共識(shí)算法生成,然后領(lǐng)導(dǎo)者被允許小于預(yù)設(shè)閾值的速率(例如10 s)來(lái)生成微區(qū)塊。Bitcoin NG可在不改變區(qū)塊容量的基礎(chǔ)上通過(guò)選舉領(lǐng)導(dǎo)者生成更多的區(qū)塊,從而可輔助解決比特幣的擴(kuò)容問(wèn)題。同年8月提出的ByzCoin共識(shí)算法借鑒了Bitcoin-NG這種領(lǐng)導(dǎo)者選舉和交易驗(yàn)證相互獨(dú)立的設(shè)計(jì)思想,是一種新型的可擴(kuò)展拜占庭容錯(cuò)算法,可使得區(qū)塊鏈系統(tǒng)在保持強(qiáng)一致性的同時(shí),達(dá)到超出 Paypal吞吐量的高性能和低確認(rèn)延遲。2016年提出的Elastico共識(shí)機(jī)制通過(guò)分片技術(shù)來(lái)增強(qiáng)區(qū)塊鏈的擴(kuò)展性,其思路是將挖礦網(wǎng)絡(luò)以可證明安全的方式隔離為多個(gè)分片(shard),這些分片并行地處理互不相交的交易集合。Elastico是第一個(gè)拜占庭容錯(cuò)的安全分片協(xié)議。2017年,OmniLedger進(jìn)一步借鑒 ByzCoin和 Elastico共識(shí),設(shè)計(jì)并提出名為ByzCoinX的拜占庭容錯(cuò)協(xié)議。OmniLedger通過(guò)并行跨分片交易處理優(yōu)化區(qū)塊鏈性能,是第一種能夠提供水平擴(kuò)展性而不必犧牲長(zhǎng)期安全性和去中心性的分布式賬本架構(gòu)。
為改進(jìn) PoW 共識(shí)算法的效率(能耗)和公平性,研究者相繼提出了消逝時(shí)間證明(proof of elapsed Time,PoET)和運(yùn)氣證明(proof of luck,PoL)。PoET和 PoL均是基于特定的可信執(zhí)行環(huán)境(trusted execution environments,TEE,例如基于IntelSGX技術(shù)的CPU)的隨機(jī)共識(shí)算法。PoET是超級(jí)賬本HyperLedger的鋸齒湖 Sawtooth項(xiàng)目采用的共識(shí)算法,其基本思路是每個(gè)區(qū)塊鏈節(jié)點(diǎn)都根據(jù)預(yù)定義的概率分布生成一個(gè)隨機(jī)數(shù),來(lái)決定其距離下一次獲得記賬權(quán)的等待時(shí)間。每當(dāng)一個(gè)新區(qū)塊提交到區(qū)塊鏈系統(tǒng)后,SGX即可幫助節(jié)點(diǎn)創(chuàng)建區(qū)塊、生成該等待時(shí)間的證明,而這種證明易于被其他SGX節(jié)點(diǎn)驗(yàn)證。PoET共識(shí)的意義在于使得區(qū)塊鏈系統(tǒng)不必消耗昂貴算力來(lái)挖礦、從而提高了效率,同時(shí)也真正實(shí)現(xiàn)了“一 CPU一票”的公平性。類(lèi)似地,PoL共識(shí)也采用 TEE平臺(tái)的隨機(jī)數(shù)生成器來(lái)選擇每一輪共識(shí)的領(lǐng)導(dǎo)者(記賬人),從而可降低交易驗(yàn)證延遲時(shí)間和交易確認(rèn)時(shí)間、實(shí)現(xiàn)可忽略的能源消耗和真正公平的分布式挖礦。
2014年提出的空間證明(proof of space,PoSp)和2017年提出的有益工作證明(proof of useful work,PoUW)也是為解決 PoW的能耗問(wèn)題而提出的共識(shí)算法。PoSp共識(shí)要求礦工必須出具一定數(shù)量的磁盤(pán)空間(而非算力)來(lái)挖礦,而 PoUW則將 PoW 共識(shí)中毫無(wú)意義的SHA256哈希運(yùn)算轉(zhuǎn)變?yōu)閷?shí)際場(chǎng)景中既困難又有價(jià)值的運(yùn)算,例如計(jì)算正交向量問(wèn)題、3SUM問(wèn)題、最短路徑問(wèn)題等。
傳統(tǒng)分布式一致性算法大多是非拜占庭容錯(cuò)的,因而難以應(yīng)用于區(qū)塊鏈場(chǎng)景(特別是公有鏈)。為此,克里斯托弗·科普蘭(Christopher Copeland)等結(jié)合Raft和PBFT算法的優(yōu)勢(shì),于2014年提出拜占庭容錯(cuò)的 Tangaroa算法。Tangaroa繼承了Raft簡(jiǎn)潔和容易理解的優(yōu)勢(shì),同時(shí)在拜占庭錯(cuò)誤環(huán)境下也能夠維持安全性、容錯(cuò)性和活性。受 Tangaroa共識(shí)啟發(fā),2016年 Github平臺(tái)的Juno項(xiàng)目提出一種拜占庭容錯(cuò)的Raft算法,此后該算法演變?yōu)橐环N稱(chēng)為 ScalableBFT的專(zhuān)用拜占庭容錯(cuò)協(xié)議,能夠?qū)崿F(xiàn)比 Tangaroa和Juno更好的性能。
2015年,Stellar.org首席科學(xué)官David Mazieres教授提出了恒星共識(shí)協(xié)議(stellar consensus protocol,SCP)。SCP在聯(lián)邦拜占庭協(xié)議和Ripple協(xié)議的基礎(chǔ)上演化而來(lái)的,是第一個(gè)可證明安全的共識(shí)機(jī)制,具有分散控制、低延遲、靈活信任和漸進(jìn)安全4個(gè)關(guān)鍵屬性。同年,超級(jí)賬本的鋸齒湖項(xiàng)目將 Ripple和SCP共識(shí)相結(jié)合,提出了法定人數(shù)投票(quorum voting)共識(shí)算法,以應(yīng)對(duì)那些需要即時(shí)交易最終性的應(yīng)用場(chǎng)景。2016年,中國(guó)區(qū)塊鏈社區(qū) NEO(原名小蟻)提出一種改進(jìn)的拜占庭容錯(cuò)算法dBFT,該算法在 PBFT的基礎(chǔ)上借鑒了 PoS設(shè)計(jì)思路,首先按照節(jié)點(diǎn)的權(quán)益來(lái)選出記賬人,然后記賬人之間通過(guò)拜占庭容錯(cuò)算法來(lái)達(dá)成共識(shí)。該算法改進(jìn)了PoW和PoS缺乏最終一致性的問(wèn)題,使得區(qū)塊鏈能夠適用于金融場(chǎng)景。
2016年,圖靈獎(jiǎng)得主、MIT教授 Sivio Micali提出了一種稱(chēng)為AlgoRand的快速拜占庭容錯(cuò)共識(shí)算法。該算法利用密碼抽簽技術(shù)選擇共識(shí)過(guò)程的驗(yàn)證者和領(lǐng)導(dǎo)者,并通過(guò)其設(shè)計(jì)的 BA*拜占庭容錯(cuò)協(xié)議對(duì)新區(qū)塊達(dá)成共識(shí)。AlgoRand只需極小計(jì)算量且極少分叉,被認(rèn)為是真正民主和高效的分布式賬本共識(shí)技術(shù)。
2017年,康奈爾大學(xué)提出了一種稱(chēng)為 sleepy consensus(休眠共識(shí))的新算法。這種共識(shí)針對(duì)的是互聯(lián)網(wǎng)環(huán)境下大規(guī)模的共識(shí)節(jié)點(diǎn)中可能多數(shù)都處于離線狀態(tài),僅有少數(shù)節(jié)點(diǎn)在線參與共識(shí)過(guò)程的實(shí)際情況。該研究證明,傳統(tǒng)共識(shí)算法無(wú)法在這種環(huán)境下保證共識(shí)的安全性。而采用休眠共識(shí)算法,只要在線誠(chéng)實(shí)節(jié)點(diǎn)的數(shù)量超過(guò)故障節(jié)點(diǎn)的數(shù)量,即可保證安全性和魯棒性。
綜上所述,區(qū)塊鏈共識(shí)算法的演進(jìn)歷史,給出了每一種共識(shí)算法的提出時(shí)間、拜占庭容錯(cuò)性能、基礎(chǔ)算法以及具有代表性的應(yīng)用系統(tǒng)或平臺(tái)。
共識(shí)算法是區(qū)塊鏈系統(tǒng)的關(guān)鍵要素之一,已成為當(dāng)前信息領(lǐng)域的一個(gè)新的研究熱點(diǎn)。本文對(duì)目前已經(jīng)提出的32種主流區(qū)塊鏈共識(shí)算法進(jìn)行了系統(tǒng)性的梳理與分析。需要說(shuō)明的是,由于近年來(lái)共識(shí)算法研究發(fā)展較快,本文討論的共識(shí)算法可能僅為實(shí)際共識(shí)算法的一個(gè)子集,尚存在若干新興或者小眾的共識(shí)算法未加以討論,同時(shí)一些較新的共識(shí)算法仍在不斷試錯(cuò)和優(yōu)化階段。本文工作可望為后續(xù)的研究與應(yīng)用提供有益的啟發(fā)與借鑒。
以目前的研究現(xiàn)狀而言,區(qū)塊鏈共識(shí)算法的未來(lái)研究趨勢(shì)將主要側(cè)重于區(qū)塊鏈共識(shí)算法性能評(píng)估、共識(shí)算法—激勵(lì)機(jī)制的適配優(yōu)化、以及新型區(qū)塊鏈結(jié)構(gòu)下的共識(shí)創(chuàng)新3個(gè)方面。
首先,區(qū)塊鏈共識(shí)算法在經(jīng)歷過(guò)一段百花齊放式的探索和創(chuàng)新之后,勢(shì)必會(huì)趨向于收斂到新共識(shí)算法的性能評(píng)估和標(biāo)準(zhǔn)化方面的研究。目前,共識(shí)算法的評(píng)價(jià)指標(biāo)各異,但一般均側(cè)重于社會(huì)學(xué)角度的公平性和去中心化程度,經(jīng)濟(jì)學(xué)角度的能耗、成本與參與者的激勵(lì)相容性,以及計(jì)算機(jī)科學(xué)角度的可擴(kuò)展性(交易吞吐量、節(jié)點(diǎn)可擴(kuò)展等)、容錯(cuò)性和安全性等。如何結(jié)合具體需求和應(yīng)用場(chǎng)景,自適應(yīng)地實(shí)現(xiàn)針對(duì)特定性能評(píng)價(jià)目標(biāo)的共識(shí)機(jī)制設(shè)計(jì)與算法優(yōu)化,將是未來(lái)研究的熱點(diǎn)之一。
其次,區(qū)塊鏈的共識(shí)算法與激勵(lì)機(jī)制是緊密耦合、不可分割的整體,同時(shí)二者互有側(cè)重點(diǎn):共識(shí)算法規(guī)定了礦工為維護(hù)區(qū)塊鏈賬本安全性、一致性和活性而必須遵守的行為規(guī)范和行動(dòng)次序;激勵(lì)機(jī)制則規(guī)定了在共識(shí)過(guò)程中為鼓勵(lì)礦工忠實(shí)、高效的驗(yàn)證區(qū)塊鏈賬本數(shù)據(jù)而發(fā)行的經(jīng)濟(jì)權(quán)益,通常包括代幣發(fā)行機(jī)制、代幣分配機(jī)制、交易費(fèi)定價(jià)機(jī)制等。從研究角度來(lái)看,如果將區(qū)塊鏈系統(tǒng)運(yùn)作過(guò)程建模為礦工和礦池的大群體博弈過(guò)程的話,那么共識(shí)算法將決定其博弈樹(shù)的結(jié)構(gòu)和形狀、激勵(lì)機(jī)制將決定礦工和礦池在博弈樹(shù)中每個(gè)葉子結(jié)點(diǎn)的收益。因此,區(qū)塊鏈共識(shí)算法和激勵(lì)機(jī)制不僅各自存在獨(dú)立優(yōu)化的必要性,更為重要地是共識(shí)—激勵(lì)二元耦合機(jī)制的聯(lián)合優(yōu)化、實(shí)現(xiàn)共識(shí)與激勵(lì)的“適配”,這是解決區(qū)塊鏈系統(tǒng)中不斷涌現(xiàn)出的扣塊攻擊、自私挖礦等策略性行為、保障區(qū)塊鏈系統(tǒng)健康穩(wěn)定運(yùn)行的關(guān)鍵問(wèn)題,迫切需要未來(lái)研究的跟進(jìn)。
最后,隨著區(qū)塊鏈技術(shù)的發(fā)展、特別是數(shù)據(jù)層的技術(shù)和底層拓?fù)浣Y(jié)構(gòu)的不斷創(chuàng)新,目前已經(jīng)涌現(xiàn)出若干新興的區(qū)塊“鏈”數(shù)據(jù)結(jié)構(gòu),例如有向無(wú)環(huán)圖(directed acyclic graph)和哈希圖(Hash Graph)等。這些新數(shù)據(jù)結(jié)構(gòu)將以單一鏈條為基礎(chǔ)的區(qū)塊鏈技術(shù)的范疇拓展為基于圖結(jié)構(gòu)的區(qū)塊“鏈”或分布式賬本。例如適用于物聯(lián)網(wǎng)支付場(chǎng)景的數(shù)字貨幣IOTA即采用稱(chēng)為“tangle(纏結(jié))”的DAG拓?fù)浣Y(jié)構(gòu),其共識(shí)過(guò)程以交易(而非區(qū)塊)為粒度,每個(gè)交易都引證其他兩個(gè)交易的合法性、形成DAG網(wǎng)絡(luò),因而可以實(shí)現(xiàn)無(wú)區(qū)塊(blockless)共識(shí);Hash Graph共識(shí)則更進(jìn)一步,基于Gossip of Gossip協(xié)議和虛擬投票等技術(shù),以交易為粒度,在特定的DAG結(jié)構(gòu)上實(shí)現(xiàn)公平和快速的拜占庭容錯(cuò)共識(shí)。這些新型區(qū)塊拓?fù)浣Y(jié)構(gòu)及其共識(shí)算法是未來(lái)發(fā)展趨勢(shì)之一,建立在這些新型數(shù)據(jù)結(jié)構(gòu)之上的共識(shí)算法也值得深入研究。
(摘自《自動(dòng)化學(xué)報(bào)》網(wǎng)絡(luò)優(yōu)先出版 發(fā)表時(shí)間:2018年9月27日)