崔蔚 于卓 王璇 吳曉亭 文治 張巧蓮 沈韜③
(?國(guó)網(wǎng)信息通信產(chǎn)業(yè)集團(tuán)有限公司 北京100031)
(??北京中電普華信息技術(shù)有限公司 北京100192)
(???昆明理工大學(xué)信息工程與自動(dòng)化學(xué)院 昆明650000)
在能源轉(zhuǎn)型和電力體制改革的新形勢(shì)下,我國(guó)能源互聯(lián)網(wǎng)體系呈現(xiàn)出新的發(fā)展勢(shì)態(tài)。以綠色新能源為主體的分布式能源已然成為能源交易市場(chǎng)中的重要組成部分,為降低通信復(fù)雜度、提高能源利用率、多渠道擴(kuò)展分布式能源就地消納,分布式能源獲得合法就近售電資質(zhì),其能源生產(chǎn)和消費(fèi)結(jié)構(gòu)呈無(wú)中心、多節(jié)點(diǎn)狀特點(diǎn)。
現(xiàn)有能源運(yùn)營(yíng)模式由于具有集中式管理的特點(diǎn)且依賴于第三方機(jī)構(gòu),其交易流程多、電力損耗大、效率低、時(shí)間長(zhǎng)、交易成本高。由于區(qū)塊鏈技術(shù)和分布式能源交易在理念上的相似性,基于區(qū)塊鏈的能源交易已成為眾多專家學(xué)者的研究熱點(diǎn)。
文獻(xiàn)[1]重點(diǎn)研究了基于拜占庭式區(qū)塊鏈共識(shí)框架下電動(dòng)汽車與配電網(wǎng)分布式網(wǎng)絡(luò)(distribution network,DN)之間的能源交易過(guò)程。文獻(xiàn)[2]使用區(qū)塊鏈技術(shù)來(lái)管理分布式能源交易的系統(tǒng)運(yùn)行。文獻(xiàn)[3]提出了一種基于軟件定義網(wǎng)絡(luò)(software defined networking,SDN)的區(qū)塊鏈能源互聯(lián)網(wǎng)分布式能源交易方案。該方案在保護(hù)隱私的前提下實(shí)現(xiàn)了交易對(duì)象的合理匹配。為了應(yīng)對(duì)當(dāng)前電動(dòng)汽車集成量大的現(xiàn)狀,文獻(xiàn)[4]提出了點(diǎn)對(duì)點(diǎn)電力區(qū)塊鏈交易 (peer-to-peer electricity blockchain trading,P2PEBT)的效益證明(proof of benefit,PoB)共識(shí)機(jī)制,通過(guò)在新型區(qū)塊鏈系統(tǒng)中提供平衡本地電力需求的激勵(lì)機(jī)制來(lái)實(shí)現(xiàn)需求響應(yīng)。文獻(xiàn)[5]提出了一個(gè)區(qū)塊鏈平臺(tái)的通用框架,該平臺(tái)支持零售電力市場(chǎng)的點(diǎn)對(duì)點(diǎn)(peer-to-peer,P2P)能源交易,從供需雙方尋找能源匹配對(duì),鼓勵(lì)生產(chǎn)者和消費(fèi)者直接進(jìn)行能源交易,實(shí)現(xiàn)了一個(gè)完整的能源交易流程。針對(duì)聯(lián)盟區(qū)塊鏈不能智能地選舉實(shí)時(shí)交易的領(lǐng)導(dǎo)者、不能滿足數(shù)據(jù)交易平臺(tái)穩(wěn)定性要求的問(wèn)題,文獻(xiàn)[6]提出了一種聯(lián)盟區(qū)塊鏈動(dòng)態(tài)領(lǐng)導(dǎo)者的選擇方法。基于Hyperledger Fabric 的共識(shí)協(xié)議,將計(jì)算每個(gè)對(duì)等方用戶得分的交易評(píng)估模塊引入聯(lián)盟區(qū)塊鏈。文獻(xiàn)[7]提出了一種基于分層模型的多中心的共識(shí)機(jī)制,與其他共識(shí)機(jī)制不同的是,該文設(shè)計(jì)了主從鏈,用以提高區(qū)塊鏈系統(tǒng)的吞吐量。文獻(xiàn)[8]提出了一種新的協(xié)商一致協(xié)議——委托式拜占庭容錯(cuò)協(xié)議(credit-delegated Byzantine fault tolerance,CDBFT),并提出了一種投票獎(jiǎng)懲方案及其相應(yīng)的信用評(píng)估方案和基于實(shí)用拜占庭容錯(cuò)(practical Byzantine fault tolerance,PBFT)的一致性和檢查點(diǎn)協(xié)議。文獻(xiàn)[9]提出一種基于動(dòng)態(tài)信譽(yù)值的實(shí)用拜占庭容錯(cuò)(dynamic-reputation practical Byzantine fault tolerance,DPBFT)共識(shí)算法。文獻(xiàn)[10]提出一種基于分片的共識(shí)算法。文獻(xiàn)[11]提出了基于跳躍Hash 和動(dòng)態(tài)權(quán)重分片構(gòu)建算法,同時(shí)引入異步共識(shí)組機(jī)制,提升分片的交易安全性,有效處理跨分片交易。文獻(xiàn)[12]針對(duì)區(qū)塊鏈系統(tǒng)中節(jié)點(diǎn)誠(chéng)信問(wèn)題,對(duì)于PBFT 的節(jié)點(diǎn)劃分階段進(jìn)行優(yōu)化,利用聚類算法根據(jù)節(jié)點(diǎn)類型進(jìn)行劃分,提高了區(qū)塊鏈系統(tǒng)中的節(jié)點(diǎn)質(zhì)量,進(jìn)而降低了故障概率。文獻(xiàn)[13]針對(duì)能源領(lǐng)域提出一種基于區(qū)塊鏈技術(shù)的分布式能源信息互通互聯(lián)模式,優(yōu)化了RAFT 算法來(lái)滿足電力數(shù)據(jù)上鏈實(shí)時(shí)性的要求。表1為主流共識(shí)算法的對(duì)比分析。
表1 主流共識(shí)機(jī)制對(duì)比
隨著能源工業(yè)互聯(lián)網(wǎng)發(fā)展的不斷滲透,能源數(shù)據(jù)量與交易量呈指數(shù)型增長(zhǎng)。為了緩解區(qū)塊鏈系統(tǒng)帶來(lái)的存儲(chǔ)壓力,眾多學(xué)者專家對(duì)區(qū)塊鏈中的區(qū)塊存儲(chǔ)方案進(jìn)行優(yōu)化。區(qū)塊存儲(chǔ)優(yōu)化方案主要是在不影響交易吞吐量的情況下改變區(qū)塊的存儲(chǔ)方式。鏈下存儲(chǔ)優(yōu)化方案是一種將區(qū)塊體中數(shù)據(jù)內(nèi)容從原區(qū)塊體轉(zhuǎn)移到鏈下存儲(chǔ)系統(tǒng),區(qū)塊體中僅存儲(chǔ)指向這些數(shù)據(jù)的“指針”和其他非數(shù)據(jù)信息,以解決區(qū)塊鏈存儲(chǔ)可擴(kuò)展性問(wèn)題的方法。星際文件系統(tǒng)(inter planetary file system,IFPS)是一種旨在將所有計(jì)算設(shè)備與相同文件系統(tǒng)連接起來(lái)的點(diǎn)對(duì)點(diǎn)分布式文件系統(tǒng)[14],IPFS 是內(nèi)容尋址的,即內(nèi)容本身決定了內(nèi)容的位置[15],是目前作為區(qū)塊鏈鏈下存儲(chǔ)中使用較多的一種方案。文獻(xiàn)[16]針對(duì)物聯(lián)網(wǎng)數(shù)據(jù)隱私問(wèn)題提出了一種基于區(qū)塊鏈和IPFS 的“模塊化聯(lián)盟架構(gòu)”,既克服了傳統(tǒng)區(qū)塊鏈網(wǎng)絡(luò)無(wú)法存儲(chǔ)海量數(shù)據(jù)的缺點(diǎn),又消除了物聯(lián)網(wǎng)(Internet of Thing,IoT)數(shù)據(jù)的中心化管理模式。Desema[17]是一個(gè)基于Ethereum 和IPFS 的分布式服務(wù)市場(chǎng)系統(tǒng)。在Desema 中,服務(wù)的元數(shù)據(jù)和大型數(shù)據(jù)都存儲(chǔ)在IPFS 中,而區(qū)塊鏈中僅存儲(chǔ)這些數(shù)據(jù)的散列值。Chameleon[18]是一個(gè)動(dòng)態(tài)適應(yīng)、可擴(kuò)展的私有鏈架構(gòu)。它將最近一段時(shí)期(一天或者一周)的數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈中,以前的數(shù)據(jù)存儲(chǔ)到云上。分布式哈希表(distributed hash table,DHT)[19]是一種分布式存儲(chǔ)方法。DHT 在不需要中心服務(wù)器的情況下,每個(gè)節(jié)點(diǎn)負(fù)責(zé)一個(gè)小范圍內(nèi)的路由,同時(shí)存儲(chǔ)一小部分?jǐn)?shù)據(jù),從而實(shí)現(xiàn)DHT 網(wǎng)絡(luò)的尋址和存儲(chǔ)。文獻(xiàn)[20]改變了傳統(tǒng)區(qū)塊鏈網(wǎng)絡(luò)(例如比特幣)存儲(chǔ)所有交易的存儲(chǔ)模式,將數(shù)據(jù)與數(shù)據(jù)引用進(jìn)行分離式存儲(chǔ),設(shè)計(jì)了一種使用DHT 的鏈下存儲(chǔ)模式,其中,DHT由Kademlia[21]實(shí)現(xiàn)。原始數(shù)據(jù)的引用(即原始數(shù)據(jù)SHA-256 計(jì)算后的散列值)保存在區(qū)塊鏈中,而原始數(shù)據(jù)則保存在鏈下的DHT 中。
以上述可知,現(xiàn)存的共識(shí)機(jī)制如POW、POS 共識(shí)機(jī)制均存在參與的節(jié)點(diǎn)數(shù)目較多、共識(shí)時(shí)間較長(zhǎng)以及效率低的問(wèn)題,且大多用于公有鏈中。同樣現(xiàn)有大多數(shù)區(qū)塊鏈鏈下存儲(chǔ)優(yōu)化方案均是基于公有鏈或私有鏈,在聯(lián)盟鏈中的存儲(chǔ)優(yōu)化方案較少。因此,本文針對(duì)區(qū)塊鏈在能源交易過(guò)程中存在的交易效率與存儲(chǔ)容量問(wèn)題,提出基于節(jié)點(diǎn)貢獻(xiàn)度的實(shí)用拜占庭容錯(cuò)共識(shí)算法和位置分區(qū)的聯(lián)盟鏈存儲(chǔ)優(yōu)化策略。共識(shí)算法保證加入聯(lián)盟鏈中節(jié)點(diǎn)的可靠性與能源交易數(shù)據(jù)的不可篡改。存儲(chǔ)策略基于節(jié)點(diǎn)的地理位置劃分出的不同域組,每個(gè)域之間功能與地位都相同。功能上,每個(gè)域只有兩種類型的節(jié)點(diǎn):一個(gè)存儲(chǔ)節(jié)點(diǎn)和若干個(gè)普通節(jié)點(diǎn),只有存儲(chǔ)節(jié)點(diǎn)保存區(qū)塊鏈中全部數(shù)據(jù),其余節(jié)點(diǎn)只需要保存區(qū)塊頭,以此減輕區(qū)塊鏈的存儲(chǔ)壓力。
區(qū)塊鏈本質(zhì)上是一個(gè)全網(wǎng)節(jié)點(diǎn)共同參與記賬的分布式數(shù)據(jù)庫(kù),而共識(shí)機(jī)制是其中的核心要素,能夠確保全網(wǎng)節(jié)點(diǎn)保存在區(qū)塊鏈上的數(shù)據(jù)是一致的。現(xiàn)存的共識(shí)機(jī)制如POW、POS 共識(shí)機(jī)制基本用于公有鏈中,參與的節(jié)點(diǎn)數(shù)目較多,共識(shí)時(shí)間較長(zhǎng)、效率低。而在能源互聯(lián)網(wǎng)場(chǎng)景中,為了滿足能源快速交易的需求,本文基于聯(lián)盟鏈節(jié)點(diǎn)準(zhǔn)入準(zhǔn)出機(jī)制,提出了一種基于節(jié)點(diǎn)貢獻(xiàn)度的實(shí)用拜占庭容錯(cuò)(node-based contribution practical Byzantine fault tolerance,NCPBFT)共識(shí)算法。該算法將網(wǎng)絡(luò)中的參與節(jié)點(diǎn)分為具有不同職責(zé)的4 種類型,分別為主節(jié)點(diǎn)、監(jiān)控節(jié)點(diǎn)、共識(shí)節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)。共識(shí)節(jié)點(diǎn)以及存儲(chǔ)節(jié)點(diǎn)是由監(jiān)控節(jié)點(diǎn)根據(jù)其自身的貢獻(xiàn)度進(jìn)行動(dòng)態(tài)更新,然后主節(jié)點(diǎn)從貢獻(xiàn)度較高的那一半共識(shí)節(jié)點(diǎn)中隨機(jī)選出,并根據(jù)節(jié)點(diǎn)貢獻(xiàn)度對(duì)節(jié)點(diǎn)進(jìn)行降序排序及動(dòng)態(tài)變更。在PBFT 共識(shí)機(jī)制中,共識(shí)的通信復(fù)雜度為O(n2)級(jí)別。若系統(tǒng)中的節(jié)點(diǎn)數(shù)較多,則通信壓力會(huì)較大,為了緩解通信壓力,本文使用簡(jiǎn)化的共識(shí)過(guò)程,將共識(shí)的通信復(fù)雜度減少為O(n)。
在NCPBFT 中,節(jié)點(diǎn)主要分為監(jiān)控節(jié)點(diǎn)、主節(jié)點(diǎn)、共識(shí)節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)幾種類型。
監(jiān)控節(jié)點(diǎn):(1)監(jiān)控全網(wǎng)中節(jié)點(diǎn)的共識(shí)行為及該節(jié)點(diǎn)接入網(wǎng)絡(luò)的具體時(shí)間;(2)根據(jù)節(jié)點(diǎn)貢獻(xiàn)度對(duì)共識(shí)節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)進(jìn)行動(dòng)態(tài)變更;(3)選取主節(jié)點(diǎn);(4)驗(yàn)證節(jié)點(diǎn)同步性。
主節(jié)點(diǎn):(1)接收客戶端發(fā)送的交易,對(duì)交易進(jìn)行排序;(2)打包交易生成預(yù)備消息,并向其他共識(shí)節(jié)點(diǎn)廣播;(3)統(tǒng)計(jì)共識(shí)節(jié)點(diǎn)發(fā)送的反饋消息,生成準(zhǔn)備消息并廣播給其他共識(shí)節(jié)點(diǎn)以及存儲(chǔ)節(jié)點(diǎn);(4)維護(hù)區(qū)塊鏈賬本。
共識(shí)節(jié)點(diǎn)(concensus node,CN):(1)對(duì)主節(jié)點(diǎn)發(fā)送的預(yù)準(zhǔn)備消息進(jìn)行驗(yàn)證,然后生成反饋消息返回給主節(jié)點(diǎn);(2)接收準(zhǔn)備消息并將其寫入到區(qū)塊鏈賬本,然后返回確認(rèn)消息給主節(jié)點(diǎn)。
存儲(chǔ)節(jié)點(diǎn)(storage node,SN):不參與共識(shí)過(guò)程,只將正式區(qū)塊存儲(chǔ)到區(qū)塊鏈賬本。
在該算法中共識(shí)節(jié)點(diǎn)的數(shù)量為n,其中主節(jié)點(diǎn)是在貢獻(xiàn)度較高的共識(shí)節(jié)點(diǎn)中隨機(jī)選擇,存儲(chǔ)節(jié)點(diǎn)的數(shù)量為k,監(jiān)控節(jié)點(diǎn)的數(shù)量為1。假設(shè)網(wǎng)絡(luò)中的惡意節(jié)點(diǎn)數(shù)量為f,則惡意節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)仍滿足f≤(n -1)/3。
由圖1 所示,在NCPBFT 中,只有共識(shí)節(jié)點(diǎn)才能參與共識(shí)過(guò)程進(jìn)行投票和驗(yàn)證等過(guò)程,將高耗性能操作與共識(shí)操作分開(kāi)執(zhí)行能在一定程度上加快共識(shí)過(guò)程,提升業(yè)務(wù)操作區(qū)塊的生成速度,進(jìn)而達(dá)到用戶與應(yīng)用交互的需求。同時(shí),共識(shí)過(guò)程通過(guò)主節(jié)點(diǎn)確認(rèn)區(qū)塊合法性,降低原始PBFT 的通信復(fù)雜度,也縮短了共識(shí)周期所需的時(shí)間,進(jìn)而提高共識(shí)效率。
圖1 NCPBFT 共識(shí)網(wǎng)絡(luò)結(jié)構(gòu)圖
PBFT 算法中共識(shí)過(guò)程主要分為預(yù)準(zhǔn)備、準(zhǔn)備、確認(rèn)以及回復(fù)這幾個(gè)階段。其中在準(zhǔn)備階段和確認(rèn)階段的通信量較多。在準(zhǔn)備階段,除主節(jié)點(diǎn)外的各共識(shí)節(jié)點(diǎn)會(huì)將準(zhǔn)備消息向其他共識(shí)節(jié)點(diǎn)進(jìn)行廣播,在確認(rèn)階段各共識(shí)節(jié)點(diǎn)會(huì)將確認(rèn)消息向其他的共識(shí)節(jié)點(diǎn)進(jìn)行廣播,PBFT 算法的通信復(fù)雜度為O(n2)級(jí)別。參與共識(shí)的節(jié)點(diǎn)數(shù)量越多,則共識(shí)的效率將越低,針對(duì)該問(wèn)題本文提出簡(jiǎn)化的一致性協(xié)議,由主節(jié)點(diǎn)對(duì)交易進(jìn)行排序打包生成預(yù)準(zhǔn)備消息廣播給各共識(shí)節(jié)點(diǎn),共識(shí)節(jié)點(diǎn)對(duì)其進(jìn)行驗(yàn)證然后將結(jié)果返回給主節(jié)點(diǎn),然后由主節(jié)點(diǎn)生成準(zhǔn)備消息廣播給共識(shí)節(jié)點(diǎn)以及存儲(chǔ)節(jié)點(diǎn)進(jìn)行驗(yàn)證保存,共識(shí)節(jié)點(diǎn)以及存儲(chǔ)節(jié)點(diǎn)返回確認(rèn)消息給主節(jié)點(diǎn),NCPBFT 通信復(fù)雜度將降為O(n)。
圖2 中PBFT 算法在預(yù)準(zhǔn)備階段、準(zhǔn)備階段、接受階段的通信消耗量比較多。假設(shè)共識(shí)節(jié)點(diǎn)數(shù)量為n,預(yù)準(zhǔn)備階段的通信消耗量為n -1,準(zhǔn)備階段的通信消耗量為(n -1)2,接受階段的通信消耗量為n(n -1),所以這幾個(gè)階段的總消耗量為T=2n(n-1)。
圖2 PBFT 協(xié)議過(guò)程圖
圖3 所示NCPBFT 中,假設(shè)共識(shí)節(jié)點(diǎn)數(shù)量為n,存儲(chǔ)節(jié)點(diǎn)數(shù)量為k,預(yù)準(zhǔn)備階段的通信消耗量為n -1,反饋階段的通信消耗量為n -1,準(zhǔn)備階段的通信消耗量為n +k -1,接受階段的通信消耗量為n +k -1,所以這幾個(gè)階段的總消耗量為T=4n +2k -4。
圖3 NCPBFT 協(xié)議過(guò)程圖
所以相較于PBFT 算法,NCPBFT 的通信復(fù)雜度降為O(n),基于節(jié)點(diǎn)貢獻(xiàn)度機(jī)制的拜占庭容錯(cuò)共識(shí)算法在參與節(jié)點(diǎn)較多并處理能源互聯(lián)網(wǎng)中大量能源交易時(shí)有更高的效率。
節(jié)點(diǎn)共識(shí)過(guò)程如圖4 所示。
如圖4 所示,在預(yù)準(zhǔn)備階段,主節(jié)點(diǎn)對(duì)交易進(jìn)行打包生成預(yù)準(zhǔn)備消息的條件有:設(shè)置預(yù)準(zhǔn)備消息包含的交易最大數(shù)量Thtx,當(dāng)交易池里的交易量超過(guò)所設(shè)置的預(yù)準(zhǔn)備消息包含的交易最大數(shù)量閾值時(shí),主節(jié)點(diǎn)會(huì)對(duì)最早的一批交易進(jìn)行打包;設(shè)置兩個(gè)區(qū)塊生成的最大時(shí)間間隔為Thbtime,當(dāng)前區(qū)塊時(shí)間戳Tk減去前一區(qū)塊時(shí)間戳Tk-1所獲得值大于等于所設(shè)置的Thbtime時(shí),即使交易池里的交易數(shù)量低于預(yù)準(zhǔn)備消息包含的交易最大數(shù)量,主節(jié)點(diǎn)也會(huì)對(duì)交易進(jìn)行打包,生成預(yù)備區(qū)塊。公式表示如下:
圖4 共識(shí)流程圖
在反饋階段,會(huì)設(shè)置主節(jié)點(diǎn)接收各共識(shí)節(jié)點(diǎn)返回消息的定時(shí)器,當(dāng)主節(jié)點(diǎn)接收到所有共識(shí)節(jié)點(diǎn)返回的反饋消息時(shí),會(huì)生成正式區(qū)塊;當(dāng)定時(shí)結(jié)束,主節(jié)點(diǎn)統(tǒng)計(jì)返回的反饋消息數(shù)量,當(dāng)數(shù)量大于等于(n為共識(shí)節(jié)點(diǎn)數(shù)),則會(huì)生成準(zhǔn)備消息。公式表示為
如圖5 所示,監(jiān)控節(jié)點(diǎn)根據(jù)各節(jié)點(diǎn)在共識(shí)過(guò)程中的表現(xiàn),對(duì)各節(jié)點(diǎn)的貢獻(xiàn)度進(jìn)行相應(yīng)的更新,然后根據(jù)貢獻(xiàn)度對(duì)節(jié)點(diǎn)進(jìn)行類別更新。計(jì)算節(jié)點(diǎn)的貢獻(xiàn)度以及更新節(jié)點(diǎn)類型方法如下所述。
圖5 節(jié)點(diǎn)貢獻(xiàn)度計(jì)算流程圖
對(duì)于新加入系統(tǒng)的節(jié)點(diǎn)給予其初始值:Cinit=0.5。節(jié)點(diǎn)貢獻(xiàn)值,即根據(jù)各節(jié)點(diǎn)共識(shí)行為來(lái)進(jìn)行計(jì)算:
根據(jù)各節(jié)點(diǎn)連續(xù)參與網(wǎng)絡(luò)的時(shí)間計(jì)算網(wǎng)絡(luò)穩(wěn)定值為
其中tnow表示現(xiàn)在的時(shí)間值,tstart表示節(jié)點(diǎn)接入網(wǎng)絡(luò)的時(shí)間。
最終節(jié)點(diǎn)的貢獻(xiàn)度為
其中λ為調(diào)節(jié)參數(shù),可調(diào)整節(jié)點(diǎn)貢獻(xiàn)值和網(wǎng)絡(luò)穩(wěn)定值所占的比重。而當(dāng)節(jié)點(diǎn)為惡意節(jié)點(diǎn)則將節(jié)點(diǎn)貢獻(xiàn)度設(shè)為0,并將其剔除系統(tǒng)。
則各節(jié)點(diǎn)的貢獻(xiàn)度為
在該模型中,節(jié)點(diǎn)分為監(jiān)控節(jié)點(diǎn)、存儲(chǔ)節(jié)點(diǎn)兩類。其中存儲(chǔ)節(jié)點(diǎn)根據(jù)性能評(píng)價(jià)指標(biāo)分為存儲(chǔ)節(jié)點(diǎn)和普通存儲(chǔ)節(jié)點(diǎn)。該優(yōu)化模型根據(jù)不同的位置劃分節(jié)點(diǎn)域,不同域間通過(guò)存儲(chǔ)節(jié)點(diǎn)進(jìn)行關(guān)聯(lián)。存儲(chǔ)優(yōu)化模型如圖6 所示。每個(gè)域內(nèi)都會(huì)有一個(gè)存儲(chǔ)節(jié)點(diǎn)和若干普通存儲(chǔ)節(jié)點(diǎn),正常情況下每隔時(shí)間t監(jiān)控節(jié)點(diǎn)會(huì)根據(jù)性能評(píng)價(jià)指標(biāo)選擇出性能最好的節(jié)點(diǎn)作為存儲(chǔ)節(jié)點(diǎn),其余節(jié)點(diǎn)均作為普通存儲(chǔ)節(jié)點(diǎn);同時(shí)為確保系統(tǒng)正常運(yùn)行,所有的存儲(chǔ)節(jié)點(diǎn)要求定時(shí)發(fā)送心跳到監(jiān)控節(jié)點(diǎn)并由監(jiān)控節(jié)點(diǎn)進(jìn)行監(jiān)督,一旦發(fā)現(xiàn)存在狀態(tài)異常的節(jié)點(diǎn),由監(jiān)控節(jié)點(diǎn)負(fù)責(zé)計(jì)算各節(jié)點(diǎn)的性能評(píng)價(jià)指標(biāo)值并選出狀態(tài)良好的節(jié)點(diǎn)作為該異常節(jié)點(diǎn)的替代。在存儲(chǔ)數(shù)據(jù)的過(guò)程中存儲(chǔ)節(jié)點(diǎn)會(huì)分別負(fù)責(zé)不同的模塊,普通存儲(chǔ)節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)區(qū)塊鏈數(shù)據(jù)較少的區(qū)塊頭,并形成區(qū)塊頭鏈;而存儲(chǔ)節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)整條區(qū)塊鏈生成的區(qū)塊數(shù)據(jù)。為降低域與域間由于距離引起的通信時(shí)延,當(dāng)有新的節(jié)點(diǎn)想要加入到該區(qū)塊鏈系統(tǒng)時(shí),通過(guò)該節(jié)點(diǎn)給出的位置信息將其分配到離它最近的節(jié)點(diǎn)域。
圖6 存儲(chǔ)優(yōu)化模型示意圖
本文提出的聯(lián)盟鏈存儲(chǔ)優(yōu)化策略的數(shù)據(jù)存儲(chǔ)過(guò)程如圖7 所示。在一個(gè)域內(nèi),正常情況下的具體流程如下。
圖7 存儲(chǔ)過(guò)程
步驟1某個(gè)節(jié)點(diǎn)接收到能源交易的數(shù)據(jù)時(shí),首先對(duì)自身身份作出判斷,即是否為普通存儲(chǔ)節(jié)點(diǎn)。若該節(jié)點(diǎn)為存儲(chǔ)節(jié)點(diǎn)而非普通存儲(chǔ)節(jié)點(diǎn),可以直接對(duì)交易數(shù)據(jù)進(jìn)行投票驗(yàn)證其合法性;反之,則需要將該交易數(shù)據(jù)廣播到全網(wǎng)直至有存儲(chǔ)節(jié)點(diǎn)接收到轉(zhuǎn)發(fā)的信息。
步驟2存儲(chǔ)節(jié)點(diǎn)接收到該交易數(shù)據(jù)后,首先通過(guò)投票驗(yàn)證該交易數(shù)據(jù)的合法性。同時(shí)為了避免不必要的帶寬開(kāi)銷,該存儲(chǔ)節(jié)點(diǎn)只將驗(yàn)證合格的交易廣播到其他存儲(chǔ)節(jié)點(diǎn)。
步驟3存儲(chǔ)節(jié)點(diǎn)打包驗(yàn)證合格的交易形成區(qū)塊,并開(kāi)始參與共識(shí)。
步驟4存儲(chǔ)節(jié)點(diǎn)向系統(tǒng)模型發(fā)送存儲(chǔ)數(shù)據(jù)的請(qǐng)求,存儲(chǔ)共識(shí)生成的區(qū)塊,并向全網(wǎng)廣播區(qū)塊頭的數(shù)據(jù)。
步驟5普通節(jié)點(diǎn)接收區(qū)塊頭數(shù)據(jù)并存儲(chǔ)。
步驟6結(jié)束。
只有在保存完整交易數(shù)據(jù)的節(jié)點(diǎn)上才能進(jìn)行相應(yīng)的交易驗(yàn)證。該模型中,每個(gè)節(jié)點(diǎn)域都存在一個(gè)保存完整區(qū)塊數(shù)據(jù)的存儲(chǔ)節(jié)點(diǎn),普通存儲(chǔ)節(jié)點(diǎn)若想進(jìn)行交易驗(yàn)證,則需要和存儲(chǔ)節(jié)點(diǎn)合作才能獲取相應(yīng)的驗(yàn)證結(jié)果。驗(yàn)證過(guò)程中,一旦存儲(chǔ)節(jié)點(diǎn)表現(xiàn)異常,無(wú)法與普通存儲(chǔ)節(jié)點(diǎn)合作驗(yàn)證,則需要請(qǐng)求監(jiān)控節(jié)點(diǎn)獲取得到網(wǎng)絡(luò)中其他存儲(chǔ)節(jié)點(diǎn)的節(jié)點(diǎn)列表并選出若干個(gè)存儲(chǔ)節(jié)點(diǎn)完成該交易的驗(yàn)證。交易驗(yàn)證的步驟如圖8 所示。
圖8 驗(yàn)證過(guò)程
具體的交易驗(yàn)證過(guò)程如下。
步驟1普通存儲(chǔ)節(jié)點(diǎn)想要驗(yàn)證某條交易信息,首先需要向該節(jié)點(diǎn)所在節(jié)點(diǎn)域中的存儲(chǔ)節(jié)點(diǎn)發(fā)送驗(yàn)證請(qǐng)求,并對(duì)該節(jié)點(diǎn)狀態(tài)進(jìn)行判斷。若節(jié)點(diǎn)狀態(tài)正常,存儲(chǔ)節(jié)點(diǎn)會(huì)對(duì)收到的驗(yàn)證請(qǐng)求進(jìn)行驗(yàn)證處理并將帶有數(shù)字簽名的處理結(jié)果反饋給普通存儲(chǔ)節(jié)點(diǎn);反之,普通存儲(chǔ)節(jié)點(diǎn)要繼續(xù)請(qǐng)求網(wǎng)絡(luò)中的其他類似的存儲(chǔ)節(jié)點(diǎn)進(jìn)行驗(yàn)證,并對(duì)當(dāng)前存儲(chǔ)節(jié)點(diǎn)作差評(píng)處理并記錄。
步驟2普通存儲(chǔ)節(jié)點(diǎn)接收驗(yàn)證結(jié)果。
步驟3普通存儲(chǔ)節(jié)點(diǎn)對(duì)驗(yàn)證結(jié)果進(jìn)行一致性判斷,若結(jié)果一致則通過(guò)驗(yàn)證并對(duì)該存儲(chǔ)節(jié)點(diǎn)作良好評(píng)價(jià),最后將評(píng)價(jià)結(jié)果回饋給監(jiān)控節(jié)點(diǎn);反之,認(rèn)為返回驗(yàn)證結(jié)果的存儲(chǔ)節(jié)點(diǎn)狀態(tài)異常,需給予該節(jié)點(diǎn)差評(píng)處理并將評(píng)價(jià)結(jié)果回饋到監(jiān)控節(jié)點(diǎn)并請(qǐng)求選擇新的存儲(chǔ)節(jié)點(diǎn)進(jìn)行驗(yàn)證操作。
步驟4結(jié)束。
該存儲(chǔ)優(yōu)化方法的共識(shí)模塊選擇采用第2 節(jié)提到的NCPBFT 算法,存儲(chǔ)模塊應(yīng)用本文第3 節(jié)所提出的優(yōu)化方案。使用本地?cái)?shù)據(jù)庫(kù)提供外部服務(wù),如交易數(shù)據(jù)和塊查詢。系統(tǒng)底層仍采用區(qū)塊鏈技術(shù)架構(gòu)體系、橢圓曲線密碼(ECC)非對(duì)稱加密算法等以保證系統(tǒng)安全性。模擬實(shí)驗(yàn)在CPU 為Intel Xeon Processor 的服務(wù)器上進(jìn)行,運(yùn)用Openstack 虛擬出17 個(gè)節(jié)點(diǎn)的ubuntu18.04 系統(tǒng),每個(gè)節(jié)點(diǎn)的硬件配置為CPU 頻率為2.4 GHz,內(nèi)存大小為2 GB,存儲(chǔ)容量為20 GB。劃分一個(gè)監(jiān)控節(jié)點(diǎn)和4 個(gè)域,每個(gè)域4 個(gè)節(jié)點(diǎn)。選用Hyperledge Fabric 0.6 在相同的環(huán)境下做對(duì)比實(shí)驗(yàn)。
本次實(shí)驗(yàn)共識(shí)模塊采用NCPBFT 算法,一種改進(jìn)的PBFT 算法,雖然只有部分節(jié)點(diǎn)參與共識(shí)過(guò)程,但同樣滿足惡意節(jié)點(diǎn)數(shù)量不超過(guò)總共識(shí)節(jié)點(diǎn)數(shù)量的1/3 時(shí)整個(gè)共識(shí)過(guò)程將順利進(jìn)行,進(jìn)而能夠有效降低通信復(fù)雜度、提高共識(shí)效率;同時(shí)采用基于位置分區(qū)的聯(lián)盟鏈存儲(chǔ)優(yōu)化策略,保證只有性能評(píng)價(jià)好的節(jié)點(diǎn)即存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)整個(gè)區(qū)塊信息,其余普通存儲(chǔ)節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)區(qū)塊鏈頭信息。在降低存儲(chǔ)壓力的同時(shí),進(jìn)一步降低了惡意節(jié)點(diǎn)入侵造成重大損失的幾率。
4.3.1 節(jié)點(diǎn)共識(shí)性能測(cè)試
由于共識(shí)算法性能差異,為驗(yàn)證NCPBFT 的有效性,通過(guò)發(fā)送1000 條能源交易數(shù)據(jù),4 個(gè)節(jié)點(diǎn)對(duì)生成連續(xù)20 個(gè)區(qū)塊進(jìn)行測(cè)試。從圖9 可以看出,與其他幾種經(jīng)典共識(shí)算法如PBFT、PoS-PBFT、RAFT等相比,本文所提NCPBFT 吞吐量的平均值有了明顯提升,整個(gè)交易處理過(guò)程花費(fèi)時(shí)間較少。這主要是由于NCPBFT 優(yōu)化了主節(jié)點(diǎn)選取過(guò)程,降低了共識(shí)算法通信復(fù)雜度。
圖9 經(jīng)典共識(shí)算法吞吐量比較
當(dāng)參與共識(shí)的節(jié)點(diǎn)數(shù)為4 的時(shí)候,分別選擇包含50、100、200、300、500、700、1000、1500、2000、2500、3000 等交易量的區(qū)塊大小,針對(duì)本文所提出的算法NCPDBT 及傳統(tǒng)PBFT 算法的時(shí)延、吞吐量進(jìn)行相應(yīng)的實(shí)驗(yàn)分析。具體實(shí)驗(yàn)結(jié)果如圖10 和圖11所示。
圖10 區(qū)塊大小不同時(shí)傳統(tǒng)PBFT 及NCPBFT 中吞吐量對(duì)比圖
圖11 區(qū)塊大小變化時(shí)傳統(tǒng)PBFT 及NCPBFT 算法時(shí)延對(duì)比圖
由圖10、11 可以看出,本文方案相較于PBFT算法有著較高的吞吐量和較低的時(shí)延,兩個(gè)方案中吞吐量在開(kāi)始時(shí)會(huì)隨著區(qū)塊內(nèi)交易數(shù)量的增多而升高,但在區(qū)塊的大小到達(dá)某一值之后其吞吐量則增長(zhǎng)緩慢甚至?xí)档汀6鴷r(shí)延是隨著區(qū)塊的增大而不斷在增大的。所以區(qū)塊的大小要選擇一個(gè)最適值來(lái)獲得最佳的性能??傮w來(lái)說(shuō),本文方案較PBFT 算法的性能更優(yōu)。
接下來(lái)在區(qū)塊大小為300,共識(shí)節(jié)點(diǎn)數(shù)為4 個(gè)、6 個(gè)、8 個(gè)時(shí),分別給出了NCPBFT 共識(shí)算法在20 次實(shí)驗(yàn)中吞吐量和時(shí)延的變化的值,結(jié)果如圖12 所示。
圖12 NCPBFT 算法區(qū)塊大小為300 時(shí)不同共識(shí)節(jié)點(diǎn)數(shù)下的性能
在區(qū)塊大小為500,共識(shí)節(jié)點(diǎn)數(shù)分別為4 個(gè)、6個(gè)、8 個(gè)時(shí),NCPBFT 算法在20 次實(shí)驗(yàn)中的吞吐量和時(shí)延的變化值如圖13 所示。
圖13 NCPBFT 算法區(qū)塊大小為500 時(shí)不同共識(shí)節(jié)點(diǎn)數(shù)下的性能
圖12 和圖13 是基于NCPBFT 共識(shí)算法,在不同的共識(shí)節(jié)點(diǎn)情況下,在多次實(shí)驗(yàn)中吞吐量和時(shí)延的變化,由圖可以看出在區(qū)塊大小固定不變時(shí),共識(shí)節(jié)點(diǎn)數(shù)越多,其吞吐量會(huì)越低,而時(shí)延會(huì)越高。這是因?yàn)楣?jié)點(diǎn)數(shù)增加了,各節(jié)點(diǎn)的通信次數(shù)就會(huì)增加,所以時(shí)延會(huì)增大,吞吐量則會(huì)減小。
4.3.2 存儲(chǔ)開(kāi)銷測(cè)試
網(wǎng)絡(luò)中全部節(jié)點(diǎn)正常工作且不受攻擊時(shí),比較在本文及Fabric 存儲(chǔ)策略下每個(gè)區(qū)塊存儲(chǔ)500、1000、2000、3000 個(gè)區(qū)塊數(shù)據(jù)的存儲(chǔ)開(kāi)銷,其結(jié)果如圖14 所示。
圖14 文中策略與Fabric 存儲(chǔ)占比對(duì)比圖
通過(guò)分析圖14 的實(shí)驗(yàn)結(jié)果,可以得出如下結(jié)論。
(1) 當(dāng)整個(gè)區(qū)塊鏈中只生成少量區(qū)塊時(shí),本文所提出的存儲(chǔ)優(yōu)化策略較Fabric 存儲(chǔ)而言其優(yōu)勢(shì)不是很明顯,但當(dāng)交易量的增多導(dǎo)致區(qū)塊鏈中區(qū)塊逐漸增多時(shí),本文提出的存儲(chǔ)策略所要占用的存儲(chǔ)空間比Fabric 的要小很多。
(2) 交易量增多導(dǎo)致區(qū)塊鏈中區(qū)塊逐漸增多的情況下,本文所提存儲(chǔ)方案的存儲(chǔ)占用增長(zhǎng)速率要遠(yuǎn)遠(yuǎn)低于Fabric 存儲(chǔ)。
Fabric 內(nèi)的每個(gè)節(jié)點(diǎn)都存儲(chǔ)完整的區(qū)塊數(shù)據(jù),而本文所提存儲(chǔ)方案中每個(gè)節(jié)點(diǎn)域只有存儲(chǔ)節(jié)點(diǎn)才會(huì)存儲(chǔ)完整的區(qū)塊數(shù)據(jù),在普通存儲(chǔ)節(jié)點(diǎn)內(nèi)部只對(duì)區(qū)塊鏈中的每個(gè)區(qū)塊的區(qū)塊頭進(jìn)行相應(yīng)的存儲(chǔ);當(dāng)區(qū)塊數(shù)逐漸增大時(shí),本文方案的優(yōu)勢(shì)更加明顯,與Fabric 相比存儲(chǔ)占用雖然也在逐漸增加,但其增長(zhǎng)速度明顯變緩。此次實(shí)驗(yàn)結(jié)果證明了本文所提策略的有效性。
4.3.3 交易驗(yàn)證測(cè)試
交易驗(yàn)證過(guò)程中,區(qū)塊鏈系統(tǒng)對(duì)驗(yàn)證請(qǐng)求的響應(yīng)時(shí)間對(duì)當(dāng)次交易驗(yàn)證能否有合理的反饋結(jié)果起著至關(guān)重要的作用,此次驗(yàn)證主要以不同節(jié)點(diǎn)對(duì)相同交易驗(yàn)證請(qǐng)求進(jìn)行處理的時(shí)間為基準(zhǔn)進(jìn)行驗(yàn)證測(cè)試。假設(shè)區(qū)塊鏈系統(tǒng)中節(jié)點(diǎn)運(yùn)行狀態(tài)正常,選擇存儲(chǔ)節(jié)點(diǎn)、普通存儲(chǔ)節(jié)點(diǎn)、Fabric 中的節(jié)點(diǎn),比較同一節(jié)點(diǎn)在查詢驗(yàn)證500、1000、2000、3000 條交易所需的驗(yàn)證時(shí)間。具體結(jié)果如圖15 所示。
圖15 交易驗(yàn)證對(duì)比圖
根據(jù)圖15 結(jié)果,可得出以下結(jié)論。
(1) 查詢的交易數(shù)量相同的情況下,普通存儲(chǔ)節(jié)點(diǎn)、存儲(chǔ)節(jié)點(diǎn)和Fabric 節(jié)點(diǎn)的查詢驗(yàn)證時(shí)間均會(huì)隨著數(shù)據(jù)量的增大而變長(zhǎng)。
(2) 查詢的交易數(shù)量相同的情況下,在存儲(chǔ)節(jié)點(diǎn)上和在Fabric 節(jié)點(diǎn)上查詢驗(yàn)證的時(shí)間幾乎一致。
(3) 查詢的交易數(shù)量相同的情況下,在普通存儲(chǔ)節(jié)點(diǎn)上進(jìn)行查詢驗(yàn)證的時(shí)間要遠(yuǎn)遠(yuǎn)高于在存儲(chǔ)節(jié)點(diǎn)和在Fabric 節(jié)點(diǎn)上的時(shí)間。
基于分區(qū)的存儲(chǔ)優(yōu)化策略下,區(qū)塊數(shù)據(jù)分別由存儲(chǔ)節(jié)點(diǎn)和普通存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ),其中只有存儲(chǔ)節(jié)點(diǎn)才有權(quán)存儲(chǔ)完整的區(qū)塊信息,普通存儲(chǔ)節(jié)點(diǎn)只負(fù)責(zé)區(qū)塊頭信息的存儲(chǔ)。由普通節(jié)點(diǎn)發(fā)起的驗(yàn)證請(qǐng)求要通過(guò)進(jìn)一步轉(zhuǎn)發(fā)給存儲(chǔ)節(jié)點(diǎn)才能進(jìn)行交易的驗(yàn)證,故而查詢會(huì)稍慢一些。Fabric 的所有節(jié)點(diǎn)均存有區(qū)塊的完整數(shù)據(jù),故而查詢驗(yàn)證Fabric 節(jié)點(diǎn)的時(shí)間與查詢驗(yàn)證存儲(chǔ)節(jié)點(diǎn)的時(shí)間相差無(wú)幾。綜上所述,盡管普通存儲(chǔ)節(jié)點(diǎn)查詢驗(yàn)證時(shí)間的時(shí)間會(huì)稍長(zhǎng),但并不影響整個(gè)區(qū)塊鏈能源交易系統(tǒng)的正常運(yùn)行。
為了提升能源互聯(lián)網(wǎng)中能源交易效率、降低通信復(fù)雜度及能源數(shù)據(jù)的存儲(chǔ)壓力、實(shí)現(xiàn)能源互聯(lián)網(wǎng)跨企業(yè)之間的數(shù)據(jù)共享,本文基于區(qū)塊鏈共識(shí)算法、存儲(chǔ)策略等技術(shù),提出了一種改進(jìn)的基于節(jié)點(diǎn)貢獻(xiàn)度的實(shí)用拜占庭容錯(cuò)共識(shí)機(jī)制。根據(jù)節(jié)點(diǎn)貢獻(xiàn)值計(jì)算并進(jìn)行共識(shí)節(jié)點(diǎn)的選取,保證節(jié)點(diǎn)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)的可靠性、能源數(shù)據(jù)的不可篡改性的同時(shí)降低通信復(fù)雜度、提升能源交易效率;在聯(lián)盟鏈數(shù)據(jù)分區(qū)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)優(yōu)化策略中,基于存儲(chǔ)節(jié)點(diǎn)的地理位置劃分出的不同域組,每個(gè)域只有一個(gè)存儲(chǔ)節(jié)點(diǎn)和若干個(gè)普通存儲(chǔ)節(jié)點(diǎn),只有存儲(chǔ)節(jié)點(diǎn)保存區(qū)塊鏈中全部數(shù)據(jù),其余節(jié)點(diǎn)只需要保存區(qū)塊頭,進(jìn)一步減輕區(qū)塊鏈存儲(chǔ)壓力。通過(guò)實(shí)驗(yàn)驗(yàn)證了本文所提方案能夠有效提升能源交易效率、降低通信復(fù)雜度及區(qū)塊鏈存儲(chǔ)壓力。