


摘? ?要:隨著比特幣的風靡,區塊鏈技術已經成為當下研究領域的主流。區塊鏈系統根據應用場景的不同,一般分為公有鏈、聯盟鏈和私有鏈。由于公有鏈完全去中心化的性質導致其無法滿足企業的需求,所以在實際應用中企業往往選擇部分去中心的聯盟鏈。共識機制是區塊鏈的引擎與核心。目前,主流的共識機制主要針對公有鏈提出,難以適用于聯盟鏈與私有鏈。在此背景下,論文為聯盟鏈提出一種共識機制。該共識機制不僅解決傳統共識效率低的問題,而且在一定程度上可以應對拜占庭容錯。
關鍵詞:聯盟鏈;共識機制;拜占庭容錯
中圖分類號:TP311.13? ? ? ? ? 文獻標識碼:J
Abstract: With the popularity of bitcoin, blockchain technology has become the mainstream of current research field. Block chain system is generally divided into public blockchain, consortium blockchain and private blockchain. Because of the completely decentralized nature of public blockchain, it can not meet the needs of enterprises, so in practical applications enterprises often choose part of the decentralized consortium blockchain. Consensus mechanism is the engine and core of blockchain. At present, the mainstream consensus mechanism is mainly for the public chain, and it is difficult to apply to the consortium blockchain and private chain. Under this background, this paper proposes a consensus mechanism for the consortium blockchain. This consensus mechanism not only solves the inefficiency of traditional consensus, but also can deal with Byzantine failures.
Key words: consortium chain; consensus mechanism; Byzantine failures
1 引言
區塊鏈是一種去中心化的分布式賬本系統,它可以用于登記和發行數字化資產、產權存證和信息追溯等。最早被提出的區塊鏈參與形式被稱為公有鏈,系統的結構完全去中心化,任何用戶都能參與并獲取鏈上存儲的所有數據,但由于系統開放性的限制,用戶的隱私和監督都存在不足,在個別領域的相關應用難以滿足效率需求[1]。因此,私有鏈就隨之應運而生,私有鏈雖然能夠解決以上問題,但如果僅僅由各個企業自己單獨建立,那么還將是一個個信息孤島。因此,以Hyperledger為代表的行業內部聯盟鏈將會成為區塊鏈在未來實體應用的主流方向。
共識機制是區塊鏈的核心模塊,共識機制能保證在沒有中心主體控制下,系統中的各參與方能夠遵循相同記賬規劃,實現數據分布式的一致性[2]。優秀的共識機制在保證系統的安全可控的情況下盡可能提升性能。但是由于區塊鏈發展時間較短和當前社會主流目光還停留在比特幣上,目前主流的共識機制主要面向公有鏈,聯盟鏈共識機制相對較少。聯盟鏈的共識機制在未來是區塊鏈研究的一個重要方向。
2 區塊鏈相關技術與概念
2.1 區塊鏈基本架構
區塊鏈的設計目的是讓所有節點共同參與維護公共數據賬本的系統,讓數據賬本公開透明。區塊鏈的基礎架構可以分成六層。
如圖1所示,區塊鏈系統一般由數據層、網絡層、共識層、激勵層、合約層和應用層組成。數據層用于構建數據區塊,對數據進行加密簽名,增加時間戳;網絡層包括分布式對等網絡,用于節點間的通信和數據驗證;共識層實現各類共識算法;激勵層主要用于制定相應的激勵機制,在聯盟鏈和私有鏈中并不需要,因為激勵在系統外就已經確認;合約層主要封裝各類腳本、算法和智能合約,是區塊鏈可編程特性的基礎;應用層則是基于區塊鏈技術的各類應用[3]。
2.2 區塊鏈的分類
區塊鏈系統根據應用場景和設計體系的不同,一般分為公有鏈、聯盟鏈和私有鏈[4]。
公有鏈的各個節點可以自由加入和退出網絡,并參加鏈上數據的讀寫,運行時以扁平的拓撲結構互聯互通,網絡中不存在任何中心化的服務端節點。
私有鏈的各個節點的寫入權限收歸內部控制,而讀取權限可使需求有選擇性地對外開放。私有鏈仍然具備區塊鏈多節點運行的通用結構,適用于特定機構的內部數據管理與審計。
聯盟鏈介于私有鏈與公有鏈之間,是一種需要注冊許可的區塊鏈,僅限于聯盟中具有權限的成員參與賬本的讀寫,網絡中節點的角色及功能劃分需預先設定,且網絡中的共識、運維和接入均由預先設定的節點控制。一般來說,聯盟鏈適合于跨機構的交易、結算、協同辦公及存證等B2B場景[5]。
3 共識算法分析
3.1主流的共識算法
3.1.1 Paxos和Raft算法
Paxos算法解決的問題是一個分布式系統如何就某個值(決議)達成一致,一種基于選舉領導者的共識機制。領導者狀態的共識節點擁有絕對權限,并允許強監管節點參與,性能高,資源消耗低。所有節點一般有線下準入機制,但選舉過程中不允許有作惡節點,不具備容錯性。
由于Paxos難于理解,加上難以實現,其簡化版本Raft應運而生。Raft更注重協議的可理解性和落地性,其特點是任何時刻最多只有一個合法領導者,可容錯節點數為N/2-1。兩個共識機制面向應用領域為數據庫,在個別節點宕機情況下確保數據一致[6]。
3.1.2 工作量證明算法(PoW)
工作量證明機制用來確認某個節點做過一定量的工作,是一種應對拒絕服務攻擊和其它服務濫用的經濟對策。它要求發起者進行一定量的運算,也就意味著需要消耗計算機一定的計算資源,該理論是1993年Cynthia Dwork和Moni Naor首次提出的[7]。
3.1.3 股權證明(PoS)
PoS主要思想是節點記賬權的獲得難度與節點持有的權益成反比,相對于PoW,一定程度減少了數學運算帶來的資源消耗,性能也得到了相應的提升,但依然是基于哈希運算競爭獲取記賬權的方式,可監管性弱,該共識機制容錯性和PoW相同[8]。
3.1.4 授權股權證明(DPoS)
DPoS是對PoS機制的一種改進,其原理是通過投票選出一定數量的代表獲取記賬的權力,每個代表按照時間表記賬,記賬結束后會獲取對應的報酬。投票權重以投票人持Token比例為準,整個共識依賴于代幣機制[9]。
3.1.5 權威證明(PoA)
PoA算法初期形成可設定具有投票權或者簽名權的認證節點,區塊鏈上的新發生交易需經過認證節點簽名后才能夠完成上鏈廣播,對于后期新加入的節點,認證節點也可通過簽名投票來決定是否允許新節點的加入。PoA共識算法由于減少了共識達成的計算成本,可以極大地提升速率,但是由于其缺少對區塊驗證的步驟,所以一旦有惡意節點,往往在發生事故后才能察覺。
3.1.6 實用拜占庭算法(PBFT)
PBFT與Paxos類似,也是一種采用許可投票、少數服從多數來選舉領導者進行記賬的共識機制。實用拜占庭算法允許強監管節點參與,具備權限分級能力,性能更高,耗能更低。該算法每輪記賬都會由全網節點共同選舉領導者,允許33%的節點作惡[10]。
3.2 共識算法性能對比
在區塊鏈系統中,效率、安全和去中心化三方是無法都兼顧的。主流共識機制在這三方面都選擇不同程度側重,但側重的最終表現形式一般為TPS、成本、分叉、權限和拜占庭容錯這五個方面。各個共識機制特點對比如表1所示。
Paxos、Raft和PoA算法主要面對節點宕機情況,而不考慮惡意節點篡改數據,缺乏監督無法解決拜占庭容錯問題,所以這些算法僅適合高信任度的情況;PoW雖然能應對拜占庭容錯問題,但是耗時耗能;PoS與PoW相比在一定程度上減少能源消耗,但依然需要挖礦。DPoS共識需要依賴Token,而很多商業模式并不需要Token;PBFT雖然可以應對惡意節點攻擊,但是其網絡結構是靜態類型,如果動態增加節點,則必須重啟應用,造成不必要的性能損失[11]。
4 改進型聯盟鏈共識算法
4.1 目前聯盟鏈面臨的困境
目前,針對聯盟鏈提出的共識算法非常少,已知聯盟鏈使用的共識算法有以太坊測試網PoA共識機制和Hyperledger的排序算法。但由于參與聯盟鏈的節點都是信任節點,這些算法為了追求效率而放棄對區塊的驗證。但是,如果一個共識完全忽視對區塊的驗證,那區塊鏈應用的場景將大幅度減少。即便是對信任要求極高的聯盟鏈,在理論上也存在出現惡意節點或者某節點被黑客操控的可能。
所以在實際聯盟鏈系統設計中,為了保障信息安全,往往在應用層增加多種加密措施。這樣做費時費力,為系統設計添加不必要的研發成本,也阻礙了區塊鏈服務實體的發展。
4.2 改進型共識流程
鑒于目前聯盟鏈困境,本文為聯盟鏈提出一種高效、安全和低成本的共識機制,共識流程如圖2所示。
在一切正常的情況下,該改進型共識流程分為六步。
(1)在創始區塊中指定一組初始授權的共識節點,在系統啟動后共識節點加入或移除需要通過投票表決。
(2)當系統啟動后,共識節點開始產生區塊并簽名廣播。通過優先級算法保證每一個即將產生的區塊都有一個共識節點處于優先狀況,該共識節點會優先廣播區塊,其他共識節點必須經過一段延遲才能廣播從而避免了系統分叉。再通過一定的算法確保一個共識節點不能連續地出塊。
(3)共識節點只有打包和廣播的權力,但最終寫入區塊鏈賬本需要經過驗證節點的驗證。驗證節點驗證該區塊是否合法,如果合法則寫入區塊鏈,否則發起移除負責該區塊的共識節點提案。
(4)該提案通過廣播的方式傳給所有共識節點。所有共識節點對該提案進行投票,如果發現該節點是惡意節點,則投贊成,否則投反對。若該提案有超過50%的共識節點表示贊同,則移除該節點,否則對驗證節點進行檢查并且強制驗證節點阻止的區塊寫入區塊鏈賬本。
(5)寫進區塊鏈賬本的區塊除了驗證節點的簽名,也需要共識節點的簽名。如果區塊有投票通過的簽名,則直接寫入賬本。
(6)新的共識節點的加入也通過驗證節點提案的方式,當超過50%的共識節點表示贊同時,新的節點加入到共識節點中。
4.3 改進型共識設計
4.3.1 區塊結構設計
在本文提出的共識機制里區塊結構至少由幾個部分組成的:一些相關信息片段組成的集合稱為Header,即區塊頭;一個個交易Transaction組成Body,即區塊體,這部分占據區塊大小的主要部分;剩余部分為票數統計,這部分稱作Votes,區塊結構如圖3所示。
(1)區塊頭
區塊的驗證主要通過驗證區塊頭的方式,是區塊中最重要的部分。區塊頭包含的參數信息涉及幾個方面。
ParentHash:父區塊頭的Keccak256位哈希。
StateRoot:所有交易被執行完且區塊定稿后的狀態樹(State Trie)根節點的Keccak256位哈希。
TransactionsRoot:由當前區塊中所包含的所有交易所組成的樹結構(Transaction Trie)根節點的Keccak256位哈希。
ReceiptsRoot:由當前區塊中所有交易的數據所組成的樹結構(Receipt Trie)根節點的Keccak256位哈希。
Priority:區塊優先級,值為1或者2。同一個高度的區塊,只有一個共識節點為2,2的優先級最高。
Number:當前區塊的祖先的數量,創世區塊里這個數值為0。
ExtraData:存儲當前共識節點集合的地址。
(2)區塊體
區塊體由各個交易組成,需要包含交易全部內容,所占空間最大,系統區塊體結構參數如下:
From:交易發起人地址;
To:交易接收人地址;
Signature:交易發起人簽名;
Value:交易內容;
Nonce:標志唯一性。
(3)Votes
Votes部分負責記錄投票信息,在沒有惡意節點的情況下該部分為0,Votes包含的參數信息涉及幾個方面。
From:投票人地址。
Beneficiary:被提名為共識節點的節點地址,在正常情況下為0,僅在投票時修改。
VoteHash:投票區塊哈希。
HV:發起投票區塊的高度。
VoteType:投票類型,加入或移除。
Signature:投票簽名。
4.3.2 區塊存儲
本文的共識機制區塊和交易等數據選擇存儲在LevelDB數據庫中。LevelDB是Google開源的KV(Key Value,存儲的數據都是KV的形式)單機數據庫,即交易數據會以鍵值對方法存儲在LevelDB中。其中,Key一般與Hash相關,Value一般是要存儲的數據結構的RLP編碼,且區塊存儲時將區塊頭和區塊體分開存儲。對于區塊頭存儲格式中的Key由區塊頭前綴、區塊號(Uint64大端格式)、區塊Hash構成,Value是區塊頭的RLP編碼。區塊體的存儲包括Key由區塊體前綴、區塊號(Uint64大端格式)、區塊Hash構成,Value是區塊體的RLP編碼。Votes部分同理,三者通過Key值的前綴進行區分,具體流程如圖4所示。
對數據庫數據進行讀寫及修改等操作時首先要初始化數據庫,同時配置數據庫基本參數如Open Files Cache Capacity、Block Cache Capacity、Write Buffer、Filter等,其意義分別是打開文件數(默認1024)、區塊緩存容量(默認384MB)、Memtable容量(默認192MB)、Level文件哈希數(默認10次)。此外,LevelDB在數據寫入時先將數據寫入Batch后再寫入LevelDB,這樣做的好處是減少數據的交互次數,提高數據存儲效率。
4.3.3 區塊驗證
驗證節點在驗證新的區塊時,僅驗證其區塊頭。節點會從區塊頭的Extra Data字段中取出認證節點的簽名,利用標準的spec256k1橢圓曲線進行反解公鑰信息,并且從公鑰中截取出簽發節點的地址,若該節點是共識節點,且該節點本輪擁有簽名的權限,則認為該區塊為合法區塊。此外,驗證節點自己也會搜集這段時間的交易,通過驗證Merkle樹的方式確保區塊內容正確,如果沒有錯誤,將區塊打入區塊鏈賬本。
5 結束語
聯盟鏈在未來有很強的應用場景,但是目前缺少專門針對聯盟鏈的共識機制。本文總結對比目前主流共識機制的不足,基于聯盟鏈的特點和要求提出一種改進型共識機制。新的共識機制將驗證與打包區塊功能分開,提高效率的同時又確保了系統能夠及時發現錯誤。
共識機制作為區塊鏈應用最核心和關鍵的組成部分,目前已經成為區塊鏈技術發展的瓶頸[12]。由于應用場景的多種多樣,各個共識機制無法面面俱到。本文提出的共識也僅適用在信任度較高的情況,未來區塊鏈如何結合實體經濟仍然值得大家的關注。
參考文獻
[1] 徐治理,封化民,劉飚.一種基于信用的改進PBFT高效的共識機制[J].計算機應用研究, 2019,36(10).
[2] 李劍峰.基于拜占庭容錯機制的區塊鏈共識算法研究與應用[D].鄭州大學, 2018.
[3] Nguyen QK. Blockchain – A Financial Technology for Future Sustainable Development[C].International Conference on Green Technology and Sustainable Development.IEEE,2016.51-54.
[4] 袁勇,王躍飛.區塊鏈技術發展現狀與展望[J].自動化學報,2016,42(4):481-494.
[5] 王朔.區塊鏈技術在金融領域的研究現狀及創新趨勢[J].上海金融,2016(2):26-29.
[6] 李哲.基于區塊鏈的電子發票云平臺構建研究[D].中國財政科學研究院,2018.
[7] 鄒均.區塊鏈技術指南[M].北京:機械工業出版社,2016:69-78.
[8] 陳何清.基于區塊鏈的IMIX傳輸系統的設計與實現[D].南京大學,2016.
[9] WOOD G. Ethereum: A secure decentralized generalized transaction ledger[EB/OL].Ethereum Project Yellow Paper,2014,[2017-06-07].http://gavwood.com/paper.pdf
[10] 梅晨.基于區塊鏈的物聯網安全平臺的設計與實現[D].北京郵電大學,2018.
[11] 楊茜.基于區塊鏈的智能合約研究與實現[D].西南科技大學,2018.
[12] 范捷,易樂天,舒繼武.拜占庭技術研究綜述[J].軟件學報,2013,6:012.
作者簡介:
曹兆磊(1995-),男,漢族,江蘇鹽城人,南京郵電大學,學士,工程師;主要研究方向和關注領域:區塊鏈系統方案設計與測試。