汪 澍,許翀寰,湯中運(yùn)
(1.浙江工商大學(xué)管理工程與電子商務(wù)學(xué)院,杭州310018;2.浙江工商大學(xué)工商管理學(xué)院,杭州310018;3.杭州電子科技大學(xué)計(jì)算機(jī)學(xué)院,杭州310018)
傳統(tǒng)溯源系統(tǒng)采用將溯源信息集中存放在單一節(jié)點(diǎn)上的中心化方案[1],這會(huì)影響系統(tǒng)的安全性、透明度和互操作性[2],而區(qū)塊鏈技術(shù)的出現(xiàn)為溯源系統(tǒng)的構(gòu)建提供了更可信、安全和高效的解決方案[3]。由于公有鏈中實(shí)體可隨意加入或離開區(qū)塊鏈網(wǎng)絡(luò),而參與溯源系統(tǒng)中代表各利益方的實(shí)體則受到約束,因此與比特幣[4]等公有鏈不同,溯源系統(tǒng)更適合采用聯(lián)盟鏈。溯源區(qū)塊鏈包含來自生產(chǎn)、加工、運(yùn)輸、存儲(chǔ)和消費(fèi)等領(lǐng)域中興趣各異的利益方[5],這種復(fù)雜性對(duì)該聯(lián)盟鏈的共識(shí)策略提出了拜占庭容錯(cuò)能力的要求。在區(qū)塊鏈技術(shù)中,共識(shí)策略能夠確保在部分節(jié)點(diǎn)失效的情況下整個(gè)區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)仍能達(dá)成一致。由于節(jié)點(diǎn)通常由不同利益方維護(hù),所構(gòu)成的共識(shí)網(wǎng)絡(luò)具有顯著的異構(gòu)特性,因此溯源區(qū)塊鏈的性能開銷較大,受到內(nèi)外部惡意攻擊的安全風(fēng)險(xiǎn)高,其共識(shí)策略還需要保障系統(tǒng)的性能和安全性。然而,傳統(tǒng)基于證明的共識(shí)策略主要應(yīng)用在公有鏈場(chǎng)景下,伴隨巨大的計(jì)算開銷和性能瓶頸,導(dǎo)致它們不適用于聯(lián)盟鏈場(chǎng)景下的溯源區(qū)塊鏈。基于拜占庭容錯(cuò)狀態(tài)機(jī)復(fù)制的策略(BFT)[6]可以在不引入額外開銷的情況下使全體非故障節(jié)點(diǎn)最終都達(dá)成共識(shí),其中實(shí)用拜占庭容錯(cuò)(PBFT)是聯(lián)盟鏈場(chǎng)景下應(yīng)用最廣泛的共識(shí)策略。但是,由于PBFT 采用主節(jié)點(diǎn)(primary node)和多輪相互廣播的方式,并且缺少故障節(jié)點(diǎn)排除機(jī)制[7],導(dǎo)致其在溯源區(qū)塊鏈場(chǎng)景下依然存在通信開銷大、可靠性低、易受惡意攻擊等問題。
本文提出一種基于信譽(yù)的二階段溯源區(qū)塊鏈共識(shí)策略RTsBFT。通過對(duì)溯源區(qū)塊鏈進(jìn)行分析,構(gòu)建將共識(shí)節(jié)點(diǎn)分散在多個(gè)本地組中的系統(tǒng)模型,以模擬溯源系統(tǒng)多利益方、共識(shí)網(wǎng)絡(luò)異構(gòu)的特性。同時(shí)建立一個(gè)信譽(yù)模型,將信譽(yù)作為節(jié)點(diǎn)參與共識(shí)過程的憑據(jù),并根據(jù)節(jié)點(diǎn)信譽(yù)來排除故障節(jié)點(diǎn)。在此基礎(chǔ)上,將共識(shí)設(shè)計(jì)為一個(gè)包含代表選擇和代表共識(shí)兩個(gè)階段的過程,實(shí)現(xiàn)異構(gòu)網(wǎng)絡(luò)通信。
區(qū)塊鏈技術(shù)可以解決供應(yīng)鏈系統(tǒng)中信任相關(guān)的問題[8],溯源區(qū)塊鏈能夠通過信息獲取、傳輸、分享等過程,為供應(yīng)鏈生產(chǎn)、加工、倉儲(chǔ)、銷售等各環(huán)節(jié)提供可追溯性的可靠信息[9]。溯源區(qū)塊鏈繼承了區(qū)塊鏈技術(shù)的眾多特性,如提供一種安全可共享的去中心化數(shù)據(jù)庫,為物品、數(shù)據(jù)、金融等資源的交易提供基于透明性和可追溯性的信任強(qiáng)化。隨著射頻識(shí)別(RFID)、近場(chǎng)通信(NFC)等技術(shù)的發(fā)展,溯源區(qū)塊鏈被應(yīng)用到眾多領(lǐng)域[10]。溯源區(qū)塊鏈可采用無權(quán)限(公有鏈)和有權(quán)限(聯(lián)盟鏈、私有鏈)系統(tǒng),但無權(quán)限系統(tǒng)在設(shè)計(jì)上允許任意實(shí)體隨時(shí)加入和退出區(qū)塊鏈系統(tǒng),并且擁有任意的讀寫權(quán)限,因此需要花費(fèi)巨大的代價(jià)來保障安全性,如采用資源浪費(fèi)極為嚴(yán)重的基于證明的共識(shí)策略[11]。同時(shí),無權(quán)限系統(tǒng)的事務(wù)吞吐量受其設(shè)計(jì)的限制,無法滿足供應(yīng)鏈溯源過程中的高頻交易需求,而有權(quán)限系統(tǒng)則可以通過優(yōu)化共識(shí)策略來實(shí)現(xiàn)性能的顯著提升[12],因此,共識(shí)策略設(shè)計(jì)對(duì)溯源區(qū)塊鏈?zhǔn)种匾?/p>
共識(shí)策略由傳統(tǒng)分布式系統(tǒng)中的一致性算法演化而來,一致性算法最初由PEASE 等[13]提出,考慮到分布式系統(tǒng)中可能存在故障節(jié)點(diǎn),研究者又在共識(shí)策略中引入了拜占庭將軍問題。1985年證明的FLP 不可能性定理指出,對(duì)于具有錯(cuò)誤過程的異步系統(tǒng)的共識(shí)問題,沒有有限時(shí)間的理論解決方案,只能探索可行的“工程解”[14]。因此,早期探索的共識(shí)策略幾乎都是非拜占庭容錯(cuò)的。直到2008年比特幣被提出,拜占庭容錯(cuò)共識(shí)策略才得到廣泛關(guān)注,這類策略大致上可分為基于證明和基于投票兩類。比特幣區(qū)塊鏈中采用一種基于證明的共識(shí)策略——工作量證明(Proof of Work,PoW)[15]。但是,PoW 是一種十分浪費(fèi)算力的共識(shí)策略[16],因此KING 提出了權(quán)益證明(Proof of Stake,PoS)[17]機(jī)制來改善PoW。自提出PoW 和PoS 之后,研究者在不同的應(yīng)用場(chǎng)景下提出了一系列基于證明的共識(shí)策略,如改進(jìn)原始PoW 和PoS 的策略、結(jié)合PoW 和PoS 優(yōu)點(diǎn)的策略[18]等,這類機(jī)制要求共識(shí)節(jié)點(diǎn)提供某種憑據(jù)以競(jìng)爭區(qū)塊打包和上鏈并獲得收益,這類共識(shí)策略將區(qū)塊鏈視作有限狀態(tài)機(jī),對(duì)于給定的順序輸入,它們能保證分布式系統(tǒng)最終的一致性,代價(jià)是犧牲系統(tǒng)的吞吐量和延遲性能。同時(shí),由于上述共識(shí)策略的設(shè)計(jì)主要考慮公有鏈場(chǎng)景,因此并不適用于溯源區(qū)塊鏈的聯(lián)盟鏈場(chǎng)景。在基于投票的共識(shí)策略的每輪共識(shí)中,共識(shí)節(jié)點(diǎn)“相互投票”,將得到超過半數(shù)節(jié)點(diǎn)投票的節(jié)點(diǎn)選為打包區(qū)塊上鏈的節(jié)點(diǎn)。通常基于投票的共識(shí)協(xié)議在分布式一致性算法中更為常見,如Paxos和Raft[19],當(dāng)前應(yīng)用最為廣泛的基于投票的共識(shí)策略是實(shí)用拜占庭容錯(cuò)(PBFT)策略。
PBFT 是一種典型的BFT 狀態(tài)機(jī)復(fù)制策略,其將分布式一致性算法的復(fù)雜性由指數(shù)時(shí)間級(jí)降低到多項(xiàng)式時(shí)間級(jí)。PBFT 采用了主節(jié)點(diǎn)(Primary Node)和視圖轉(zhuǎn)換(View Change)的概念,主節(jié)點(diǎn)負(fù)責(zé)對(duì)請(qǐng)求和共識(shí)過程進(jìn)行排序,視圖轉(zhuǎn)換則用于選擇新的主節(jié)點(diǎn)。PBFT 最多可容忍個(gè)故障節(jié)點(diǎn)(N為總節(jié)點(diǎn)數(shù))。當(dāng)前對(duì)PBFT 的研究主要集中在對(duì)其性能和安全性的改進(jìn)方面,多數(shù)研究從降低通信開銷的角度來改進(jìn)PBFT 的性能[20],如基于信譽(yù)的策略[21]和信譽(yù)監(jiān)督的策略CSBFT[22]。在PBFT 安全性改進(jìn)方面,則有提高運(yùn)行環(huán)境和網(wǎng)絡(luò)基礎(chǔ)設(shè)施安全性、增加故障檢測(cè)及配備冗余主節(jié)點(diǎn)[23]的方案。
溯源區(qū)塊鏈吸引著眾多利益方,共識(shí)策略需要滿足聯(lián)盟鏈對(duì)性能和安全性的需求[12],溯源區(qū)塊鏈的特性對(duì)共識(shí)策略的設(shè)計(jì)十分重要。
不同于比特幣的公有鏈,溯源區(qū)塊鏈通常采用聯(lián)盟鏈,涉及的各利益方均可執(zhí)行業(yè)務(wù)功能和權(quán)限管理,并通過投資區(qū)塊鏈節(jié)點(diǎn)、計(jì)算能力、帶寬等,與其他利益方競(jìng)爭話語權(quán),這形成了溯源區(qū)塊鏈多利益方和共識(shí)網(wǎng)絡(luò)異構(gòu)的特性,引起了性能和拜占庭容錯(cuò)的需求。針對(duì)上述需求,本文提出基于信譽(yù)的兩階段拜占庭容錯(cuò)共識(shí)策略RTsBFT,其主要包括系統(tǒng)建模、信譽(yù)建模及共識(shí)過程3 個(gè)部分,其中,共識(shí)過程分為代表選擇階段和代表共識(shí)階段。
將溯源區(qū)塊鏈中的節(jié)點(diǎn)分為3 類,分別為事務(wù)節(jié)點(diǎn)、共識(shí)節(jié)點(diǎn)以及存儲(chǔ)節(jié)點(diǎn)。為了模擬溯源區(qū)塊鏈多利益方、共識(shí)網(wǎng)絡(luò)異構(gòu)的特性,共識(shí)節(jié)點(diǎn)被分為Sseg個(gè)本地組,在同一個(gè)本地組中的節(jié)點(diǎn)性能相近并通過高速本地網(wǎng)絡(luò)相連。事務(wù)節(jié)點(diǎn)產(chǎn)生事務(wù)并向各本地組廣播,組內(nèi)共識(shí)節(jié)點(diǎn)在其自身的事務(wù)隊(duì)列中緩存待處理的事務(wù),共識(shí)節(jié)點(diǎn)驗(yàn)證事務(wù)并打包區(qū)塊。在本地組信譽(yù)值最高的節(jié)點(diǎn)中,完成上述任務(wù)最快的節(jié)點(diǎn)被選為該組的代表節(jié)點(diǎn)。共識(shí)將由所有本地組的代表節(jié)點(diǎn)參與,結(jié)果將分別發(fā)送到存儲(chǔ)節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn),以進(jìn)行永久存儲(chǔ)和信譽(yù)更新。溯源區(qū)塊鏈系統(tǒng)模型如圖1所示。
圖1 溯源區(qū)塊鏈系統(tǒng)模型Fig.1 Traceability blockchain system model
當(dāng)事務(wù)到達(dá)本地組時(shí),組內(nèi)所有共識(shí)節(jié)點(diǎn)會(huì)在進(jìn)入共識(shí)過程前與一個(gè)可靠的NTP 服務(wù)器同步時(shí)間。同一本地組中的每個(gè)共識(shí)節(jié)點(diǎn)都維護(hù)一個(gè)本地共識(shí)節(jié)點(diǎn)表LCNT=<本地組標(biāo)識(shí),事務(wù)標(biāo)識(shí),節(jié)點(diǎn)標(biāo)識(shí),節(jié)點(diǎn)公鑰,節(jié)點(diǎn)IP:端口對(duì),節(jié)點(diǎn)信譽(yù)值,節(jié)點(diǎn)狀態(tài)>,整個(gè)系統(tǒng)中所有LCNT 的初始配置都相同。
溯源區(qū)塊鏈作為一種聯(lián)盟鏈,比公有鏈更加可靠和安全,無需應(yīng)用基于證明的共識(shí)策略以及增加額外的開銷。但是,內(nèi)部利益方和外部對(duì)手的惡意行為導(dǎo)致共識(shí)節(jié)點(diǎn)不能始終被視為值得信賴,從而需要考慮共識(shí)策略的拜占庭容錯(cuò)性。因此,本文建立一種信譽(yù)模型,以監(jiān)督共識(shí)節(jié)點(diǎn)的行為,識(shí)別并排除有缺陷或惡意的故障節(jié)點(diǎn),避免其影響共識(shí)過程。在該模型中,共識(shí)節(jié)點(diǎn)花費(fèi)一定數(shù)量的自身信譽(yù)對(duì)共識(shí)過程中的提案進(jìn)行簽名,當(dāng)代表共識(shí)階段最終達(dá)成共識(shí)時(shí),對(duì)共識(shí)提案簽名的代表節(jié)點(diǎn)對(duì)應(yīng)的本地組,可取回其在該輪共識(shí)中花費(fèi)的信譽(yù),這些本地組被標(biāo)記為獲勝組,其代表被標(biāo)記為獲勝代表,其他本地組及其代表分別被標(biāo)記為失敗組(gfailk∈Gfail)和失敗代表。所有簽名了共識(shí)提案的節(jié)點(diǎn)均將取回其本輪花費(fèi)的信譽(yù),獲勝組中簽名共識(shí)提案的節(jié)點(diǎn)還將獲得額外的信譽(yù)獎(jiǎng)勵(lì),未簽名共識(shí)提案的節(jié)點(diǎn)將受到信譽(yù)懲罰。
2.2.1 代表選擇階段的信譽(yù)變化
在系統(tǒng)初始化時(shí),所有共識(shí)節(jié)點(diǎn)的信譽(yù)被設(shè)置為相同,對(duì)于共識(shí)節(jié)點(diǎn),其初始信譽(yù)ri=rini。令L(X)表示X中的元素個(gè)數(shù),則某一本地組中節(jié)點(diǎn)的個(gè)數(shù)為表示中所有節(jié)點(diǎn)在本輪共識(shí)中花費(fèi)的信譽(yù),其計(jì)算如下:
其中,wsep是共識(shí)節(jié)點(diǎn)簽名一個(gè)提案花費(fèi)的信譽(yù)值,Trep是節(jié)點(diǎn)參與共識(shí)過程所需保有的最小信譽(yù)值。若ri≤Trep,則將被視作出現(xiàn)故障的拜占庭節(jié)點(diǎn),無法簽名任何新的提案,隨后從本地組中移除或被新節(jié)點(diǎn)代替。在代表共識(shí)階段前,共識(shí)節(jié)點(diǎn)的信譽(yù)ri的變化如下:
2.2.2 代表共識(shí)階段的信譽(yù)變化
來自失敗組的信譽(yù)首先平均分配給各獲勝組,然后在每個(gè)獲勝組內(nèi)進(jìn)行分配,RRWD是給的信譽(yù)獎(jiǎng)勵(lì),其由從失敗組以及花費(fèi)的信譽(yù)中分配而來的信譽(yù)共同構(gòu)成,的信譽(yù)則維持本輪花費(fèi)信譽(yù)后的值不變。
對(duì)于一個(gè)失敗組,其組內(nèi)共有3 類節(jié)點(diǎn),分別是失敗代表本身、未簽名共識(shí)提案的節(jié)點(diǎn)以及簽名共識(shí)提案的節(jié)點(diǎn),分別用rf、ru和rs表示這3 類節(jié)點(diǎn)的信譽(yù),則其變化分別如式(5)~式(7)所示:
若失敗組中有節(jié)點(diǎn)簽名了共識(shí)提案,則它們應(yīng)該被視作比同組中其他未簽名共識(shí)提案的節(jié)點(diǎn)更可靠,失敗代表應(yīng)該為這些節(jié)點(diǎn)的信譽(yù)損失負(fù)責(zé),并從它們的信譽(yù)值中減去這些節(jié)點(diǎn)花費(fèi)的信譽(yù),以補(bǔ)償這些節(jié)點(diǎn)的信譽(yù)損失,其他節(jié)點(diǎn)則不會(huì)得到任何形式的信譽(yù)補(bǔ)償。
基于PBFT 策略中的主節(jié)點(diǎn)在共識(shí)過程中發(fā)揮著重要作用,但存在引入拜占庭節(jié)點(diǎn)作為主節(jié)點(diǎn)的風(fēng)險(xiǎn),從而對(duì)系統(tǒng)性能造成影響。RTsBFT 采用代表節(jié)點(diǎn)機(jī)制,每個(gè)代表節(jié)點(diǎn)僅對(duì)其本地組負(fù)責(zé),一個(gè)代表節(jié)點(diǎn)的錯(cuò)誤不會(huì)影響到整個(gè)共識(shí)網(wǎng)絡(luò)。對(duì)于一個(gè)有Sseg個(gè)本地組的共識(shí)網(wǎng)絡(luò),只要該系統(tǒng)中還有個(gè)正常代表節(jié)點(diǎn),RTsBFT 就可保證該系統(tǒng)的正常運(yùn)作。整個(gè)共識(shí)過程在本地組內(nèi)和組間分別進(jìn)行,故可將共識(shí)過程分為代表選擇和代表共識(shí)兩個(gè)階段。
2.3.1 代表選擇階段
在代表選擇階段,事務(wù)被共識(shí)節(jié)點(diǎn)接收,并產(chǎn)生代表節(jié)點(diǎn)。RTsBFT 中采用固定區(qū)塊大小的方法來生成區(qū)塊,當(dāng)共識(shí)節(jié)點(diǎn)收到用于生成新區(qū)塊的最后一個(gè)事務(wù)時(shí),它與NTP 服務(wù)器同步時(shí)鐘,并對(duì)區(qū)塊進(jìn)行驗(yàn)證、摘要和簽名。當(dāng)完成上述工作且未收到來自其他節(jié)點(diǎn)的代表聲名信息Mrep時(shí),節(jié)點(diǎn)向本地組內(nèi)廣播包含自身節(jié)點(diǎn)id、完成簽名時(shí)間、區(qū)塊頭、區(qū)塊id 的代表聲名信息Mrep={Nid,Tsign,Hblock,Bid}。若在發(fā)出自身Mrep前接收到其他節(jié)點(diǎn)Mrep的節(jié)點(diǎn),則切換自身狀態(tài)為INHIBITED,并不再發(fā)出Mrep。所有節(jié)點(diǎn)將接收到的Mrep按照信息對(duì)應(yīng)的簽名完成時(shí)間和LCNT 中的信譽(yù)值進(jìn)行排序,從最高信譽(yù)值的節(jié)點(diǎn)中選出完成時(shí)間最早的節(jié)點(diǎn)作為代表節(jié)點(diǎn)。所有信譽(yù)高于Trep的節(jié)點(diǎn)對(duì)自身提案簽名,并根據(jù)信譽(yù)模型更新LCNT 中節(jié)點(diǎn)的信譽(yù),將信譽(yù)高于Trep的節(jié)點(diǎn)狀態(tài)標(biāo)記為FUNCTION,其他節(jié)點(diǎn)被標(biāo)記為MALFUNCTION,它們被禁止參與下一輪共識(shí)。代表節(jié)點(diǎn)在簽名自身提案后,將與提案信息一起發(fā)送給其他本地組。代表選擇階段可分為Broadcast、Claim、Preprepare 3 個(gè)流程,如圖2所示。
圖2 代表選擇階段的共識(shí)過程Fig.2 Consensus process of representative selection stage
代表選擇階段的詳細(xì)步驟如下:
步驟1進(jìn)入Broadcast 流程,用于生成新區(qū)塊Bb的最后一個(gè)事務(wù)被廣播到本地組中。
步驟2中的共識(shí)節(jié)點(diǎn)驗(yàn)證,若驗(yàn)證錯(cuò)誤,則回滾事務(wù);若驗(yàn)證通過,則:
1)與NTP 服務(wù)器同步時(shí)鐘。
3)對(duì)區(qū)塊進(jìn)行摘要和簽名。
4)生成Bb的區(qū)塊頭Hblock。
5)構(gòu)造代表聲名信息Mrep。
步驟3進(jìn)入Claim 流程,若節(jié)點(diǎn)未完成步驟1和步驟2 且收到其他節(jié)點(diǎn)Mrep,則將狀態(tài)標(biāo)記為INHIBITED;若完成步驟1 和步驟2 且未收到其他節(jié)點(diǎn)Mrep,則進(jìn)行信譽(yù)檢查:
1)若其信譽(yù)低于Trep或其狀態(tài)為INHIBITED,則不進(jìn)行任何操作。
2)若其信譽(yù)高于Trep且狀態(tài)為FUNCTION,則廣播其Mrep。
步驟4進(jìn)入Preprepare 流程,在Tout時(shí)長后進(jìn)行代表節(jié)點(diǎn)排序:
1)從LCNT 中檢查發(fā)送過Mrep節(jié)點(diǎn)的信譽(yù)。
2)根據(jù)信譽(yù)對(duì)上述節(jié)點(diǎn)進(jìn)行排序。
3)僅當(dāng)多個(gè)節(jié)點(diǎn)信譽(yù)值相同時(shí)對(duì)其按照Tsign進(jìn)行排序。
4)將排序在第1 位的節(jié)點(diǎn)狀態(tài)標(biāo)記為REPRESENT,選其作為代表節(jié)點(diǎn)。
步驟5代表節(jié)點(diǎn)根據(jù)信譽(yù)模型計(jì)算并向其他本地組發(fā)送提案和,所有節(jié)點(diǎn)根據(jù)信譽(yù)模型更新LCNT,將信譽(yù)值低于Trep的節(jié)點(diǎn)狀態(tài)標(biāo)記為MALFUNCTION。
2.3.2 代表共識(shí)階段
與PBFT 不同,RTsBFT 中提案信息只會(huì)被本地組的代表節(jié)點(diǎn)接收,因此,共識(shí)過程會(huì)被限定在所有代表節(jié)點(diǎn)中進(jìn)行。代表節(jié)點(diǎn)發(fā)送含有本地組id、代表節(jié)點(diǎn)信息、提案(含區(qū)塊頭)、本組等內(nèi)容的消息。代表節(jié)點(diǎn)收到后,對(duì)內(nèi)容進(jìn)行驗(yàn)證,根據(jù)中的提案與自身提案是否相同,將該消息標(biāo)記為MATCH或MISMATCH,當(dāng)MATCH 消息的數(shù)量超過時(shí),達(dá)成共識(shí),相應(yīng)提案為共識(shí)提案,并向所有代表節(jié)點(diǎn)提交該提案。簽名共識(shí)提案的代表節(jié)點(diǎn)將提案相應(yīng)的區(qū)塊提交給存儲(chǔ)節(jié)點(diǎn),并同時(shí)開始反饋流程,共識(shí)提案被廣播到各本地組,節(jié)點(diǎn)根據(jù)信譽(yù)模型更新信譽(yù)。代表共識(shí)階段包含Prepare、Commit、Store&Feedback 這3 個(gè)流程,如圖3所示。
圖3 代表共識(shí)階段的共識(shí)過程Fig.3 Consensus process of representative consensus stage
代表共識(shí)階段的詳細(xì)步驟如下:
步驟1所有代表節(jié)點(diǎn)向其他本地組廣播,并由各本地組代表節(jié)點(diǎn)接收。
步驟2進(jìn)入Prepare 流程,所有代表節(jié)點(diǎn)驗(yàn)證收到的,若消息中的提案與本節(jié)點(diǎn)提案一致,則將其存入MATCH 棧中;否則,存入MISMATCH棧中。
步驟3進(jìn)入Commit 流程,收到MATCH 消息多于的節(jié)點(diǎn),根據(jù)INFOrep中其他代表節(jié)點(diǎn)的信息將共識(shí)提案提交給其他代表節(jié)點(diǎn)。
步驟4進(jìn)入Store & Feedback 流程,獲勝代表節(jié)點(diǎn)將提案對(duì)應(yīng)的區(qū)塊發(fā)送給存儲(chǔ)節(jié)點(diǎn),并將共識(shí)提案廣播給所有本地組,在各本地組內(nèi)節(jié)點(diǎn)更新信譽(yù)值。
溯源區(qū)塊鏈中的拜占庭節(jié)點(diǎn)不可靠,可能會(huì)通過惡意行為來阻礙共識(shí)的達(dá)成,RTsBFT 用信譽(yù)模型和二階段過程設(shè)計(jì)識(shí)別這些節(jié)點(diǎn),以避免拜占庭故障節(jié)點(diǎn)成為代表節(jié)點(diǎn),從而保障共識(shí)過程的安全性。
引理1在本地組中,正確節(jié)點(diǎn)的信譽(yù)始終高于故障節(jié)點(diǎn)的信譽(yù)。
證明令Φ>0 為初始信譽(yù)值,則在初始時(shí)對(duì)?nodei,Crep=Frep=Φ,其中,Crep和Frep分別為正確節(jié)點(diǎn)和故障節(jié)點(diǎn)的信譽(yù)。令簽名提案信譽(yù)花費(fèi)為Δ>0,信譽(yù)獎(jiǎng)勵(lì)為δ>0,信譽(yù)懲罰為θ>0,則有:
綜上所述,Crep>Frep,即正確節(jié)點(diǎn)的信譽(yù)始終高于故障節(jié)點(diǎn)的信譽(yù),因此,可以避免故障節(jié)點(diǎn)成為代表節(jié)點(diǎn)。
引理2只要代表節(jié)點(diǎn)中的故障節(jié)點(diǎn)不超過個(gè),RTsBFT 可保證運(yùn)行于本文系統(tǒng)模型上的溯源區(qū)塊鏈的安全性。
證明Nc和Nf分別表示正確代表節(jié)點(diǎn)和故障代表節(jié)點(diǎn)的個(gè)數(shù)。由可得,Nc≥2Nf+1。當(dāng)故障節(jié)點(diǎn)均勻分布于所有本地組時(shí),根據(jù)引理1,故障節(jié)點(diǎn)無法成為代表節(jié)點(diǎn),Nf=0,故障節(jié)點(diǎn)提案不會(huì)進(jìn)入prepare 流程,因此,不會(huì)對(duì)最終共識(shí)的安全性產(chǎn)生影響。當(dāng)故障節(jié)點(diǎn)非均勻分布時(shí),最壞情況下個(gè)本地組中全部節(jié)點(diǎn)均為故障節(jié)點(diǎn),根據(jù)引理1,此時(shí)Nc≥2Nf+1 依然成立,RTsBFT 在節(jié)點(diǎn)共識(shí)階段并沒有放寬PBFT 中的限制,而PBFT 已被證明在該條件下可以保證系統(tǒng)的安全性[24]。因此,RTsBFT 均可保證運(yùn)行于本文系統(tǒng)模型上溯源區(qū)塊鏈的安全性。
本文構(gòu)建一個(gè)模擬溯源區(qū)塊鏈特性的原型系統(tǒng),并在相同條件下運(yùn)行RTsBFT、PBFT 和CSBFT,以驗(yàn)證本文RTsBFT 模型的性能。
本文構(gòu)建一個(gè)簡單的聯(lián)盟鏈原型系統(tǒng),包含一個(gè)事務(wù)模塊和一個(gè)共識(shí)模塊,原型系統(tǒng)架構(gòu)如圖4所示。事務(wù)模塊生成事務(wù),并將事務(wù)通過組間鏈路廣播至共識(shí)模塊的本地組內(nèi),該模塊生成的事務(wù)大小一致(256 B),以確保達(dá)到RTsBFT 設(shè)計(jì)中固定區(qū)塊大小的要求。共識(shí)模塊通過分別運(yùn)行這些共識(shí)策略來監(jiān)測(cè)其性能。為了模擬溯源區(qū)塊鏈的共識(shí)節(jié)點(diǎn)分布于受不同利益方管理的異構(gòu)網(wǎng)絡(luò)的特性,將同一本地組內(nèi)的節(jié)點(diǎn)用高速本地鏈路連接,各本地組間則通過相對(duì)低速的組間鏈路連接。整個(gè)原型系統(tǒng)的共識(shí)模塊由10臺(tái)多核計(jì)算機(jī)組成(Intel Core i5-9500,32 GB 內(nèi)存),每臺(tái)計(jì)算機(jī)作為一個(gè)本地組宿主,在其上運(yùn)行整個(gè)本地組的節(jié)點(diǎn)。組間鏈路由一個(gè)1 000 Mb/s 的交換網(wǎng)絡(luò)實(shí)現(xiàn),高速本地鏈路則由Hypervisor 的system bus 實(shí)現(xiàn)。
圖4 原型系統(tǒng)架構(gòu)Fig.4 Prototype system architecture
溯源區(qū)塊鏈的特點(diǎn)對(duì)共識(shí)策略的性能和安全性提出了更高的要求。本文通過吞吐量、延遲和故障節(jié)點(diǎn)率3 個(gè)指標(biāo)[25]來評(píng)估共識(shí)策略的性能和安全性。
1)吞吐量:衡量共識(shí)策略在給定時(shí)間內(nèi)處理的事務(wù)數(shù)量,用每秒事務(wù)處理量(Transaction Per Second,TPS)來表示,TPS 越高,系統(tǒng)性能越好。
2)延遲:從一個(gè)區(qū)塊被生成到它的共識(shí)過程完成所需要的時(shí)間,由新生成區(qū)塊的時(shí)刻Tgen到共識(shí)達(dá)成的時(shí)刻Tcon的時(shí)間差表示,Delay=Tcon-Tgen,延遲越低表示系統(tǒng)性能越高。
3)故障節(jié)點(diǎn)率:當(dāng)前共識(shí)網(wǎng)絡(luò)中故障節(jié)點(diǎn)的數(shù)量與總節(jié)點(diǎn)數(shù)量的比值,故障節(jié)點(diǎn)率反映當(dāng)前區(qū)塊鏈系統(tǒng)共識(shí)策略的安全性和可靠性,該指標(biāo)越低,系統(tǒng)安全性和可靠性越高。
由于RTsBFT 采用固定區(qū)塊大小的策略,區(qū)塊生成時(shí)間不可控,因此可以考察區(qū)塊大小對(duì)系統(tǒng)性能的影響。同時(shí),節(jié)點(diǎn)數(shù)量決定共識(shí)網(wǎng)絡(luò)的復(fù)雜性,本文將在不同區(qū)塊大小和節(jié)點(diǎn)數(shù)量情況下對(duì)比RTsBFT、PBFT 和CSBFT 的吞吐量、延遲以及故障節(jié)點(diǎn)率。
本文分別設(shè)計(jì)0.5 KB、1.0 KB、2.0 KB、4.0 KB和8.0 KB 這5 個(gè)不同的區(qū)塊大小,原型系統(tǒng)配置為5 個(gè)本地組宿主,每宿主運(yùn)行10 個(gè)節(jié)點(diǎn)。評(píng)估指標(biāo)取運(yùn)行中某一段20 s 時(shí)間內(nèi)的平均值,結(jié)果如圖5所示。從圖5 可以看出,在相同區(qū)塊大小下,RTsBFT 的吞吐量總是高于PBFT 和CSBFT,延遲低于PBFT。隨著區(qū)塊大小的增加,所有共識(shí)策略的吞吐量均有下降,延遲均有升高,說明區(qū)塊大小會(huì)影響共識(shí)策略的性能。
圖5 不同區(qū)塊大小下吞吐量和延遲的對(duì)比Fig.5 Comparison of throughput and latency under different block sizes
將原型系統(tǒng)分別配置為運(yùn)行35 個(gè)、70 個(gè)、105 個(gè)和140 個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)以兩種方式分別分配到5 個(gè)(每宿主運(yùn)行7 個(gè)、14 個(gè)、21 個(gè)和28 個(gè)節(jié)點(diǎn))和7 個(gè)(每宿主運(yùn)行5 個(gè)、10 個(gè)、15 個(gè)和20 個(gè)節(jié)點(diǎn))本地組宿主上。區(qū)塊大小配置為1 KB,評(píng)估指標(biāo)也取運(yùn)行中某一段20 s 時(shí)間內(nèi)的平均值,結(jié)果如圖6所示。從圖6 可以看出,在不同節(jié)點(diǎn)數(shù)量和分組方式下,RTsBFT 的吞吐量均高于PBFT 和CSBFT,延遲均低于PBFT 和CSBFT,節(jié)點(diǎn)數(shù)量的增加降低了共識(shí)策略的吞吐量,但PBFT 和CSBFT 的吞吐量下降更為顯著,同時(shí),節(jié)點(diǎn)數(shù)量的增加提高了共識(shí)策略的延遲,但PBFT 和CSBFT 的延遲提高幅度更大。
圖6 不同節(jié)點(diǎn)數(shù)量下吞吐量和延遲的對(duì)比Fig.6 Comparison of throughput and latency under different numbers of nodes
在相同區(qū)塊大小和相同節(jié)點(diǎn)數(shù)量這兩種情況下,RTsBFT 在吞吐量和延遲上的性能表現(xiàn)均優(yōu)于PBFT 和CSBFT。盡管隨著區(qū)塊大小的增加和節(jié)點(diǎn)數(shù)量的增加,各策略性能均有一定程度的下降,但RTsBFT 下降得更少。因此,RTsBFT 具有更高的性能,且在系統(tǒng)復(fù)雜性增加的情況下能夠更好地控制性能下降。研究表明,通信復(fù)雜性對(duì)共識(shí)策略的性能有重要影響[26],在RTsBFT 的設(shè)計(jì)中,本地組內(nèi)的通信發(fā)生在代表選擇階段,組間通信只發(fā)生在代表共識(shí)階段,同時(shí)共識(shí)的核心過程僅在少數(shù)代表節(jié)點(diǎn)中發(fā)生,降低了節(jié)點(diǎn)間通信開銷,特別是組間節(jié)點(diǎn)的通信開銷。而在兩階段的共識(shí)過程中,不需要向所有節(jié)點(diǎn)廣播區(qū)塊并等待它們的響應(yīng),這與引入的信譽(yù)模型一起簡化了共識(shí)過程,同時(shí)避免了故障節(jié)點(diǎn)帶來的額外開銷,降低了共識(shí)過程的復(fù)雜性。在不同的節(jié)點(diǎn)分組方式中,RTsBFT 的延遲差異幾乎是恒定的,而PBFT 和CSBFT 在不同節(jié)點(diǎn)分組下的延遲差異隨著節(jié)點(diǎn)數(shù)量的增加而提高,這也證明對(duì)通信開銷的控制給RTsBFT 帶來了性能提升。
故障節(jié)點(diǎn)引入了拜占庭錯(cuò)誤,本文對(duì)比2 個(gè)共識(shí)策略在開始運(yùn)行20 s 內(nèi)的吞吐量、延遲和故障節(jié)點(diǎn)率的變化情況。原型系統(tǒng)配置為在5 個(gè)本地組宿主上運(yùn)行50 個(gè)共識(shí)節(jié)點(diǎn),區(qū)塊大小為1 KB,初始故障節(jié)點(diǎn)為12 個(gè)。該過程中3 個(gè)共識(shí)策略的吞吐量和延遲隨時(shí)間變化的統(tǒng)計(jì)信息如表1所示,變化趨勢(shì)如圖7所示。
表1 3個(gè)共識(shí)策略吞吐量和延遲隨時(shí)間變化的統(tǒng)計(jì)信息Table 1 Statistics of the throughput and latency of three consensus strategies over time
圖7 吞吐量和延遲隨時(shí)間的變化情況Fig.7 The change of throughput and latency with time
從表1 和圖7 可以看出,RTsBFT 的吞吐量隨時(shí)間變化的均值高于另兩個(gè)策略,延遲低于另兩個(gè)策略,且RTsBFT 的吞吐量和延遲隨時(shí)間變化的波動(dòng)比另兩個(gè)策略平緩。
3 個(gè)共識(shí)策略故障節(jié)點(diǎn)率隨時(shí)間的變化趨勢(shì)如圖8所示,可以看出,PBFT 的故障節(jié)點(diǎn)率保持在24%左右,而RTsBFT 幾乎在前5 s 就將所有故障節(jié)點(diǎn)排除在外,CSBFT 大約在10 s 完成故障節(jié)點(diǎn)的排除。RTsBFT 具有排除故障節(jié)點(diǎn)的能力,因此相比PBFT,其具有更好的安全性和可靠性,相比CSBFT 的故障節(jié)點(diǎn)排除能力更強(qiáng)。RTsBFT 在性能和安全性波動(dòng)上的優(yōu)勢(shì)來自于其設(shè)計(jì)中的信譽(yù)模型所帶來的排除拜占庭故障節(jié)點(diǎn)的能力,故障節(jié)點(diǎn)會(huì)加重系統(tǒng)的負(fù)載,從而對(duì)系統(tǒng)性能和安全性產(chǎn)生不利影響。RTsBFT 能消除故障節(jié)點(diǎn)惡意行為對(duì)共識(shí)過程的影響,減少共識(shí)過程中需要通信的節(jié)點(diǎn)數(shù)量,從而提高系統(tǒng)性能和安全性。而CSBFT 在沒有擺脫P(yáng)BFT 主節(jié)點(diǎn)和視圖轉(zhuǎn)換弊端的情況下引入信譽(yù)模型,雖然具備一定的故障節(jié)點(diǎn)排除能力,但增加了大量額外開銷[21],因此,其性能較PBFT 差。
圖8 故障節(jié)點(diǎn)率隨時(shí)間的變化情況Fig.8 The change of failure node rate with time
本文提出一種基于信譽(yù)的二階段溯源區(qū)塊鏈共識(shí)策略RTsBFT,在多利益方、共識(shí)網(wǎng)絡(luò)異構(gòu)的聯(lián)盟鏈場(chǎng)景下實(shí)現(xiàn)對(duì)溯源區(qū)塊鏈性能和安全性的提升。通過建立溯源區(qū)塊鏈系統(tǒng)模型與信譽(yù)模型及設(shè)計(jì)二階段共識(shí)過程,使得RTsBFT 具有排除拜占庭故障節(jié)點(diǎn)的能力并降低節(jié)點(diǎn)通信開銷。實(shí)驗(yàn)結(jié)果表明,在不同區(qū)塊大小和節(jié)點(diǎn)數(shù)量的情況下,RTsBFT 的吞吐量、延遲和故障節(jié)點(diǎn)率均優(yōu)于PBFT 和CSBFT 策略。下一步將對(duì)RTsBFT 中的信譽(yù)模型進(jìn)行優(yōu)化,使其適用于更多類型的聯(lián)盟鏈系統(tǒng)模型架構(gòu)。