楊宇光 張樹新
(北京工業(yè)大學(xué)信息學(xué)部 北京 100124)
(yangyang7357@bjut.edu.cn)
2008年,一位化名“中本聰”的學(xué)者以一篇《比特幣:一種點對點的電子現(xiàn)金系統(tǒng)》的文章[1],闡述了一種數(shù)字加密貨幣的實現(xiàn)思路.一年之后作者釋放出了以論文為原型設(shè)計出來的加密貨幣——比特幣[2].歷經(jīng)近10年的發(fā)展,比特幣一直保持著交易量和市值全球第一的地位,與此同時,支撐比特幣運(yùn)行的核心技術(shù)——區(qū)塊鏈——憑借去中心化、易驗證、難篡改,已成為各國政府、國際組織關(guān)注的一個熱點,許多金融巨頭和研究機(jī)構(gòu)紛紛在該領(lǐng)域投上寶貴的精力.各種區(qū)塊鏈相關(guān)項目爆發(fā)式增長.對于區(qū)塊鏈技術(shù),目前普遍的觀點是其對未來的改變是不可預(yù)估的.
作為一個分布式的P2P網(wǎng)絡(luò)系統(tǒng).比特幣沒有運(yùn)行中心,也沒有管理員.比特幣的來源是采礦.任何節(jié)點都能作為礦工,發(fā)揮自己的計算優(yōu)勢來驗證和記錄交易.并收到相應(yīng)的報酬.
比特幣的優(yōu)勢來自其發(fā)明以前的數(shù)字貨幣,如b-money[3]和文獻(xiàn)[4]的hashcash,之前就已經(jīng)創(chuàng)造了一個完全分散的電子現(xiàn)金系統(tǒng),不依賴于貨幣的擔(dān)?;蚪Y(jié)算交易驗證,保證中央的權(quán)威.主要的不同點是使用了工作量證明機(jī)制(PoW),使網(wǎng)絡(luò)集中同步事務(wù)記錄.巧妙地解決了一個核心問題——“雙花”問題.在此之前,雙重支付問題是數(shù)字貨幣的痛點,只能通過一個中心處理所有交易.
比特幣的獨創(chuàng)性表現(xiàn)在它為拜占庭將軍問題提供了一種可行解.這是分布式計算中一個尚未解決的問題.簡而言之,該問題就是想在一個低容錯的異構(gòu)網(wǎng)絡(luò)上,通過信息傳送達(dá)成行動的一致性比特幣中的解決方案,可以在沒有可信中央機(jī)構(gòu)下達(dá)成一致行動,是分布式計算領(lǐng)域的一個進(jìn)步,具有超越貨幣的廣泛適用性.它可以實現(xiàn)公平選舉、彩票、資產(chǎn)登記、數(shù)字公證等集中的網(wǎng)絡(luò)中的共識.
1)比特幣交易
我們可以把比特幣交易理解為復(fù)式記賬中的每一行.在交易的一頭是大于等于1個輸入(input),另一頭是1個或者多個輸出(output).輸入之和輸出之和不要求必須相等.相反,當(dāng)輸出略小于輸入時,兩者差額代表隱含的“礦工費”,這也是礦工將這筆交易記入賬簿的1筆小額付款.如圖1所示,描述了作為記賬簿的比特幣交易.交易中最常見的形式是從一個支付地址到另一個支付地址(P2PK),輸出中包含自己的地址是“找零”.
圖1 比特幣交易
2)比特幣的密鑰、地址、錢包
比特幣所有權(quán)由3部分建立:付款地址、密鑰和數(shù)字簽名.出于安全原因,數(shù)字密鑰不會在網(wǎng)絡(luò)中流通,而是基于用戶生成的公鑰生成,并存儲在一個文件或一個稱為“錢包”的簡單數(shù)據(jù)庫中.數(shù)字密鑰可以由錢包軟件生成,獨立于比特幣協(xié)議而存在,并且可以離線生成.該密鑰包含比特幣的許多功能,包括分布式管理、所有權(quán)認(rèn)證和基于加密的安全模型.
在交易數(shù)據(jù)包中,有一個特殊的字段專門存儲簽名,并且有效的數(shù)字簽名只能由被認(rèn)可的數(shù)字密鑰才能產(chǎn)生.因為在比特幣交易的支付過程中,收款人是用比特幣地址來標(biāo)識的,簽名作為驗證的一個重要組成部分而存在.但并不是所有的收款地址都是公鑰,除了P2PK之外的交易使用腳本作為支付對象.比特幣地址可以通過單向加密哈希算法作用在公鑰上獲得,常用的算法是SHA(secure hash algorithm)和RIPEMD(the RACE integrity primitives evaluation message digest),特別是SHA256和RIPEMD160.通常用戶的比特幣地址編碼采用“Base58Check”.圖2示出了如何從公鑰生成比特幣地址.
圖2 公鑰到比特幣地址
圖3 Base58Check編碼過程
為了在網(wǎng)絡(luò)傳播中保證數(shù)據(jù)的準(zhǔn)確,使用錯誤檢查代號來檢查轉(zhuǎn)錄中數(shù)據(jù)的錯誤.在數(shù)據(jù)前我們添加一個記錄版本的字節(jié)作為前綴.例如,在比特幣地址的前綴是0(16進(jìn)制是0x00),而私鑰的前綴是128(16進(jìn)制是0x80).因而結(jié)果變?yōu)?部分:前綴、數(shù)據(jù)和校驗碼.稱之為Base58Check編碼,圖3描述了編碼過程.
3)挖礦
挖礦是比特幣系統(tǒng)中最有趣和值得研究的地方,比特幣通過挖礦來產(chǎn)生,它還保證比特幣的穩(wěn)定、安全誠實的運(yùn)行.礦工們在競賽中勝出,獲得記賬的權(quán)利.把一段時間之內(nèi)的交易驗證通過,再添加到鏈中.我們稱“把交易包含在塊中并添加到鏈中”作為“確認(rèn)”交易.交易確認(rèn)后,新所有者只能使用他們在交易中獲得的比特幣.礦工在采礦中獲得2種獎勵:創(chuàng)造一個新的區(qū)塊的獎勵,以及交易中所包含的交易成本.
個人認(rèn)為“挖礦”一詞有一定的誤導(dǎo)性,從而讓我們將注意力集中在獎勵上,雖然挖礦會帶來一部分獎勵,但它主要的目的不是獎勵本身,或者新幣的產(chǎn)生,反而把手段當(dāng)成了目的.挖礦是一個以結(jié)算為中心的過程,每一筆交易都要經(jīng)過結(jié)算處理和檢查.比特幣挖礦保護(hù)系統(tǒng)在沒有中央機(jī)構(gòu)實施情況下也可以使比特幣網(wǎng)絡(luò)達(dá)成一致.它與我們主要討論的共識機(jī)制有著千絲萬縷的聯(lián)系.
作為支持比特幣服務(wù)的核心技術(shù),區(qū)塊鏈?zhǔn)且环N基礎(chǔ)設(shè)施,是加密貨幣或者其他應(yīng)用的底層根本.它使用鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來驗證和存儲數(shù)據(jù),并使用分布式節(jié)點協(xié)商機(jī)制來生成和更新數(shù)據(jù).
根據(jù)不同的應(yīng)用場景,區(qū)塊鏈分為公共鏈、聯(lián)盟鏈和專有鏈.
1)公共鏈.節(jié)點可以自由地連接和退出網(wǎng)絡(luò),參與鏈上數(shù)據(jù)的讀寫操作.目前,基于區(qū)塊鏈的數(shù)字貨幣或智能合約平臺屬于公共鏈的范疇.
2)聯(lián)盟鏈.其實現(xiàn)是在現(xiàn)實生活中有相應(yīng)的組織結(jié)構(gòu),并通過授權(quán)節(jié)點加入和退出網(wǎng)絡(luò).組織形成利益相關(guān)的聯(lián)盟,共同維護(hù)系統(tǒng)的健康運(yùn)行,當(dāng)前企業(yè)界更多關(guān)注聯(lián)盟鏈的搭建和使用.
3)專有鏈.每個節(jié)點的寫權(quán)限都是內(nèi)部控制,讀權(quán)限可以選擇性地對外開放.專有鏈具有多節(jié)點操作的通用結(jié)構(gòu),適用于特定組織的內(nèi)部數(shù)據(jù)管理和審計.
與其在討論某項技術(shù)的發(fā)展前景,不如說我們關(guān)注的是其作用方式.區(qū)塊鏈最近幾年熱度很高,部分企業(yè)已經(jīng)在自己現(xiàn)有的業(yè)務(wù)上找到了應(yīng)用模式,但很多企業(yè)仍處于不斷的反復(fù)嘗試中.事實上,要找到合適的應(yīng)用場景,重點應(yīng)該在分析區(qū)塊鏈本身的特性[5],即在不引入第三方中介的前提下,連續(xù)的區(qū)塊存儲和共識算法提供的難篡改性、安全性和可靠性的保障.因此,直接或間接依賴可信任的第三方的活動可以從該技術(shù)中受益.
1)物聯(lián)網(wǎng)和物流供應(yīng)鏈
IBM在物聯(lián)網(wǎng)領(lǐng)域具有數(shù)十年的技術(shù)和理論,致力在自己擅長的領(lǐng)域引入?yún)^(qū)塊鏈技術(shù),解決了存在的一些問題,比如成本和安全問題.于是在2016年初,IBM和三星宣布他們合作開發(fā)了ADEPT[6]系統(tǒng),目的是使用區(qū)塊鏈技術(shù)創(chuàng)建一個可行的分布式網(wǎng)絡(luò).該系統(tǒng)使用Bit Torrent和Ethereum,TeleHash.Visa和DocuSign則聯(lián)合推出了使用區(qū)塊鏈技術(shù)維護(hù)的出租車服務(wù).Skuchain基于商品流動和資本流動的區(qū)塊鏈同步,創(chuàng)造了一種新的供應(yīng)鏈解決方案,以解決假冒商品問題.京東萬象利用區(qū)塊鏈技術(shù)將一頭牛從育種免疫、屠宰等過程轉(zhuǎn)變?yōu)樽约旱穆?lián)盟鏈,確保信息真實性的安全性.
2)金融服務(wù)
在金融領(lǐng)域中,為了使交易成本降低,減小組織交互之間的風(fēng)險,金融組織和銀行將區(qū)塊鏈技術(shù)落地的愿望更加迫切,同時也會讓區(qū)塊鏈技術(shù)加速成熟.中國人民銀行行長周小川表示,央行的數(shù)字貨幣可以采用區(qū)塊鏈的技術(shù)模式,從而將徹底改變傳統(tǒng)的貨幣流通模式.而在這方面英國的銀行已經(jīng)先走了一步,他們實現(xiàn)了數(shù)字貨幣系統(tǒng)——Rscoin[7].Rscoin的目標(biāo)是提供一個由中央銀行控制的數(shù)字貨幣.它采用2層供應(yīng)鏈結(jié)構(gòu),提高了2PC[8]提交和多鏈交叉驗證機(jī)制在區(qū)塊鏈技術(shù)的運(yùn)行效率.通過中國人民銀行和附屬銀行的信托基礎(chǔ),可以提供更好的業(yè)績.2016年10月,中國郵政儲蓄銀行宣布與IBM合作推出基于區(qū)塊鏈技術(shù)資產(chǎn)托管的系統(tǒng),這是中國銀行業(yè)首次成功地將其核心業(yè)務(wù)發(fā)布到區(qū)塊鏈接技術(shù)平臺.新的業(yè)務(wù)系統(tǒng)消除了重復(fù)結(jié)賬過程,比原有業(yè)務(wù)流程縮短了約60%~80%的時間,提高了信用交易的效率.2015年10月,納斯達(dá)克證券交易所推出了區(qū)塊鏈平臺Nasdaq Linq[9],實現(xiàn)了將區(qū)塊鏈技術(shù)應(yīng)用到交易股票的一級市場.2017年2月,R3聯(lián)盟成員招商銀行宣布將區(qū)塊鏈技術(shù)應(yīng)用于總行.香港分行和永隆銀行臺灣之間的直接結(jié)算系統(tǒng),減少交易時間并減少查詢程序.此外,在區(qū)塊鏈技術(shù)的基礎(chǔ)上涌現(xiàn)出了大量的創(chuàng)新型支付企業(yè).例如Ripple[10]:實現(xiàn)了一個跨地區(qū)、多幣種、低成本的實時交易平臺,引入了類似銀行的網(wǎng)關(guān)概念.
目前來看區(qū)塊鏈主要在以上2個領(lǐng)域有比較好的應(yīng)用實踐,另外在其他領(lǐng)域大家都在積極地探索區(qū)塊鏈的應(yīng)用.
分布式計算和集群異構(gòu)系統(tǒng)的一個基本目標(biāo)是在部分錯誤的進(jìn)程下,保證系統(tǒng)的可靠性,這往往需要在計算過程中對一些協(xié)議所需的信息達(dá)成一致.為了在一個問題上達(dá)成共識,協(xié)商的過程需要多方參與多方作用,因此共識問題在本質(zhì)上是一個一致性問題.
分布式存儲系統(tǒng)等多數(shù)分布式系統(tǒng)在建立之初首先要解決的就是一致性問題.如果分布式系統(tǒng)中的每個節(jié)點都能保證具有很強(qiáng)性能(即時響應(yīng)和高吞吐量)的操作,無需故障,協(xié)商一致過程的實現(xiàn)并不復(fù)雜,可以通過組播過程簡單地進(jìn)行投票.不幸的是,在現(xiàn)實中這樣一個“理想”的場景并不存在.主要有以下需要考慮的點:
1)節(jié)點之間的網(wǎng)絡(luò)通信是不可靠的,包括任意延遲中斷和內(nèi)容故障;
2)節(jié)點的處理可能是錯誤的,甚至節(jié)點自身隨時可能宕機(jī);
3)同步調(diào)用會讓系統(tǒng)變得不具備可擴(kuò)展性;
4)存在惡意節(jié)點故意要破壞系統(tǒng).
一般情況下,失敗(非響應(yīng))的情況被稱為“非拜占庭錯誤”,而惡意響應(yīng)的情況稱為“拜占庭錯誤”.一致性問題是20世紀(jì)70年代以來研究的經(jīng)典問題.為一致性問題設(shè)定上限的3位科學(xué)家Fischer,Lynch和Patterson[11],他們在1985年發(fā)表的論文中提出了FLP不可能性.作為分布式理論的重要定理之一.他們認(rèn)為,在完全異步系統(tǒng)下沒有任何協(xié)議可以容忍甚至一個進(jìn)程的失敗.FLP定理定義了分布式系統(tǒng)一致性算法的上界.Leslie Lamport[12]描述分布式系統(tǒng)容錯與一致性問題設(shè)想并首次提出拜占庭將軍問題:拜占庭位于伊斯坦布爾,現(xiàn)在的土耳其.為了保衛(wèi)國家,各軍相距甚遠(yuǎn),將軍之間溝通必須依靠信使.為了統(tǒng)一地進(jìn)攻和撤退必須就行動達(dá)成一致.但有些將軍可能是叛徒,他們會故意發(fā)送錯誤信息干擾別人.忠誠的將軍如何在明知有叛徒的情況下統(tǒng)一作戰(zhàn)計劃.由此,比特幣的每一個節(jié)點都可以看作是一個將軍.
鏈中的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)僅用于形成鏈中的元素.如何形成這樣的存儲結(jié)構(gòu),如何保證其可信度,如何保證其安全性,如何確保分布式存儲的一致性,都取決于共識機(jī)制.因此,共識機(jī)制是區(qū)塊鏈的靈魂,區(qū)塊鏈的工作原理和應(yīng)用場景取決于共識機(jī)制.區(qū)塊鏈協(xié)商的目標(biāo)就是讓普通的節(jié)點形成一致的區(qū)塊鏈結(jié)構(gòu),需要滿足以下屬性:
1)一致性.所有誠實節(jié)點保存的區(qū)塊鏈的前綴部分完全相同.
2)有效性.由某誠實節(jié)點發(fā)布的信息終將被其他所有節(jié)點記錄在自己的區(qū)塊鏈中.
1990年,Lamport的Paxos[13]算法從工程的角度,最大化地實現(xiàn)了分布式系統(tǒng)一致性.Chubby和Zookeeper使用的就是由Paxos啟發(fā)而來的算法.算法中將節(jié)點分為3種類型:
1)proposer.提交建議等待批準(zhǔn)的人.它通常的角色是客戶.
2)accepter.負(fù)責(zé)對提案進(jìn)行表決.服務(wù)器端的普遍角色.
3)learner.被告知協(xié)商的結(jié)果,并與之相統(tǒng)一,不參與表決過程.可能為客戶端或服務(wù)端.
基本過程包括申請人的建議,當(dāng)超過一半的支持時,將結(jié)果發(fā)送給所有人確認(rèn).一個很小概率的情況是在每一次新一輪的提案中,proposer都崩潰,系統(tǒng)將不會達(dá)成共識.因此如果Paxos可以保證系統(tǒng)能達(dá)到共識,必須有超過1/2的正常節(jié)點存在.
Raft[14]算法是Paxos算法的簡化實現(xiàn),它包括3個角色:領(lǐng)導(dǎo)者(leader)、候選人(candidate)和跟隨者(follower),基本過程是:
1)領(lǐng)導(dǎo)人選舉.每一位候選人都會在某一段時間內(nèi)隨機(jī)提出一個選舉方案,擁有最新階段的多數(shù)選票將被選為領(lǐng)導(dǎo)人.
2)同步Log.當(dāng)選的領(lǐng)導(dǎo)者會找到系統(tǒng)中日志最新的記錄,并強(qiáng)制所有的跟隨者刷新到這個記錄.
拜占庭的問題中,如果總的節(jié)點數(shù)為N,惡意將軍數(shù)為F,當(dāng)N≥3F+1時,拜占庭問題才有解決方法,也就是BFT(Byzantine fault tolerant)算法.
Lamport證明了在誠實者不少于1/3時存在有效的算法能取得一致的結(jié)果.如果有太多的叛變者難以保證一致性.在超過1/3的叛國者的情況下有解決辦法嗎?假設(shè)有叛徒f個和g個忠誠者,叛徒故意給了錯誤的結(jié)果或者故意不作出回應(yīng).在某個時刻上,f個叛徒都不會作出回應(yīng),而大多數(shù)忠誠的擁護(hù)者由于占多數(shù)就可以得到正確的結(jié)果.當(dāng)f個叛徒給出惡意的建議,并有g(shù)個離線的忠誠者時,g-f個忠誠者無法分辨正確和錯誤.如果要確保大多數(shù)仍然可以正常工作,因此,g-f>f,g>2f,所以整體系統(tǒng)大小要大于3f.
PBFT[15]是Castro和Liskov在1999年提出.是第1個廣泛使用的BFT算法.只要系統(tǒng)中2/3個節(jié)點正常工作就可以保證一致性.該算法由3個階段組成:準(zhǔn)備之前、準(zhǔn)備和提交.
這類機(jī)制的特點是很快出塊,很快地達(dá)成共識,以至于沒有時間允許分叉.但這類機(jī)制要求在一個封閉的節(jié)點集合中兩兩節(jié)點進(jìn)行通信,因此比較適合于節(jié)點數(shù)量不多的聯(lián)盟鏈和私有鏈.聯(lián)盟鏈多采用技術(shù)成熟的PBFT機(jī)制及其相應(yīng)的變種RAFT,DBFT和HBFT等來達(dá)成共識,如2016年Linux基金會發(fā)起的開源超級賬本(Hyper Ledger)、IBM推出的Fabric基礎(chǔ)設(shè)施項目等.
Schwartz等人[16]提出了Ripple協(xié)議共識算法(ripple protocol consensus algorithm,RPCA),將失效節(jié)點數(shù)量控制在1/5以內(nèi).因此可以在秒級達(dá)成一致性.
即工作量證明,比特幣區(qū)塊鏈采用了該機(jī)制來實現(xiàn)共識[17].在比特幣系統(tǒng)中時刻都在產(chǎn)生新的交易,而節(jié)點需要將合法交易放入塊中.區(qū)塊頭包含6部分,分別是版本號、前一個區(qū)塊哈希值、Merkle根、時間戳、難度目標(biāo)nouce和隨機(jī)數(shù).參與者需要尋找隨機(jī)數(shù)使區(qū)塊頭哈希值小于或等于難度目標(biāo)[18].例如,困難目標(biāo)的二進(jìn)制表示由32個0組成,平均需要232次嘗試來解決這個問題.困難的目標(biāo)將在達(dá)到每2 016塊時調(diào)整,使出塊的平均速度保持在每10 min,所以難度目標(biāo)將每2周更新1次(2 016×10 min).PoW保證一段時間內(nèi)出現(xiàn)在系統(tǒng)中的交易是可以計算的.
截至目前,PoW機(jī)制或多或少地存在于Dogecoin,Litecoin等數(shù)字貨幣中.
2011年,數(shù)字貨幣愛好者Bitcointalk論壇上,署名為“Quantum Mechanic”的愛好者提出PoS(proof of stake)機(jī)制.經(jīng)過討論后社群同意并認(rèn)可.如果PoW競爭是計算力,挖礦概率與計算力正相關(guān).然后,PoS競爭的是資產(chǎn).節(jié)點越多挖掘塊的概率就越大.PoS合格區(qū)塊的評判標(biāo)準(zhǔn)可以表述為F(Timestamp)<Target×Balance.
與PoW相比,公式中的難度值成為時間戳.在等式的右邊,還有作為因子的均衡因素.這樣,整體目標(biāo)值受平衡值和時間的影響.時間有限,所以出塊的時間必須在一定范圍內(nèi).過早或過晚的塊不會被其他節(jié)點接受.在某些加密貨幣實現(xiàn)思路里將公式中的平衡因子改為所持貨幣量產(chǎn)生了所謂的“幣齡”.由于時間戳有限,PoS鍛造塊的成功率主要與平衡因子有關(guān).與采礦業(yè)的競爭性質(zhì)不同,PoS更像是一個彩票,積累了更多的貨幣年齡來爭取獲勝的機(jī)會,但由于一旦消耗了一定的價值,再贏的概率就減少了,避免了“富人更富”[19].在PoS中,主鏈被定義為最高消費鏈,每個塊的交易將被提交,給塊增加得分.在這種情況下,攻擊者發(fā)起對主鏈的攻擊就必須有很多的資金,并在PoS系統(tǒng)積累了很多時間,攻擊者獲得了大量的金錢,同時消耗得更多.并且一旦出現(xiàn)了攻擊和破壞,攻擊者自身的資金也會受損.它可能是從一開始就杜絕了攻擊者的行為動機(jī),一旦區(qū)塊生成,其年齡立即被清除,這將確保攻擊者不能繼續(xù)攻擊.
在PoS思想出現(xiàn)后,很多協(xié)議基于此進(jìn)行二次開發(fā)可以看作是PoS系協(xié)議.
1)PoSV[20]
PoSV意味著權(quán)利和頻率,在PoS中,“幣齡”受時間的線性影響,因此會出現(xiàn)囤幣現(xiàn)象.瑞迪幣(Reddcoin)改進(jìn)PoS中的這個問題,將線性函數(shù)改造為指數(shù)衰減函數(shù),使幣齡的增長率趨于0.在一定程度上解決了PoS的囤幣問題.瑞迪幣在發(fā)展前期使用PoW進(jìn)行發(fā)幣,后期使用PoSV維護(hù)系統(tǒng)運(yùn)行.
2)DPoS[21]
DPoS(delegated proof of stake)即為授權(quán)股權(quán)證明,比特股(BTS)最先采用.顧名思義,DPoS類似與股份制公司,各個節(jié)點首先投票選舉出社區(qū)可信度較高的來作為達(dá)成共識過程中的決策者.當(dāng)然,每個節(jié)點支持的票數(shù)由其持有的貨幣數(shù)量決定.這些可信節(jié)點可以被視為“挖礦池”,它們之間具有相同的權(quán)利.普通節(jié)點可以選舉或驅(qū)逐不合格的“股東”.在比特股中這個股東數(shù)量被控制在100個.
3)LPoS
LPoS(lease proof of stake)也就是租賃權(quán)益證明,在傳統(tǒng)的PoS中,擁有少量余額的持有人不太可能會投注一個塊,就像計算哈希能力弱的礦工不太可能在比特幣中挖礦一樣.網(wǎng)絡(luò)中有很多節(jié)點多年才產(chǎn)生一個區(qū)塊,這意味著許多擁有較低余額的持有者不會運(yùn)行節(jié)點,并且將網(wǎng)絡(luò)維持在數(shù)量有限的大型玩家身上.由于參與者越多網(wǎng)絡(luò)安全性越好,因此激勵這些較小的持有者參與是非常重要的.LPoS通過允許持有者將其余額租賃給節(jié)點來實現(xiàn)這一目標(biāo).租賃資金完全由持有人控制,隨時可以轉(zhuǎn)移或消耗(租賃結(jié)束時).通過借硬幣增加了被允許在區(qū)塊鏈中添加交易區(qū)塊的機(jī)會,收到的任何獎勵與承租人按比例分?jǐn)?這是Waves[22]采取的方法.
4)PoA
PoA(proof of activity)即活躍度證明[23].為了避免惡意通貨膨脹,比特幣選擇了產(chǎn)生一定數(shù)量的貨幣,然后就是通貨緊縮.獎勵每4年減半,在分?jǐn)偨Y(jié)束時,礦工的參與率下降,比特幣的安全性值得關(guān)注.Po A為了避免這種情況,獎勵線上的主動節(jié)點,大部分當(dāng)前電子貨幣在“發(fā)布”后切換到離線狀態(tài),從而減少在線交易.PoA機(jī)制中的礦工開采過程與PoW機(jī)制類似,當(dāng)?shù)V工發(fā)現(xiàn)新塊時,他們隨機(jī)選擇n個活動節(jié)點來廣播新發(fā)現(xiàn)的塊.n-1主動節(jié)點驗證新發(fā)現(xiàn)的數(shù)據(jù)塊并對其進(jìn)行簽名,第n個主動節(jié)點除了驗證數(shù)據(jù)塊和簽名外,還會封裝并廣播該數(shù)據(jù)塊.礦工和n個活躍節(jié)點將收取獎勵費用.如果n個活動節(jié)點中存在不活動的節(jié)點,它將不能簽署該塊,因此不會收到適當(dāng)?shù)莫剟钯M用.因此,Po A機(jī)制可以有效解決囤積錢的行為,并且在點對點網(wǎng)絡(luò)中有非常重要的應(yīng)用.現(xiàn)在Decred是使用Po A的唯一數(shù)字貨幣.
5)Casper[24]
Casper是Ethereum即將采用的新的一致性算法.不同于PoW中以塊為單位連續(xù)的記錄交易信息,它以鏈為單位.一個典型的場景是如果你提交了2個一樣序號的交易,你將失去所有的保證金.有一定的懲罰機(jī)制,所以非法節(jié)點可以通過惡意攻擊進(jìn)行交易,但他們也面臨著巨大的賠錢風(fēng)險.本協(xié)議下的驗證器主要有2個活動:出塊過程和PoW類似.投注過程比較復(fù)雜,目前采用模擬PBFT的驗證策略.
PoI(proof of importance)就是重要性證明,是一個更公平的算法.人們不需要使用更強(qiáng)大的機(jī)器,也不需要持有更多的股票以獲得更多的回報.它只需要證明自己的重要性,才能獲得出塊權(quán)從而得到獎勵.它不需要特殊的采礦設(shè)備,可以運(yùn)行在樹莓派,因此節(jié)省了電力資源.此外,在重要性的證明下,貨幣資產(chǎn)不是決定重要性的主要因素.它更關(guān)心的是交易量、活動量以及交易雙方的關(guān)系.這些特點可以消除PoS系統(tǒng)中的其他弊端.NEM[25]中使用的就是PoI,其中具體是根據(jù)錢包交互次數(shù)和貨幣資產(chǎn)判斷一個節(jié)點的重要性.相比之下,其他數(shù)字貨幣沒有考慮到節(jié)點對網(wǎng)絡(luò)的支持.為了鼓勵用戶積極地在NEM網(wǎng)絡(luò)上交易維護(hù),它后期會將傳輸數(shù)量也作為一個彰顯重要性的因素.
2014年,Tendermint[26]團(tuán)隊中的Kwon著眼于現(xiàn)存算法的速度、可擴(kuò)展性和資源問題,旨在以一種更安全更高效的方式實現(xiàn)共識.他們改進(jìn)了20世紀(jì)80年代MIT開發(fā)的BFT算法,并概念性地證明利益概念證明(PoS)貨幣的安全性,以解決NXT和BitShares1.0中存在的“Nothing at Stake”問題出發(fā)提出了Tendermint共識機(jī)制.
Tendermint基于圓形投票機(jī)制(如圖4所示).一個投票過程需要3個處理步驟:首先驗證器提出一個塊,然后發(fā)送提交意圖,最后提交一個新塊.在這個圓形投票機(jī)制中,原子廣播安全狀態(tài)可以被復(fù)制,Tendermint責(zé)任層基于此使問題可以被追蹤.Tendermint共識算法首先讓驗證人員保持區(qū)塊鏈的完整副本,并利用公共密鑰來識別被驗證的身份.在每個新塊的高度上,輪流提出塊.每一輪投票只需要一個驗證器,用相應(yīng)的私鑰進(jìn)行驗證簽名,這樣,一旦出現(xiàn)錯誤,負(fù)責(zé)的驗證者就很容易被找到.然后其余的驗證者將需要對每一個提案進(jìn)行投票,投票用的是個人的私鑰簽名,這些構(gòu)成了一個圓.然而,由于網(wǎng)絡(luò)的異步需要,可能會提交一個新的塊數(shù)輪.
圖4 Tendermint共識機(jī)制過程
1)Proof of Luck
伯克利大學(xué)的研究人員基于TEEs(trust execution environments)設(shè)計了一種新型的共識機(jī)制,他們運(yùn)行在支持SGX的CPU上,來抵御挖礦以及對能源的消耗.算法分為2個函數(shù):PoLRound和PoLMine,其中所有參與者都運(yùn)行這2個函數(shù),得到以同一區(qū)塊為祖先的不同區(qū)塊.PoLMine會選擇一個介于0到1之間的隨機(jī)數(shù)字(運(yùn)氣),最大數(shù)字意味著運(yùn)氣最好,將所持有的區(qū)塊作為被用作區(qū)塊鏈中的下一個塊.由于在SGX環(huán)境中發(fā)生隨機(jī)數(shù)選擇,所以不能偽造它.在論文中研究人員使用的是Intel的TEE——SGX,基于Intel的硬件環(huán)境提出了對應(yīng)的共識協(xié)議——POET(proof of elapsed time).據(jù)Intel自己的實驗數(shù)據(jù)該算法可以拓展到數(shù)千節(jié)點.但是問題就是這些算法依賴底層CPU需要把信任交給Intel,這卻與區(qū)塊鏈去中心化的思想相悖.
2)PoDD(proof of DDos)[27]
在USENIX技術(shù)研討會上,一個新的加密數(shù)字貨幣DDOSCoin被科羅拉多大學(xué)和密歇根大學(xué)的研究人員提出,旨在用于獎勵用戶使用他們的電腦參與DDoS攻擊.在DDOSCoin中,礦工工作量的計算是依據(jù)建立的TLS連接,這導(dǎo)致其只適用于已啟用TLS加密的網(wǎng)站.他們使用的共識機(jī)制就是PoDD,參與DDoS攻擊會給礦工數(shù)字貨幣,礦工便可將貨幣轉(zhuǎn)換成比特幣或其他法定貨幣,這可以認(rèn)為是PoW的另一種形式.惡意的“DDoS身份驗證”操作是讓礦工連接到Web服務(wù)器.將響應(yīng)作為鏈接證據(jù),在現(xiàn)代版本的TLS中,服務(wù)器在握手過程中簽署客戶端提供的參數(shù),并在連接的密鑰交換中使用服務(wù)器提供的值.這允許客戶向其他人證明他已經(jīng)與服務(wù)器通信.此外,服務(wù)器返回的簽名值對于客戶端來說是不可預(yù)知且隨機(jī)分布的.
3)PoB(proof of burn)[28]
至于PoB,和開發(fā)比特幣的過程也很相似.但PoB是通過將貨幣轉(zhuǎn)移到不可逆轉(zhuǎn)的地址上以銷毀貨幣,而不是投資到計算硬件上.這種轉(zhuǎn)移也叫作“燃燒”.貨幣被你轉(zhuǎn)到了某個很難找到的地址,基于隨機(jī)選擇程序的系統(tǒng)上,你就相當(dāng)于獲取了挖礦的終生權(quán)力.同時,你也可以轉(zhuǎn)移本地貨幣或者其他區(qū)塊鏈的數(shù)字貨幣.你燃燒貨幣的數(shù)量是和你被選中挖下一塊幣的概率是成正比的.時間越久你在這個系統(tǒng)的份額可能會逐漸減少,所以你會愿意通過燃燒更多的數(shù)據(jù)貨幣來獲取更多的挖礦機(jī)會.
盡管PoB是PoW的一種有趣的替代選擇,但是這種協(xié)議仍舊造成了很多不必要的資源浪費.另一種批評就是挖礦能力只會被那些愿意燃燒更多資金的人所掌控.PoB的應(yīng)用場景有Counterparty[29],TGCoin,Slimcoin等.
4)PoC(proof of contribution)
到目前為止,共識機(jī)制的目的無非是既讓用戶積極參與又要防范不法分子進(jìn)行惡意的行為.如何在這兩者之間求得平衡,Cybervein給出了他們的答案——PoC(貢獻(xiàn)證明機(jī)制).他們認(rèn)為使用PoC和其他機(jī)制可以在攻擊的同時獲得更多的用戶參與和貢獻(xiàn),從而達(dá)到同樣的預(yù)防效果.整個網(wǎng)絡(luò)參與者的貢獻(xiàn)可以是硬盤容量、帶寬、功率、數(shù)據(jù)等各種資源.所以根據(jù)貢獻(xiàn)力的方式可以分為Proof of Storge和Proof of Space等.在Cybervein PoC中,盡管一些參與者的貢獻(xiàn)可能集中在長尾效應(yīng)的曲線的頭部,而貢獻(xiàn)力量分布在正態(tài)曲線的尾部是非常小的,但在這部分人數(shù)占據(jù)整個網(wǎng)絡(luò)的參與者多數(shù).為了保證參與者的利益,隨著時間的推移,這部分小貢獻(xiàn)的比例逐漸增加,形成了上述正態(tài)分布曲線的“長尾”,貢獻(xiàn)的積累將帶來充足的收入,而大貢獻(xiàn)者作為制衡的角色,以實現(xiàn)公平的狀態(tài),所以會有更多的人參與其中.Burstcoin[30]采用這種機(jī)制實現(xiàn)共識.
區(qū)塊鏈上采用不同的共識機(jī)制,鑒于共識機(jī)制在區(qū)塊鏈技術(shù)中的重要性,從以上分析也可以知道有很多種實現(xiàn)思路,為了便于分析,在滿足一致性和有效性的同時,系統(tǒng)的整體性能也會產(chǎn)生不同的影響.鑒于共識機(jī)制的不同特點,可以在下面幾個方面進(jìn)行評估:
1)安全.無論是防止2次支付、私自開采攻擊,還是對錯誤的寬容程度都是將系統(tǒng)作為一個整體對外提供服務(wù)角度來判斷的.從內(nèi)部來看,Eclipse[31]攻擊控制目標(biāo)對象的網(wǎng)絡(luò)通信,阻礙交易的傳播.Sybil[32]攻擊通過類似于DoS的方式讓大量的無意義節(jié)點影響系統(tǒng)安全.
2)擴(kuò)展.是否支持網(wǎng)絡(luò)節(jié)點擴(kuò)展.可擴(kuò)展性是區(qū)塊技術(shù)設(shè)計中需要考慮的關(guān)鍵因素之一.擴(kuò)展性大體由2部分組成:提高系統(tǒng)節(jié)點數(shù)和驗證確認(rèn)次數(shù)的增加.并由此而帶來的通信負(fù)載和運(yùn)行負(fù)載的提高.一般用吞吐量來衡量.
3)性能.是從事務(wù)生成到節(jié)點存儲系統(tǒng)中最終記錄下來的過程中的延遲.換句話說,系統(tǒng)可以處理每秒響應(yīng)的數(shù)量.比如,比特幣系統(tǒng)每秒最多有7筆交易.與現(xiàn)有集中交易系統(tǒng)的交易量相差甚遠(yuǎn).
4)資源.各節(jié)點在共識協(xié)議的指導(dǎo)下,對交易的處理達(dá)成一致所消耗的計算機(jī)的性能資源包括CPU、內(nèi)存、電池等.
1)工作量證明機(jī)制存在一些問題.首先,工作量證明機(jī)制存在嚴(yán)重的效率問題:每個區(qū)塊的產(chǎn)生需要耗費時間,同時新產(chǎn)生的區(qū)塊需要后續(xù)區(qū)塊的確認(rèn)才能保證有效,這需要更長的時間,嚴(yán)重影響系統(tǒng)效率;其次,工作量證明機(jī)制的安全性要求攻擊者所占的計算資源不超過全網(wǎng)的50%,然而從目前比特幣礦池挖礦算力情況來看,算力排名前5礦池的總算力所占比例已經(jīng)過半[33],對系統(tǒng)的安全性和公平性造成嚴(yán)重威脅;最后,被批評是浪費資源.礦機(jī)日夜運(yùn)轉(zhuǎn)消耗大量計算資源、電力能源,人力資源,造成巨大浪費.據(jù)估計,電力需要將大于1 GW(100萬kW),幾乎相當(dāng)于整個愛爾蘭的電力消耗.也有很多人在致力于PoW的優(yōu)化,提出了PoUW[34](proof of useful work).原理一般是通過求解最短路徑等問題代替無意義的隨機(jī)數(shù),但收效甚微.
2)后來,權(quán)益證明機(jī)制實現(xiàn)了改進(jìn)PoW的目標(biāo).但PoS并不完美,首先是初幣的分發(fā),一種是依舊使用PoW進(jìn)行挖礦,另一種是IPO,前者依舊存在PoW的問題,后者缺乏信任基礎(chǔ),容易滋生貿(mào)易犯罪.在應(yīng)用方面,基于PoS的共識機(jī)制有很多應(yīng)用,但是還沒有完全基于PoS的區(qū)塊鏈技術(shù).另外,在高延遲網(wǎng)絡(luò)環(huán)境下很容易產(chǎn)生分叉,影響一致性.如果惡意節(jié)點在這種情況下發(fā)起攻擊,它將通過控制網(wǎng)絡(luò)進(jìn)行通信,形成腦裂.
3)DPos能耗比較低,具有比較快的出塊時間.但是其缺點也是有的:因為普通節(jié)點話語權(quán)比較低,投票的積極性有待提高.如果發(fā)現(xiàn)一個惡意節(jié)點,處理流程不是很高效而且存在中止的情況.此外,代表的選舉做不到實時,并且該系統(tǒng)還是依賴于代幣,不適合公有鏈.
4)BFT算法的安全性和可擴(kuò)展性也存在一些問題.通過以上分析,BFT的安全性取決于系統(tǒng)中無效節(jié)點數(shù)的比例.實際應(yīng)用中,惡意節(jié)點實施Sybil攻擊.許多偽造的客戶端出現(xiàn),稀釋了正常節(jié)點的比例,進(jìn)而影響到系統(tǒng)的穩(wěn)定運(yùn)行.因此,在節(jié)點比較多的區(qū)塊鏈系統(tǒng)上擴(kuò)展性比較差.而且一輪共識中對主節(jié)點的依賴太強(qiáng).
在達(dá)成一致性的前提下,平衡效率、擴(kuò)展性和資源是共識機(jī)制的痛點.在此基礎(chǔ)上如何因地制宜結(jié)合共識機(jī)制,設(shè)計最佳協(xié)商機(jī)制,是未來研究的主要方向.而且我們可以看到,依據(jù)系統(tǒng)授權(quán)程度的高低,依次分為無需許可、公共的共享系統(tǒng)、需要許可、公共的共享系統(tǒng),需要許可的、私有的共享系統(tǒng).越開放的系統(tǒng)達(dá)成共識的代價越高.鑒于共識機(jī)制的優(yōu)缺點,我們可以嘗試將不同的共識機(jī)制結(jié)合起來,形成一種新的共識機(jī)制.比如將PoW和PoS結(jié)合,將PoS和BFT結(jié)合.
對于現(xiàn)存區(qū)塊鏈的一些問題,要結(jié)合加密算法和底層存儲技術(shù)的改進(jìn),共識機(jī)制才能發(fā)揮出最大效果,比如零知識證明[35]、環(huán)簽名、閃電網(wǎng)絡(luò)、DAG、HashGraph[36].隨著全球?qū)^(qū)塊鏈的關(guān)注,越來越多的人投入其中研究開發(fā),未來會有更多工作高效設(shè)計巧妙的共識機(jī)制被設(shè)計出來.
區(qū)塊鏈技術(shù)的重要基石無疑是共識機(jī)制.學(xué)術(shù)界和商界越來越關(guān)注共識機(jī)制,以便更好地應(yīng)用這項技術(shù).區(qū)塊鏈要想落地開花離不開精妙的共識算法,但是,現(xiàn)有可用于區(qū)塊鏈技術(shù)的仍存在這樣那樣的問題.令人欣慰的是,隨著區(qū)塊鏈的發(fā)展熱度,共識機(jī)制相關(guān)的算法逐年增加,各種設(shè)計思想比比皆是.作為分布式計算中解決一致性問題的共識機(jī)制的應(yīng)用場景分析也很重要,在一定程度上決定了區(qū)塊鏈技術(shù)的未來.下一個創(chuàng)新是降低復(fù)雜性并提高一致性適應(yīng)能力.
[1]Nakamoto S.Bitcoin:A peer-to-peer electronic cash system[EB/OL].[2018-03-20].https://bitcoin.org/bitcoin.pdf
[2]Bitcoin Core.Integration/staging tree[OL].2009[2018-03-20].https://github.com/bitcoin/bitcoin
[3]Dai W.b-money[EB/OL].1998[2018-03-20].http://www.weidai.com/bmoney.txt
[4]Back A.Hashcash—A denial of service counter-measure[C]//Proc of USENIX Technical Conf.Berkeley,CA:USENIX Association,2002:15-25
[5]袁勇,王飛躍.區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J].自動化學(xué)報,2016,42(4):481-494
[6]Panikkar S,Nair P.ADEPT:An IoT practitioner perspective DRAFT copy for advance review[EB/OL].2015[2018-03-19].https://ibm.biz/devicedemocracy
[7]蔡維德,趙梓皓,張弛,等.英國央行數(shù)字貨幣RSCoin探討[J].金融電子化,2016(10):78-81
[8]Bernstein P.Two-phase commit protocol[EB/OL].(2018-01-23)[2018-03-23].https://en.wikipedia.org/wiki/Twophase-commit-protocol
[9]Underwood S.Blockchain beyond bitcoin[J].Communications of the ACM,2016,59(11):15-17
[10]Baliga A.Understanding blockchain consensus models[EB/OL].2017[2018-03-21].https://www.persistent.com/wp-content/uploads/2017/04/WP-Understanding-Blockchain-Consensus-Models.pdf
[11]Fischer M J,Lynch N A,Paterson M S.Impossibility of distributed consensus with one faulty process[C]//Proc of ACM SIGACT-SIGMOD Symp on Principles of Database Systems.New York:ACM,1983:1-7
[12]Lamport L,Shostak R,Pease M.The byzantine generals problem[J].ACM Trans on Programming Languages and Systems,1982,4(3):382-401
[13]Lamport L.The part-time parliament[J].ACM Trans on Computer Systems,1998,16(2):133-169
[14]Ongaro D,Ousterhout J.In search of an understandable consensus algorithm[C]//Proc of USENIX Conf on USENIX Technical Conf.Berkeley,CA:USENIX Association,2014:305-320
[15]Castro M O,Liskov B.Practical Byzantine Fault Tolerance[J].OSDI,1999,99:173-186
[16]Schwartz D,Youngs N,Britto A.The ripple protocol consensus algorithm[EB/OL].2014[2018-03-22].https://ripple.com/files/ripple-consensus-whitepaper.pdf
[17]周鄴飛.區(qū)塊鏈核心技術(shù)演進(jìn)之路——共識機(jī)制演進(jìn)(1)[J].計算機(jī)教育,2017(4):155-158
[18]Antonopoulos A M.Mastering Bitcoin:Unlocking Digital Crypto-Currencies[M].Boston:O'Reilly Media,Inc,2014
[19]Houy N.It will cost you nothing to‘Kill'a proof-of-stake crypto-currency[J].Social Science Electronic Publishing,2014,34(2)
[20]Ren L.Proof of stake velocity:Building the social currency of the digital age[EB/OL].2014[2018-03-23].https://www.reddcoin.com/papers/PoSV.pdf
[21]Larimer D.Delegated proof of stake consensus[EB/OL].[2018-03-22].https://bitshares.org/technology/delegatedproof-of-stake-consensus/
[22]Alexander I.Waves platform[EB/OL].(2018-03-19)[2018-03-23].https://en.wikipedia.org/wiki/Wavesplatform
[23]Bentov I,Lee C,Mizrahi A,et al.Proof of activity:Extending Bitcoin's proof of work via proof of stake[J].ACM SIGMETRICS Performance Evaluation Review,2014,42(3):34-37
[24]Danny R.Casper proof of stake FAQ[EB/OL].(2018-03-04)[2018-03-23].https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ
[25]Beikverdi A.NEM(cryptocurrency)[EB/OL].(2018-03-08)[2018-03-23].https://en.wikipedia.org/wiki/NEM-(cryptocurrency)
[26]Kwon J.Tendermint:Consensus without mining[EB/OL].2014[2018-03-23].https://www.github.com/tendermint/tendermint/wiki
[27]Wustrow E,Vandersloot B.DDoSCoin:Cryptocurrency with a malicious proof-of-work[C]//Proc of USENIX Conf on Offensive Technologies.Berkeley,CA:USENIX Association,2016:168-177
[28]Stewart I.Slimcoin a peer-to-peer crypto-currency with proof-of-burn,mining without powerful hardware[EB/OL].2014[2018-03-23].http://www.doc.ic.ac.uk/~ids/realdotdot/crypto-papers-etc-worth-reading/proofof-burn/slimcoin-whitepaper.pdf
[29]Jansen R.A TorPath to TorCoin:Proof-of-bandwidth altcoins for compensating relays[J/OL].2014[2018-03-23].https://petsymposium.org/2014/papers/Ghosh.pdf
[30]Quibus B.Burstcoin—The green innovative cryptocurrency[EB/OL].2017[2018-03-23].https://www.burst-coin.org/proof-of-capacity
[31]Heilman E,Kendler A,Zohar A.Eclipse attacks on Bitcoin's peer-to-peer network[C]//Proc of USENIX Conf on Security Symp.Berkeley,CA:USENIX Association,2015:129-144
[32]Eyal I,Sirer E G.Majority is not enough:Bitcoin mining is vulnerable[C]//Proc of Int Conf on Financial Cryptography and Data Security.Berlin:Springer,2014:436-454
[33]全球算力分布[EB/OL].[2018-03-20].http://qukuai.com/pools
[34]Marshall B,et al.Proofs of useful work[J/OL].IACR Cryptology ePrint Archive,2017[2018-03-23].https://allguantor.atj/blockchainbib/pdf/ball2017proofs.pdf
[35]Wac?aw B,Stefan D,Daniel M.Efficient zero-knowledge contingent payments in cryptocurrencies without scripts[C]//Proc of European Symp on Research in Computer Security.Berlin:Springer,2016:261-280
[36]Baird,Leemon.Hashgraph consensus:Fair,fast,byzantine fault tolerance[EB/OL].2016[2018-03-23].http://www.swirlds.com/wp-content/uploads/2016/2016-05-31-Swirlds-Consensus-Algorithm-TR-2016-01.pdf