孫霓剛,湯晨楓,魯 力
(1.常州大學(xué)信息科學(xué)與工程學(xué)院,江蘇 常州 213164;2.電子科技大學(xué)計算機(jī)科學(xué)與工程學(xué)院,四川 成都 611731)
近年來,隨著比特幣、以太坊、瑞波幣等數(shù)字貨幣系統(tǒng)的興起,作為數(shù)字貨幣的技術(shù)支撐——區(qū)塊鏈技術(shù),因其所具備的網(wǎng)絡(luò)高度自治性、用戶信息的高度隱私性、數(shù)據(jù)的可追溯性等特點吸引了人們對于這一技術(shù)本身及其應(yīng)用場景的關(guān)注[1],我國也將區(qū)塊鏈技術(shù)列為核心技術(shù)自主創(chuàng)新的突破口[2]。
分布式領(lǐng)域最為基礎(chǔ)也是最重要的問題就是系統(tǒng)中節(jié)點的一致性問題,如果分布式系統(tǒng)中的節(jié)點能夠?qū)崿F(xiàn)“對外”一致性,則這些虛擬節(jié)點相較于物理節(jié)點能具備更優(yōu)越的性能和更高的系統(tǒng)穩(wěn)定性。區(qū)塊鏈本質(zhì)上是一個去中心化的分布式信息記錄系統(tǒng),由于缺少了可信的中心節(jié)點管理,如何在一個去信任的網(wǎng)絡(luò)環(huán)境下維護(hù)數(shù)據(jù)的一致性、實現(xiàn)交易信息不被篡改,這一問題在區(qū)塊鏈中被稱為共識問題。自區(qū)塊鏈誕生起,共識問題一直是區(qū)塊鏈研究的熱點與重點。
針對區(qū)塊鏈系統(tǒng)中的共識問題,Nakamoto提出通過工作量證明(Proof of work,POW)[3]的共識機(jī)制來解決這一問題。但POW共識機(jī)制也帶來了算力資源的消耗[4]。為了解決資源消耗問題,Sunny King等人提出通過權(quán)益證明(Proof of stake,POS)[5]來解決這一問題,但同時也產(chǎn)生了共識節(jié)點中心化以及共識節(jié)點作惡成本為0等其它問題。雖然后續(xù)依然出現(xiàn)很多針對POS共識機(jī)制的改進(jìn)方案[6],但這類基于資源證明的共識機(jī)制仍無法解決共識節(jié)點中心化與區(qū)塊鏈系統(tǒng)性能的權(quán)衡問題[7]。為了解決區(qū)塊鏈系統(tǒng)的性能問題,由Miguel Castro等人提出的PBFT(Practical Byzantine Fault Tolerance)一致性算法[8]被引入到區(qū)塊鏈系統(tǒng)中,該類共識機(jī)制是通過投票的方式來達(dá)成區(qū)塊鏈系統(tǒng)共識,通過視圖改變機(jī)制確保在系統(tǒng)共識節(jié)點較少的情況下,即使存在拜占庭錯誤節(jié)點,仍舊能夠確保共識過程的高效性和安全性。由于PBFT共識機(jī)制極大地提升了區(qū)塊鏈的系統(tǒng)性能,因此這一共識機(jī)制也被廣泛應(yīng)用到區(qū)塊鏈應(yīng)用場景的開發(fā)中[9]。
然而,隨著區(qū)塊鏈系統(tǒng)規(guī)模的增大,共識過程中通信次數(shù)的增加導(dǎo)致了PBFT共識機(jī)制達(dá)成共識所需時間上升,從而影響到區(qū)塊鏈系統(tǒng)性能。為了解決這一問題,Zamani M等人提出分片方案[10],通過將區(qū)塊鏈系統(tǒng)分割成多個子分區(qū)系統(tǒng),使得子系統(tǒng)能夠在網(wǎng)絡(luò)規(guī)模不大的情況下確保PBFT共識機(jī)制的效率。盡管分片方案在一定程度上解決了網(wǎng)絡(luò)規(guī)模對于區(qū)塊鏈系統(tǒng)性能的影響,但也帶來了跨分區(qū)交易、節(jié)點重配置等安全問題[11],而解決這些安全問題又會影響到區(qū)塊鏈的共識效率,甚至?xí)奚鼌^(qū)塊鏈系統(tǒng)的去中心化和節(jié)點高度自治的特性,這些問題也導(dǎo)致了當(dāng)前區(qū)塊鏈的分片方案大多停留在理論論證階段[12]。
為了在確保系統(tǒng)安全性的前提下解決網(wǎng)絡(luò)規(guī)模對PBFT共識機(jī)制的系統(tǒng)吞吐量的影響,向?qū)崿F(xiàn)區(qū)塊鏈系統(tǒng)性能與區(qū)塊鏈高速發(fā)展相匹配的這一最終目標(biāo)靠近,本文首次提出了一種融合了懲罰模型的K-確認(rèn)共識機(jī)制。實驗結(jié)果表明,文中提出的共識機(jī)制在確保區(qū)塊鏈系統(tǒng)安全性的基礎(chǔ)上,相較于PBFT共識機(jī)制能平均提升40%的系統(tǒng)吞吐量,而且隨著網(wǎng)絡(luò)規(guī)模的增大,這一提升效果可以提升60%甚至更多。
本文的主要貢獻(xiàn)分為以下三個部分:
1)為了減少驗證者的惡意行為,本文提出了觀察期+積分池的懲罰模型,并依據(jù)這一模型來設(shè)置驗證者的當(dāng)前狀態(tài),再通過驗證者的狀態(tài)來決定共識過程中驗證者的權(quán)力;
2)為了將驗證者的作惡行為作為懲罰模型的評判依據(jù),本文設(shè)計了雙鏈?zhǔn)降腄AG存儲架構(gòu);
3)為了在確保系統(tǒng)安全性的前提下提升區(qū)塊鏈的系統(tǒng)性能,本文提出了一種融合了懲罰模型的K-確認(rèn)共識機(jī)制,實驗結(jié)果表明這一共識機(jī)制在確保系統(tǒng)安全性的前提下,能夠有效提升區(qū)塊鏈的系統(tǒng)性能。
聯(lián)盟鏈[13]系統(tǒng)的運行流程如圖1所示,系統(tǒng)中的節(jié)點按功能被分為兩類:用戶節(jié)點和共識節(jié)點。用戶節(jié)點負(fù)責(zé)產(chǎn)生交易并將交易廣播到區(qū)塊鏈網(wǎng)絡(luò)中;共識節(jié)點負(fù)責(zé)接收交易,并按照共識機(jī)制流程完成交易驗證,所有的共識節(jié)點構(gòu)成了共識節(jié)點集合,交易驗證過程在共識節(jié)點集中進(jìn)行。
圖1 聯(lián)盟鏈系統(tǒng)的運行流程
PBFT共識機(jī)制是由Miguel Castro等人提出的一種分布式共識算法[8],主要解決了分布式系統(tǒng)下節(jié)點狀態(tài)的一致性問題。其具體流程如圖2所示,在這一共識過程中存在一個主節(jié)點,主節(jié)點負(fù)責(zé)將接收到的交易編號,然后將這些交易發(fā)送給共識節(jié)點,共識節(jié)點通過三個階段:預(yù)準(zhǔn)備階段、準(zhǔn)備階段、提交階段完成共識過程。
圖2 PBFT共識機(jī)制的執(zhí)行流程
1)預(yù)準(zhǔn)備階段:主節(jié)點對接收到的交易進(jìn)行編號,將交易及其編號廣播到驗證者集合中;
在聯(lián)盟鏈系統(tǒng)框架的基礎(chǔ)上,本文將區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點分為兩類:用戶節(jié)點和驗證者節(jié)點。用戶節(jié)點可以通過申請成為驗證者節(jié)點,申請過程無條件約束;所有的驗證者共同構(gòu)成驗證者集合,交易驗證過程在驗證者集合中進(jìn)行。
3.1.1 用戶節(jié)點
為了減少用戶節(jié)點的存儲負(fù)載,在本文設(shè)計的共識機(jī)制中,用戶節(jié)點只需存儲自身的交易信息。在交易驗證過程中,用戶只需將交易廣播到驗證者集合中。當(dāng)驗證者集合返回交易驗證結(jié)果后,用戶將對應(yīng)的交易加入到自身的交易鏈上。
3.1.2 驗證者節(jié)點
驗證者節(jié)點需要存儲區(qū)塊鏈系統(tǒng)中交易驗證的全部信息,本文將由驗證信息區(qū)塊構(gòu)成的鏈稱為驗證鏈。驗證者節(jié)點需要參與到交易驗證的過程中,并通過共識機(jī)制達(dá)成最終的交易驗證結(jié)果。在每輪共識過程中,驗證者集合都會存在一個記錄者,記錄者負(fù)責(zé)將交易驗證結(jié)果及驗證信息打包成區(qū)塊,并將該區(qū)塊廣播到區(qū)塊鏈網(wǎng)絡(luò)中。
為了減少驗證者的作惡行為,本文依據(jù)懲罰模型(具體將在3.4節(jié)闡述)將驗證者分為正常和異常兩個狀態(tài),未被列入觀察期內(nèi)的驗證者狀態(tài)為正常狀態(tài),正常狀態(tài)的驗證者可以成為記錄者,并且擁有確認(rèn)交易的權(quán)力;被列入觀察期內(nèi)的驗證者狀態(tài)為異常狀態(tài),異常狀態(tài)的驗證者不可以成為記錄者,而且其確認(rèn)交易的行為只作為評判該節(jié)點是否能重返正常驗證者隊列的依據(jù),即異常驗證者確認(rèn)交易的行為不會影響到共識過程中的交易驗證結(jié)果。
由于本文提出的K-確認(rèn)機(jī)制無法確保在交易驗證階段(具體將在3.3節(jié)闡述)得到的驗證結(jié)果是否正確,因此為了便于系統(tǒng)收集惡意驗證者的作惡證據(jù),從而發(fā)揮懲罰模型的作用,本文將交易驗證階段得到的區(qū)塊按驗證結(jié)果的正確性分為驗證區(qū)塊和異常區(qū)塊。
如圖3所示,驗證區(qū)塊被存儲在驗證鏈上,異常區(qū)塊被存儲在異常鏈上。這兩個區(qū)塊鏈中的區(qū)塊采取鏈內(nèi)按區(qū)塊的生成順序依次連接,鏈間按分叉區(qū)塊點相互關(guān)聯(lián),最終構(gòu)成了驗證鏈+異常鏈的雙鏈?zhǔn)紻AG存儲架構(gòu)。
圖3 雙鏈?zhǔn)降腄AG存儲架構(gòu)
本文設(shè)計的K-確認(rèn)共識機(jī)制包含三個階段:驗證準(zhǔn)備階段、交易驗證階段以及區(qū)塊鏈數(shù)據(jù)更新階段。為了快速得出交易驗證結(jié)果,在交易驗證階段,只需要部分驗證者確認(rèn)交易就能得出交易的驗證結(jié)果。為了維護(hù)交易驗證結(jié)果的正確性,驗證者節(jié)點需要依據(jù)系統(tǒng)設(shè)定的數(shù)據(jù)更新規(guī)則將接收到的區(qū)塊記錄到對應(yīng)的區(qū)塊鏈上。下文將具體介紹這三個階段。
3.3.1 驗證準(zhǔn)備階段
1)驗證者集合中n個驗證者節(jié)點記為(V1,V2,V3,…,Vn),在每輪共識過程中,驗證者集合都存在一個記錄者,記錄者由驗證者節(jié)點輪流擔(dān)任。當(dāng)記錄者發(fā)布完一個區(qū)塊后,則該記錄者的任職周期結(jié)束;
2).基于拜占庭將軍問題的安全性的假設(shè),記錄者需要決定當(dāng)前任期內(nèi)確認(rèn)交易所需的K值,并將對應(yīng)的K值廣播到驗證者集合中;
3).若在t時間內(nèi),驗證者并未接收到記錄者所決定的K值,則按照系統(tǒng)規(guī)定的順序,由下一個驗證者節(jié)點成為當(dāng)前任期內(nèi)的記錄者。
3.3.2 交易驗證階段
1)驗證者接收到交易后,需要對交易信息進(jìn)行驗證,若交易正確無誤,則驗證者將與該交易相對應(yīng)的確認(rèn)信息發(fā)送給記錄者;
2)記錄者接收到驗證者的確認(rèn)信息后,依據(jù)確認(rèn)信息中的數(shù)字簽名判斷該確認(rèn)信息是否有效。若確認(rèn)信息有效,則記錄者保存這一投票判斷;反之,記錄者丟棄接收到的確認(rèn)信息;
3)當(dāng)記錄者接收到同一交易的K個確認(rèn)信息后,記錄者將該交易信息和對應(yīng)的K個驗證者的信息打包成區(qū)塊,并將區(qū)塊廣播到區(qū)塊鏈網(wǎng)絡(luò)中。
4)若在t時間內(nèi),驗證者并未接收到記錄者產(chǎn)生的區(qū)塊,則按照系統(tǒng)規(guī)定的順序,由下一個驗證者節(jié)點成為當(dāng)前任期內(nèi)的記錄者,此時區(qū)塊鏈系統(tǒng)進(jìn)入下一輪的驗證準(zhǔn)備階段。
3.3.3 數(shù)據(jù)更新階段
當(dāng)驗證者接收到新的區(qū)塊后,需要依據(jù)區(qū)塊高度和交易驗證內(nèi)容所規(guī)定的更新規(guī)則來決定如何更新區(qū)塊鏈系統(tǒng)中的數(shù)據(jù)信息。
(a)交易驗證內(nèi)容
驗證者依據(jù)當(dāng)前記錄的數(shù)據(jù)信息來判斷交易驗證內(nèi)容是否正確。若正確,則依據(jù)區(qū)塊高度中的規(guī)則更新自身區(qū)塊鏈的數(shù)據(jù);反之,則將這一區(qū)塊添加到異常鏈上。
(b)區(qū)塊高度
如圖4所示,虛線框代表驗證者接收到的區(qū)塊1的簡化圖,實線框表示當(dāng)前驗證鏈上的最新區(qū)塊2的簡化圖。其中height代表當(dāng)前的區(qū)塊高度,PerHash代表該區(qū)塊鏈接的上一個區(qū)塊的hash值,hash代表當(dāng)前區(qū)塊的hash值,數(shù)字代表當(dāng)前區(qū)塊的編號。
圖4 接收到的區(qū)塊高度對比圖
①若height1 ②若height1>height2+1,則驗證者需要更新自身驗證鏈的數(shù)據(jù)信息,然后再將依據(jù)區(qū)塊高度判斷規(guī)則進(jìn)行二次判斷; ③若height1=height2+1且PreHash1=hash2,則驗證者將這一區(qū)塊添加到驗證鏈上; ④ 若height1=height2+1且prehash1≠hash2,則驗證者將這一區(qū)塊添加到異常鏈上。 盡管K-確認(rèn)共識機(jī)制可以在數(shù)據(jù)更新階段確保區(qū)塊鏈數(shù)據(jù)的一致性,但是當(dāng)K-確認(rèn)階段得到的驗證結(jié)果錯誤率過高,此時會使得驗證鏈的分叉率也隨之增加,導(dǎo)致區(qū)塊鏈系統(tǒng)處于不穩(wěn)定的狀態(tài)[14]。針對這一問題,本文在K-確認(rèn)共識機(jī)制中融合了觀察期+積分池的懲罰模型。依據(jù)這一模型,本文可以限制共識節(jié)點集合中的拜占庭錯誤節(jié)點的權(quán)力甚至做到剔除拜占庭錯誤節(jié)點,從而減少了K-確認(rèn)機(jī)制錯誤驗證交易的概率,下文將具體闡述這一模型。 本文提出的懲罰模型中有三個重要的參數(shù),分別是觀察期的時限T、異常驗證者在觀察期內(nèi)的積分S以及恢復(fù)為正常驗證者所需的積分閾值。若驗證者在K-確認(rèn)共識過程中錯誤確認(rèn)交易,則該驗證者將被列入觀察期,并且將初始化當(dāng)前驗證者的T和S的值。懲罰模型的具體流程如圖5所示,若處于觀察期內(nèi)的異常驗證者在K確認(rèn)階段錯誤確認(rèn)交易,則該驗證者的觀察期次數(shù)T會減一,積分S不變,反之該驗證者的觀察期次數(shù)T減一,積分S加一。若驗證者在觀察期內(nèi)的積分達(dá)到積分閾值,則該驗證者會重新被列入正常的驗證者隊列中;若驗證者在觀察期內(nèi)的積分上限(即S+T)不可能達(dá)到積分閾值,則系統(tǒng)會將該共識節(jié)點從共識集合中剔除。為了實現(xiàn)快速甄別集合中的惡意驗證者,本文將觀察期的初值T設(shè)置為6,積分閾值設(shè)置為5。 圖5 懲罰模型的流程圖 本文的實驗是基于FISCO-BCOS平臺,實驗環(huán)境如表1所示。本文模擬的區(qū)塊鏈系統(tǒng)中包含兩個模塊——共識模塊和交易模塊。在交易模塊中,本文將智能合約部署到區(qū)塊鏈上,節(jié)點通過調(diào)用智能合約來模擬用戶節(jié)點生成交易并將交易發(fā)送到共識模塊上的功能。在共識模塊中,為了實現(xiàn)性能上的對比,本文將按照PBFT和K-確認(rèn)共識機(jī)制的協(xié)議流程,實現(xiàn)與之相關(guān)的共識機(jī)制接口,通過調(diào)用這一接口來完成區(qū)塊鏈系統(tǒng)在不同共識協(xié)議下的數(shù)據(jù)獲取。 表1 測試環(huán)境配置 實驗將對融合了懲罰模型的K-確認(rèn)共識機(jī)制的性能以及系統(tǒng)穩(wěn)定性兩方面進(jìn)行實驗分析。在評測系統(tǒng)性能實驗中,本文針對區(qū)塊鏈系統(tǒng)的性能評判指標(biāo)——系統(tǒng)吞吐量來進(jìn)行實驗與統(tǒng)計,并與PBFT共識機(jī)制進(jìn)行比較,以此來論證K-確認(rèn)共識機(jī)制的有效性和優(yōu)勢。在評測系統(tǒng)穩(wěn)定性的實驗中,本文將驗證區(qū)塊分叉到錯誤區(qū)塊的分叉率來作為評價區(qū)塊鏈系統(tǒng)穩(wěn)定性指標(biāo),通過實驗來得到區(qū)塊增長過程中系統(tǒng)中分叉率的數(shù)據(jù)變化,以此來論證基于懲罰模型的K-確認(rèn)共識機(jī)制的穩(wěn)定性。 系統(tǒng)吞吐量即TPS(Transactions Per Second)是衡量系統(tǒng)單位時間內(nèi)處理事務(wù)、請求、交易的能力,是衡量系統(tǒng)性能的重要指標(biāo),因而本文通過TPS來評測K-確認(rèn)共識機(jī)制的性能。由于區(qū)塊鏈的共識機(jī)制的性能主要是受共識集合中的節(jié)點個數(shù)影響,因此本文通過改變共識集合共識節(jié)點數(shù)來模擬網(wǎng)絡(luò)規(guī)模對區(qū)塊鏈系統(tǒng)性能的影響。受制于實驗環(huán)境的限制,性能對比實驗將在驗證者節(jié)點數(shù)為(4,7,10,13,16,19,22),此時對應(yīng)的拜占庭錯誤節(jié)點數(shù)為(1,2,3,4,5,6,7)環(huán)境下進(jìn)行。在交易驗證過程中,有30個用戶節(jié)點通過調(diào)用交易模塊接口來向驗證者節(jié)點并行發(fā)送交易。隨著區(qū)塊鏈系統(tǒng)穩(wěn)定后,系統(tǒng)性能仿真實驗在每個網(wǎng)絡(luò)規(guī)模下都統(tǒng)計了30個區(qū)塊并計算對應(yīng)的TPS,依據(jù)這些數(shù)據(jù),本文最終得到了在不同網(wǎng)絡(luò)規(guī)模下,K-確認(rèn)共識機(jī)制和PBFT共識機(jī)制的TPS的對比圖。 圖6描述了在區(qū)塊鏈網(wǎng)絡(luò)規(guī)模增大時,兩種共識機(jī)制的TPS變化趨勢。通過分析圖6可知,盡管在區(qū)塊鏈網(wǎng)絡(luò)規(guī)模增大的時,兩種共識機(jī)制的TPS均會下降,但是在相同的網(wǎng)絡(luò)規(guī)模下,K-確認(rèn)共識機(jī)制的TPS始終優(yōu)于PBFT共識機(jī)制。為了更清晰的論證K-確認(rèn)共識機(jī)制對于區(qū)塊鏈系統(tǒng)性能提升的優(yōu)勢,通過縱向?qū)Ρ葘嶒灁?shù)據(jù),得到了如圖7所示的TPS的增長率。分析圖7可知,相較于PBFT共識機(jī)制,基于K-確認(rèn)共識機(jī)制的區(qū)塊鏈系統(tǒng)性能已經(jīng)得到了極大地提升,而且隨著網(wǎng)絡(luò)規(guī)模的增大,這一提升效果也更為地明顯。最終本文通過整理實驗數(shù)據(jù)發(fā)現(xiàn),相較于PBFT共識機(jī)制,K-確認(rèn)共識機(jī)制能實現(xiàn)平均40%的TPS提升效果。 圖6 共識機(jī)制的TPS對比 圖7 系統(tǒng)吞吐量的增長率 圖8描述了在系統(tǒng)中無新的驗證者節(jié)點加入驗證者集合的情況下,區(qū)塊鏈系統(tǒng)的分叉率與系統(tǒng)運行時間變化的關(guān)系圖,其中橫坐標(biāo)每個時間片代表驗證者集合的一個完整輪次,縱坐標(biāo)代表了當(dāng)前輪次區(qū)塊鏈系統(tǒng)的分叉率。通過分析圖8可知,由于拜占庭錯誤節(jié)點的存在,這使得K-確認(rèn)共識機(jī)制在系統(tǒng)運行初期的分叉率較高。但是由于K-確認(rèn)共識機(jī)制中融合了懲罰模型,隨著系統(tǒng)運行時間的增加,惡意驗證者因其交易驗證階段的惡意行為而被列入觀察期,喪失了確認(rèn)交易的權(quán)力,為了實現(xiàn)攻擊區(qū)塊鏈系統(tǒng)網(wǎng)絡(luò),惡意驗證者也必須正確確認(rèn)交易,最終使得區(qū)塊鏈系統(tǒng)達(dá)到一個極低分叉率的納什均衡點。因此,融合了懲罰模型的K-確認(rèn)共識機(jī)制能夠確保區(qū)塊鏈系統(tǒng)在極低的分叉率下平穩(wěn)運行。 圖8 系統(tǒng)中的分叉率變化圖 本文針對當(dāng)前區(qū)塊鏈網(wǎng)絡(luò)規(guī)模增大會影響到區(qū)塊鏈系統(tǒng)性能的這一關(guān)鍵問題,提出了基于懲罰模型的K-確認(rèn)共識機(jī)制。實驗結(jié)果表明,相較于PBFT共識機(jī)制,文中提出的共識機(jī)制能夠在確保區(qū)塊鏈系統(tǒng)穩(wěn)定運行即分叉率較低的前提下,提升平均40%的TPS,而且隨著網(wǎng)絡(luò)規(guī)模的增大,這一提升效果也在逐步增加。盡管本文提出的共識機(jī)制相較于PBFT共識機(jī)制有了一些改進(jìn),但并未消除區(qū)塊鏈系統(tǒng)規(guī)模對于區(qū)塊鏈性能的影響。在未來的工作中,本文將著重于研究快速驗證交易的區(qū)塊鏈共識優(yōu)化方案,力求在確保安全性的前提下,減少網(wǎng)絡(luò)規(guī)模對區(qū)塊鏈系統(tǒng)性能的影響,最終實現(xiàn)區(qū)塊鏈共識機(jī)制的性能與當(dāng)前區(qū)塊鏈發(fā)展相匹配的最終目標(biāo)。3.4 懲罰模型
4 實驗結(jié)果及分析
4.1 系統(tǒng)性能的實驗分析
4.2 系統(tǒng)穩(wěn)定性的實驗分析
5 總結(jié)