劉 琪,郭榮新*,蔣文賢,馬登極
(1.華僑大學 信息科學與工程學院,福建 廈門 361021;2.華僑大學 計算機科學與技術學院,福建 廈門 361021;3.杭州復雜美科技有限公司,杭州 310061)
中本聰于2008 年11 月1 日發(fā)表一篇關于闡述比特幣原理的白皮書《比特幣:一種點對點式(Peer-to-Peer,P2P)的電子現(xiàn)金系統(tǒng)》[1],提出一種基于點對點技術的電子現(xiàn)金系統(tǒng),使網(wǎng)上支付由一方發(fā)起,直接支付給另一方,這個過程沒有通過任何的金融機構。如果在第三方的監(jiān)督下才能解決雙重支付的問題,那么中本聰提出的這個系統(tǒng)將沒有意義。第三方或者中介機構的信任問題一直存在,區(qū)塊鏈[2]的出現(xiàn)旨在解決信任問題,它被稱作是“信任的機器”。
區(qū)塊鏈技術包括分布式存儲技術、密碼學技術、智能合約和共識機制等,具有數(shù)據(jù)不可篡改、信息可追溯、公開透明、集體維護、匿名性等特點。隨著近幾年區(qū)塊鏈技術的快速發(fā)展,區(qū)塊鏈的應用不再局限于金融領域,目前已經(jīng)滲透于各行各業(yè),比如存證溯源、政務、資產(chǎn)數(shù)字化、智慧監(jiān)管等領域。盡管區(qū)塊鏈技術迅猛發(fā)展,但是在去中心化的架構下仍然存在性能和交易吞吐量等問題,區(qū)塊鏈只有解決此類問題才能有更大規(guī)模的落地。Chain33、Polkadot[3]、Cosmos[4]均使用類似的跨鏈技術[5]來解決區(qū)塊鏈面臨的性能問題。Cosmos 的技術模式與Chain33 和Polkadot 不同,對于使用者來說門檻更高,每個使用者都要組共識、搭節(jié)點,并且鏈上數(shù)據(jù)維護成本高,而Chain33 成本相對較低可快速部署。Chain33 和Polkadot 都是平行鏈模式均采用平行鏈架構,Polkadot 目前在測試網(wǎng)階段,從Polkadot 發(fā)展規(guī)劃來看,Chain33 目前已經(jīng)實現(xiàn)的資產(chǎn)跨鏈流通等功能,相對領先1~2 年。
Polkadot 最早提出平行鏈的概念是為了解決區(qū)塊鏈在互操作性、可擴展性以及共享安全性方面存在的弊端,但到目前為止還沒有實際的應用落地。平行鏈的概念最早由杭州復雜美科技有限公司提出,百度等也在白皮書中引入這個概念。Chain33 是由杭州復雜美科技有限公司創(chuàng)建的區(qū)塊鏈底層系統(tǒng),Chain33 首創(chuàng)的平行鏈架構中平行鏈依附于主鏈并且使用主鏈的共識網(wǎng)絡,復雜的功能在平行鏈上完成,主鏈只做數(shù)據(jù)存儲和共識,即使出現(xiàn)性能問題或者智能合約受到攻擊,也僅破壞平行鏈不會影響主鏈的安全;由于主鏈的安全性極高,因此平行鏈的所有數(shù)據(jù)可以從主鏈同步回來。同時平行鏈也是在主鏈的基礎上搭建的區(qū)塊鏈,可以發(fā)展獨立的區(qū)塊鏈生態(tài),擁有自己的節(jié)點和部分共識、能夠編寫多種智能合約、擁有獨立的錢包、擁有獨立的區(qū)塊鏈瀏覽器等;基于主鏈統(tǒng)一的交易共識,不論是平行鏈和主鏈,還是不同的平行鏈之間的跨鏈資產(chǎn)都可以做到無縫轉移,使之前的跨鏈時間從小時分鐘級別縮小到幾秒,跨鏈效率高。Polkadot 與Chain33 平行鏈對比分析如表1 所示。
表1 Polkadot與Chain33平行鏈的對比分析Tab.1 Comparative analysis of Polkadot and Chain33 parallel chain
比特元(BiTYuan,BTY)是一種簡單穩(wěn)定、可擴展性強的公有鏈網(wǎng)絡。比特元區(qū)塊鏈的研發(fā)基于Chain33 底層架構,是全球首個實現(xiàn)平行鏈架構的公有鏈網(wǎng)絡。在比特元區(qū)塊鏈上,以比特元為主鏈向外延伸多條平行鏈,將不同的交易分散到不同的平行鏈上執(zhí)行,分擔主鏈的運算負荷,同時提升整個系統(tǒng)的運行效率。比特元上的各條平行鏈既可獨立開發(fā)去中心化應用(Decentralized Application,DApp),建設多樣化的應用生態(tài),又可實現(xiàn)多鏈間的跨鏈交易和數(shù)據(jù)交換功能。在比特元中交易首先發(fā)送到主鏈被共識打包,隨后同步到平行鏈上被執(zhí)行,最后將執(zhí)行結果的hash 寫回主鏈進行共識,實現(xiàn)交易并行執(zhí)行提升系統(tǒng)吞吐量TPS(Transactions Per Second),在此過程中BTY 是交易必需的燃料。本文以比特元區(qū)塊鏈網(wǎng)絡為例介紹Chain33 平行鏈架構以及結合BLS聚合簽名技術對平行鏈共識算法做優(yōu)化。
共識機制在去中心化的思想上解決了節(jié)點之間相互信任的問題,是區(qū)塊鏈能夠穩(wěn)定持續(xù)運行下去的主要力量。目前區(qū)塊鏈中常用的共識算法[6]可分為兩大類:公有鏈和許可鏈。公有鏈的典型代表有工作量證明(Proof-of-Work,PoW)[7]、權益證明(Proof-of-Stake,PoS)[8]以及股份授權證明(Delegate Proof of Stake,DPoS)[9-10];許可鏈的典型代表有實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)[11]和(Replicated And Fault Tolerant)[12]。對上述共識算法從去中心化程度、容錯率、資源消耗以及吞吐量等方面作簡單對比分析,如表2 所示。
表2 區(qū)塊鏈常用共識算法的對比分析Tab.2 Comparative analysis of commonly used consensus algorithms in blockchain
這些常用的共識算法都可應用于主鏈中,而平行鏈中每個超級節(jié)點都會向主鏈提供共識交易。n個超級節(jié)點的共識結果在主鏈達成共識,共識的規(guī)則是2/3 的超級節(jié)點結果一致,第2 章將詳細介紹平行鏈的共識算法。
圖1 展示了主鏈+平行鏈架構,該架構中一條主鏈附屬多條平行鏈,每條平行鏈只與主鏈交互,各條平行鏈之間互相不干涉對方的交易。平行鏈的共識流程為:首先共識交易在主鏈上被打包;緊接著平行鏈上的超級節(jié)點從主鏈同步共識交易,并打包交易數(shù)據(jù)生成區(qū)塊同時上傳上鏈請求;然后主鏈上的節(jié)點廣播共識交易并驗證共識結果的正確性;最后平行鏈上的所有節(jié)點同步交易數(shù)據(jù)。
圖1 主鏈+平行鏈架構Fig.1 Main chain+parallel chain architecture
主鏈+平行鏈架構具有如下幾個特點:
1)高效性:平行鏈發(fā)送共識交易到主鏈上進行共識驗證和數(shù)據(jù)存儲,多條平行鏈交易并行處理,共識效率大幅提升。
2)穩(wěn)定性:平行鏈上運行復雜的功能,主鏈只做存證等一些核心功能,整個架構簡單穩(wěn)定。
3)安全性:平行鏈的安全由主鏈保障,當智能合約或虛擬機被攻擊時僅破壞平行鏈,平行鏈上的所有數(shù)據(jù)可以快速從主鏈同步,從而保證數(shù)據(jù)完整不被更改。
4)高擴展性:平行鏈擁有自己的生態(tài),能在鏈上發(fā)行自己的通證(token),相當于一條獨立自主的公鏈,并且支持主鏈和平行鏈跨鏈和平行鏈之間的跨鏈交易。
Chain33 平行鏈上的節(jié)點有授權節(jié)點、超級節(jié)點、監(jiān)督節(jié)點和普通節(jié)點4 種角色,下面對它們分別進行介紹。
1)授權節(jié)點。
授權節(jié)點是參與共識、發(fā)送共識交易的節(jié)點。不是所有的節(jié)點都有權限發(fā)送共識交易,只有授權節(jié)點可以發(fā)送共識交易,普通節(jié)點沒有權限發(fā)送共識交易。
2)普通節(jié)點。
普通節(jié)點不發(fā)送共識交易,只接收共識交易并校驗共識結果,以此體現(xiàn)區(qū)塊鏈分布式一致性校驗的設計思路,即授權節(jié)點負責共識安全,普通節(jié)點保持和授權節(jié)點一致,所有節(jié)點協(xié)同統(tǒng)一。
3)超級節(jié)點。
超級節(jié)點負責平行鏈的共識安全,并得到一定的挖礦獎勵,每個超級節(jié)點都會向主鏈發(fā)送共識交易,n個超級節(jié)點達成共識的規(guī)則是超過2/3 的超級節(jié)點共識結果一致;只有有了超級節(jié)點共識,平行鏈的跨鏈功能才可以啟用。
4)監(jiān)督節(jié)點。
監(jiān)督超級節(jié)點的共識過程,防止超級節(jié)點聯(lián)合作弊。當超級節(jié)點的共識結果和監(jiān)督節(jié)點的結果不一致時,暫停共識,直到超級節(jié)點或監(jiān)督節(jié)點修正共識結果達成共識為止。
主鏈上的共識算法有多種,比如在公有鏈中使用PoS,在聯(lián)盟鏈中使用Tendermint 或PBFT,在私鏈中使用RAFT。平行鏈上的共識算法與主鏈使用的共識算法不同,主要的區(qū)別是平行鏈依賴于主鏈的共識網(wǎng)絡,主要過程為平行鏈授權節(jié)點或超級節(jié)點發(fā)送共識交易到主鏈上進行共識,然后再同步共識交易到平行鏈進行自共識驗證,共識規(guī)則為超過2/3節(jié)點共識結果一致則達成共識,自共識不通過的平行鏈節(jié)點將停止生成區(qū)塊。
表3 詳細描述了平行鏈共識過程之前先設定共識過程中涉及的符號及其含義。
表3 符號及其含義Tab.3 Symbols and their meanings
目前平行鏈的共識算法如下所示。
1)各參數(shù)的設定。
①設平行鏈上待共識的區(qū)塊為B1;
②設第一 平行鏈 為p_chain1(x1,x2,…,xn),其 中x1,x2,…,xn稱為超級節(jié)點,并且滿足n≥3f+1,f∈N+;
③設p_chain1(x1,x2,…,xn) 對應的 主鏈為C1(X1,X2,…,Xn);
④ 待共識的區(qū)塊B1中包含的若干信息有:狀態(tài)哈希s_hash、簽名信息S、待共識的區(qū)塊高度H和打包各交易的狀態(tài)信息MS;
⑤ 各超級節(jié)點(x1,x2,…,xn)打包B1的若干信息生成區(qū)塊信息BMi={s_hash_i,Hi,Si,MSi};
⑥ 達成共識的節(jié)點數(shù)設為Num。
2)共識過程。
①x1,x2,…,xn分別將BM1={s_hash_1,H1,S1,MS1},BM2={s_hash_2,H2,S2,MS2},…,BMn={s_hash_n,Hn,Sn,MSn} 發(fā)送至主鏈C1上對應節(jié)點x1,x2,…,xn處。由于發(fā)送1 筆共識交易將產(chǎn)生0.001 BTY 的手續(xù)費,因此n個共識節(jié)點發(fā)送n筆共識交易需產(chǎn)生0.001nBTY 的手續(xù)費。
②x1,x2,…,xn將BM1,BM2,…,BMn記錄到主鏈上并互相廣播。
③X1,X2,…,Xn每個節(jié)點有R1,R2,…,Rn這n筆共識交易的全部內(nèi)容,由于1 筆共識交易占用4 KB 的存儲空間,因此n筆共識交易共占用主鏈4nKB 的存儲空間。
④ 此時進行共識驗證,x1,x2,…,xn從C1同步共識交易Tx={BM1,BM2,…,BMn},此時p_chain1(x1,x2,…,xn)上每個節(jié)點都含有其他節(jié)點的共識交易信息。
⑤p_chain1進行自共識,若Num≥n*2/3,即{BM1,BM2,…,BMn}中至少有n*2/3 個區(qū)塊信息相同則達成共識。
⑥ 假設滿足閾值,達成共識,共識結果為R={s_hash,H,S,MS}生成的共識標識為u,共識高度為H。
由2.3 節(jié)可知平行鏈的共識過程為雙層共識,首先平行鏈交易發(fā)送到主鏈上進行共識打包;然后平行鏈同步主鏈的區(qū)塊并選取與本平行鏈有關的交易執(zhí)行,再將區(qū)塊哈希發(fā)送到主鏈上做共識;最后平行鏈上的節(jié)點同步主鏈的共識交易進行二次共識。平行鏈共識全過程的缺陷分析如下:
1)平行鏈上的超級節(jié)點越多,發(fā)送到主鏈上的共識交易就越多,多筆相同的共識交易將占據(jù)主鏈大量的存儲空間;并且多條平行鏈依附于一條主鏈,主鏈上交易記錄的越多,主鏈的交易處理能力[13]就越弱。
2)平行鏈上的超級節(jié)點每發(fā)送一次共識交易到主鏈上就會產(chǎn)生一筆手續(xù)費,當多個超級節(jié)點同時發(fā)送共識交易則會產(chǎn)生多筆手續(xù)費,同時消耗大量的資源。
在平行鏈聚合簽名方案中,需要選取一個Leader 節(jié)點發(fā)送整個共識交易,并且支持輪換操作。
當前的一些Leader 節(jié)點選取算法比較復雜,比如有權重設計,或者不支持輪換操作,只讓一個節(jié)點發(fā)送共識交易,可能只消耗一個節(jié)點的手續(xù)費,不具備公平性。此處通過對比RAFT[14]中的Leader 節(jié)點選取方案可知,在RAFT 共識機制中,Leader 節(jié)點選舉成功后會不斷地向follower 跟隨節(jié)點發(fā)送心跳消息,選舉周期將會一直持續(xù)到某個follower 節(jié)點沒有收到心跳消息并成為candidate 候選節(jié)點為止,這時開啟下一輪Leader 節(jié)點的選舉。由于RAFT 中Leader 節(jié)點任期時間無法確定并且不支持輪換操作,每個節(jié)點消耗的手續(xù)費差別大,因此不適用于平行鏈的共識算法。針對上述不足,設計較為輕量的Leader 節(jié)點選舉和輪換機制,保證系統(tǒng)穩(wěn)定。
決定Leader 節(jié)點的因素是高度(height)和偏移(offset),當offset=0 時,有關超級節(jié)點中Leader 節(jié)點的選舉和輪換機制如下。
1)平行鏈各個超級節(jié)點配置成功后,順序固定,依次作為Leader 節(jié)點。
2)假設現(xiàn)有超級節(jié)點A、B、C、D,對應的索引依次為0、1、2、3。
3)現(xiàn)設置初始Leader 節(jié)點索引為0,即base=0,每隔一定共識高度輪換下一個節(jié)點為Leader 節(jié)點,假設每隔100 高度做一次輪換。
4)設置base=(height/100)%nodes,得到當前共識高度下Leader 節(jié)點的索引,height依次增長,base也依次增長。
5)Leader 節(jié)點需要每隔一段時間比如t=5 s 發(fā)送心跳消息,向其他節(jié)點聲明自己是Leader 節(jié)點;同時其他非Leader 節(jié)點也在等待接收心跳消息。
6)Leader 節(jié)點每隔5 s 發(fā)送一次心跳消息,只要非Leader節(jié)點在1 min 以內(nèi)能夠收到一次心跳消息就不用做offset偏移;如果非Leader 節(jié)點在1 min 之內(nèi)沒有收到來自Leader 節(jié)點的心跳消息,那么設置一個offset偏移值,令offset=(offset+1)%nodes,并 且Leader=(offset+base)%nodes可 以唯一確定一個新的Leader 節(jié)點。
這種情況又分為以下兩類。
1)Leader 節(jié)點確實沒有發(fā)送心跳消息,非Leader 節(jié)點重新選取下一個Leader 節(jié)點;若本節(jié)點發(fā)現(xiàn)自己是Leader 節(jié)點,則廣播心跳消息。
2)如果僅自己沒有收到心跳消息,其他非Leader 節(jié)點都收到心跳消息,那么僅該節(jié)點偏移Leader 節(jié)點,直到自己是Leader 節(jié)點為止,廣播心跳消息。
但這樣會出現(xiàn)兩個Leader 節(jié)點的情況,如果同時有多個不同Leader 節(jié)點的心跳消息,則節(jié)點會和自己索引作比較。
①若兩個base索引不同,則不處理,說明兩個Leader 節(jié)點不是同樣的共識高度。
②若base相同,offset不同,如果自己的offset索引比較小,則接受大的Leader 節(jié)點索引為Leader,具體為設置新的offset;如果自己offset比較大,則不處理。
這樣在處理一些僵尸節(jié)點的時候,系統(tǒng)會自動切換到下一個節(jié)點為Leader 節(jié)點繼續(xù)服務,發(fā)送共識消息;因為共識height不變,所以此時base也不變,只是offset改變發(fā)生偏移。
當共識高度超過預先設置的間隔之后,base才會發(fā)生改變,從而更新下一個Leader 節(jié)點,保持系統(tǒng)共識穩(wěn)定。
BLS(Boneh-Lynn-Shacham)簽名算法由Boneh 等[15]提出,BLS 簽名無需隨機數(shù)生成器即可實現(xiàn)聚合多個簽名以及m-n多重簽名,同時減少節(jié)點間的多余通信開銷。該簽名算法有兩個基本概念:曲線哈希和曲線配對即雙線性映射e函數(shù)[16-17]。
BLS 簽名算法與橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm,ECDSA)和Schnorr 簽名算法不同:在ECDSA 和Schnorr 簽名中對消息求哈希的結果是數(shù)值;而在BLS 簽名算法中用新型散列函數(shù)對消息求哈希,并將得到的結果映射到橢圓曲線的一個點上[18]。
雙線性映射e函數(shù)由六元組η=(G1,G2,GT,n,e,g1,g2)組成,G1和G2是階為p的加法循環(huán)群,GT是具有相同階的乘法循環(huán)群。g1是加法群G1的生成元,g2是加法群G2的生成元。e是雙線性映射,需要進行曲線配對,則有G1×G2→GT。設P,Q為曲線上的兩個點,?a,b∈Zp,則滿足以下性質(zhì):
可見,配對函數(shù)對曲線上的運算滿足分配律、交換律和結合律。
BLS 簽名過程如下:假設待簽名的消息為m,私鑰為k,公鑰P=k*G;求簽名S時,先對消息m求哈希后映射到橢圓曲線上,得到曲線哈希H(m),再乘以私鑰k即得S=k*H(m)。公鑰P驗證簽名S,則有:
本文采用BLS 聚合簽名技術對平行鏈共識算法進行優(yōu)化。假設Leader 節(jié)點要聚合N個超級節(jié)點的簽名,由于平行鏈共識的特點是簽名不同共識數(shù)據(jù)相同,因此共識交易設為M,對共識交易求曲線哈希可得H(M),ki為私鑰,可得公鑰Pi=ki*G,聚合簽 名Si=ki*H(M),則需驗 證e(G,Si)=e(Pi,H(M))成立。驗證過程如下:
傳統(tǒng)的平行鏈共識算法是平行鏈的每個共識節(jié)點都發(fā)送共識交易。優(yōu)化方案是平行鏈的共識節(jié)點先內(nèi)部發(fā)送共識交易并附上BLS 簽名數(shù)據(jù);再由Leader 節(jié)點整合共識交易并聚合交易簽名;最后將新的共識交易發(fā)送到主鏈上驗證,同時結合BLS 聚合簽名技術防止篡改的發(fā)生。這種共識算法既節(jié)省區(qū)塊空間、節(jié)約手續(xù)費,還能夠保證系統(tǒng)的安全。
設平行鏈為p_chain_1,平行鏈上的共識節(jié)點n需滿足n≥3f+1,f∈N+。預配置的聚合簽名算法為BLS 簽名算法,BLS 簽名是利用雙線性對構造的一種短簽名方案;預配置授權賬戶組,根據(jù)x1,x2,…,xn順序依次設置平行鏈上節(jié)點的索引為0,1,…,n-1(n≥4)。
共識算法流程如圖2 所示。
圖2 優(yōu)化后的平行鏈共識算法流程Fig.2 Flow chart of parallel chain consensus algorithm after optimization
1)系統(tǒng)設置。令q為大素數(shù),加法循環(huán)群G1和乘法循環(huán)群G2為q階,P是G1的生成元,Q是G2的生成元;雙線性映射為e=G1×G2→GT,定義散列函數(shù)H0:{0,1}*→G1。
2)生成共識內(nèi)容并提取密鑰。假設平行鏈待共識的區(qū)塊為p_block(100),其對應的主鏈區(qū)塊為block(200)。以平行鏈P1上的節(jié)點x1為例說明,x1從block(200)同步p_chain_1 的各筆交易Tx=(tx1,tx2,…,txn),x1打包Tx并生成p_block_x1,計 算p_block_x1獲得共 識內(nèi)容msg(100)_x1={block_hash,height,bitmap}。BLS 簽名需 要的私鑰為Secp265k1 的1/2,采用Secp265k1 私鑰不斷取hash直到滿足BLS 范圍為止作為BLS 私鑰,令節(jié)點x1的私鑰為xa,則x1的公鑰為Pub_bls_x1=ka*P。
3)簽名。x1根據(jù)BLS 聚合簽名算法對msg(100)_x1進行簽名獲得簽名數(shù)據(jù)bls_(msg(100)_x1)=ka*H(msg(100)_x1)。
4)對交易內(nèi)容求哈希并映射到曲線上。H(msg(100)_x1)=H(block_hash‖height‖bitmap)。
5)預設授權賬戶組。x1,x2,…,xn按序排列并設置索引為0,1,…,n-1,一一對應于 BLS 公 鑰Pub_bls_x1,Pub_bls_x2,…,Pub_bls_xn。
6)廣播。x1將msg(100)_x1+bls_(msg(100)_x1)廣播給其他節(jié)點x2,x3,…,xn;同理x2,x3,…,xn節(jié)點也作如上運算操作。在x1,x2,…,xn都正常運行的情況下,對x1而言已收到其他節(jié)點的共識內(nèi)容和簽名信息{msg(100)_x2+bls_(msg(100)_x2),msg(100)_x3+bls_(msg(100)_x3),…,msg(100)_xn+bls_(msg(100)_xn)} 。
7)自共識 。各個節(jié) 點的共 識內(nèi)容msg(100)_x1,msg(100)_x2,…,msg(100)_xn在內(nèi)部進行自共識。若x1不同,其余都相同,則Num=n-1 ≥2/3*n(n≥4),達成共識,共識內(nèi)容為msg(100)。
8)聚合簽名。聚合達成共識的節(jié)點,其簽名數(shù)據(jù)為bls_(msg(100)_x2)+bls_(msg(100)_x3)+… +bls_(msg(100)_xn),在之前設置好的授權賬戶組中,令達成共識為1,未達成共識為0,即bitmap=(0,1,1,1,…,1)。
9)聚合后 的共識交易。Tx100={msg(100),bls(msg(100_x2)+bls(msg(100_x3)+… +bls(msg(100_xn)},bitmap=(0,1,1,1,…,1)。
10)驗證聚合簽名正確性。由Leader 節(jié)點將Tx100 發(fā)送至主鏈上,主鏈節(jié) 點根據(jù)bitmap=(0,1,1,1,…,1) 授 權賬 戶組查找對應的BLS 公鑰可得到{Pub_bls_x2,Pub_bls_x3,…,Pub_bls_xn},聚合簽名公鑰得{Pub_bls_x2+Pub_bls_x3+… +Pub_bls_xn=},結合共識內(nèi)容msg(100)判斷:
是否正確。
下面給出聚合簽名驗證過程的正確性證明。
因為式(5)的正確性被成功驗證,所以平行鏈上的各個共識節(jié)點可以先互相廣播發(fā)送共識交易達成共識,再由Leader 節(jié)點將達成的共識交易內(nèi)容與各節(jié)點的交易簽名聚合后發(fā)送到主鏈上;主鏈根據(jù)bitmap在預配置的授權賬戶組中查找到平行鏈的各共識節(jié)點所對應的BLS 公鑰,對聚合簽名驗證通過,且公鑰賬戶超過2/3 共識閾值,則共識通過,同時證明該優(yōu)化算法的可行性。
Chain33 是一套支持共識、數(shù)據(jù)庫、執(zhí)行器等可插拔、易升級的區(qū)塊鏈架構,本文基于Chain33 底層架構搭建平行鏈架構,通過Go 語言實現(xiàn)平行鏈共識算法的優(yōu)化。實驗環(huán)境配置如表4 所示。
表4 實驗環(huán)境配置Tab.4 Experimental environment configuration
本文實驗中設置4 個超級節(jié)點進行Leader 節(jié)點的選取,分別為A、B、C、D,對應的索引號分別為0、1、2、3,分別對Leader 節(jié)點選取過程中出現(xiàn)的3 種情況進行分析。
1)normal:正常情況。
2)case1-1:Leader 節(jié)點因本身故障在規(guī)定時間內(nèi)未發(fā)出心跳消息,進行offset偏移至下一個節(jié)點。
3)case1-2:Leader 節(jié)點因本身故障未在規(guī)定的時間內(nèi)發(fā)出心跳消息并且進行offset偏移至下一個節(jié)點處時,下一個節(jié)點仍發(fā)生故障再次進行offset偏移操作。
假設當Leader 節(jié)點為D 索引號為3 時未正常發(fā)出心跳消息,Matlab 仿真圖如圖3 所示。
圖3 Leader節(jié)點選取算法Fig.3 Leader node selection algorithm
分析圖3 可得,在normal 正常情況下隨著共識高度的增長每隔100 共識高度發(fā)生一次Leader 節(jié)點輪換操作,當Leader 節(jié)點為D、索引號為3 時,下一次輪換又回到節(jié)點為A、索引號為0 處,一直重復這種循環(huán);在case1-1 情況下,Leader 節(jié)點為D、索引號為3 時發(fā)生故障,此時進行offset偏移至下一個節(jié)點為A、索引號為0 處,此時A 正常;在case1-2情況下,進行offset偏移至A,但此時A 節(jié)點也出了故障,因此再次進行offset偏移至下個節(jié)點。由圖3 可知,無論發(fā)生哪種情況每個共識高度都只有唯一的一個Leader 節(jié)點,保證每次只有一個Leader 節(jié)點將共識交易發(fā)送到主鏈上且只收取一次交易手續(xù)費。
在平行鏈上分別設置4、7、10、13、16、19、22 個超級節(jié)點,從交易手續(xù)費、占用主鏈存儲空間、交易吞吐量以及時延這4 個方面進行測試,通過Matlab 對優(yōu)化前后的平行鏈共識算法仿真,如圖4 所示。
圖4 優(yōu)化前后不同指標對比Fig.4 Different indicators comparison before and after optimization
由圖4(a)可知,優(yōu)化前有n個超級節(jié)點發(fā)送n筆共識交易,收取n筆手續(xù)費0.01nBTY;優(yōu)化后僅由Leader 節(jié)點發(fā)送一筆共識交易,因此無論有多少個超級節(jié)點,只收取一筆手續(xù)費0.01 BTY。
由圖4(b)可知,優(yōu)化前n個共識節(jié)點會發(fā)送n筆共識交易到主鏈上參與共識,多筆共識交易會占用大量主鏈空間,n筆將占用4nKB 的存儲空間;優(yōu)化后,最終由Leader 節(jié)點發(fā)送一筆共識交易至主鏈,因此只占用主鏈區(qū)塊空間4 KB。
由圖4(c)可知,隨著超級節(jié)點數(shù)量的增多吞吐量均呈下降趨勢。優(yōu)化前下降速度更快,當超級節(jié)點更多時對其影響更大;優(yōu)化后吞吐量下降比較緩慢,當超級節(jié)點更多時,吞吐量可能僅有細微變化,最終曲線將接近水平狀態(tài),整體看來TPS 仍然會較高。
由圖4(d)可知,隨著超級節(jié)點數(shù)量的增多共識延時均呈增長趨勢。優(yōu)化前增長劇烈,超級節(jié)點數(shù)量越多發(fā)送到主鏈上的共識交易就越多,平行鏈上的節(jié)點進行二次共識的時間就越長,最終的共識時延也越長;而優(yōu)化后雖然增加了BLS 聚合簽名的過程但該過程不到1 ms,對整個共識的過程影響不大,因此共識時延增長緩慢。
共識算法是區(qū)塊鏈的核心技術,本文首先介紹區(qū)塊鏈主鏈的幾種常見共識算法,包括PoW、PoS、DPoS、PBFT;然后介紹平行鏈+主鏈的架構,即平行鏈共享于主鏈的共識網(wǎng)絡,一條主鏈可以附屬多條平行鏈,能夠實現(xiàn)交易并行執(zhí)行,保障系統(tǒng)運行的穩(wěn)定性和安全性;最后基于該架構對傳統(tǒng)平行鏈共識算法的缺陷進行分析,并且針對該缺陷設計基于BLS 聚合簽名的平行鏈共識優(yōu)化算法。該算法采用Leader 節(jié)點選取算法和BLS 聚合簽名算法,在保障系統(tǒng)安全性的前提下能夠有效解決多筆共識交易占用主鏈大量空間和浪費手續(xù)費的問題;同時在TPS 吞吐量和共識時延方面優(yōu)化后的平行鏈共識算法的性能也是優(yōu)于優(yōu)化前的平行鏈共識算法。這種優(yōu)化只是平行鏈共識算法性能提升的一種嘗試,未來還可以針對主鏈的共識算法作進一步改進,以此提升整個平行鏈架構的效率。