郭儀,于雷*,張瀚文,顏擁,孫毅
1.中國(guó)科學(xué)院計(jì)算技術(shù)研究所,北京 100190
2.中國(guó)科學(xué)院大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,北京 100049
3.國(guó)網(wǎng)浙江省電力有限公司電力科學(xué)研究院,浙江 杭州 310014
黨的十九大提出了建設(shè)“數(shù)字中國(guó)”的重大戰(zhàn)略命題,隨著信息技術(shù)的進(jìn)步和物聯(lián)網(wǎng)領(lǐng)域的飛速發(fā)展,數(shù)據(jù)正在以前所未有的速度產(chǎn)生,數(shù)據(jù)的價(jià)值也越來(lái)越被公眾所認(rèn)可。國(guó)家電網(wǎng)規(guī)劃建設(shè)的樞紐型、平臺(tái)型、共享型的能源互聯(lián)網(wǎng)數(shù)據(jù)管理平臺(tái),將大數(shù)據(jù)以及大數(shù)據(jù)思維嵌入政府治理流程是大數(shù)據(jù)時(shí)代實(shí)現(xiàn)政府治理能力和治理體系現(xiàn)代化的重要意旨[1]。
電力大數(shù)據(jù)的價(jià)值主要體現(xiàn)在不同領(lǐng)域?qū)ζ涞拈_(kāi)發(fā)利用,因此實(shí)現(xiàn)電網(wǎng)大數(shù)據(jù)的安全有效共享非常必要,這樣其他領(lǐng)域的研究可以充分地發(fā)揮電力大數(shù)據(jù)的潛在價(jià)值。比如,對(duì)某些研究機(jī)構(gòu)而言,其理論研究成果需要建立在實(shí)際電力數(shù)據(jù)的基礎(chǔ)之上,但是傳統(tǒng)的電力大數(shù)據(jù)管理架構(gòu)有著嚴(yán)格的限制,因此在使用過(guò)程中需要花費(fèi)大量的時(shí)間來(lái)人工處理權(quán)限審查等問(wèn)題,嚴(yán)重影響了電力大數(shù)據(jù)的價(jià)值發(fā)現(xiàn)[2]。
區(qū)塊鏈最早起源于中本聰2008年提出的比特幣,是一種以密碼學(xué)算法為基礎(chǔ)的、去中心化的點(diǎn)對(duì)點(diǎn)分布式賬本技術(shù)[3],其首次解決了基于信任的中心化模型帶來(lái)的安全問(wèn)題,使得系統(tǒng)中互無(wú)信任關(guān)系的參與方通過(guò)相互協(xié)作,完成可信的數(shù)據(jù)傳遞與價(jià)值流轉(zhuǎn)。
聯(lián)盟鏈作為區(qū)塊鏈的一種,節(jié)點(diǎn)的加入需要經(jīng)過(guò)鏈上驗(yàn)證節(jié)點(diǎn)的嚴(yán)格審核,在一定程度上保障了生態(tài)的穩(wěn)定性、安全性,而且通過(guò)特殊的共識(shí)機(jī)制弱化了系統(tǒng)整體挖礦資源的消耗,強(qiáng)化了鏈上用戶的身份認(rèn)證標(biāo)準(zhǔn),同時(shí)兼?zhèn)鋮^(qū)塊鏈不易篡改、可溯源、公開(kāi)透明的特性,在解決能源互聯(lián)網(wǎng)領(lǐng)域存在的數(shù)據(jù)孤島、價(jià)值封閉問(wèn)題方面具有天然優(yōu)勢(shì),可促進(jìn)能源數(shù)據(jù)資源跨部門開(kāi)放共享、數(shù)據(jù)訪問(wèn)權(quán)保護(hù)、數(shù)據(jù)有償使用等。
目前國(guó)內(nèi)外在相關(guān)領(lǐng)域已經(jīng)有了一定的研究發(fā)展。文獻(xiàn)[4]提出了一種高性能的智能設(shè)備的區(qū)塊鏈管理平臺(tái),該平臺(tái)使用分布式網(wǎng)絡(luò)架構(gòu)、設(shè)備節(jié)點(diǎn)映射及共識(shí)算法等技術(shù)實(shí)現(xiàn)智能設(shè)備的分散自治。文獻(xiàn)[5]在智能電網(wǎng)場(chǎng)景下,對(duì)基于區(qū)塊鏈的點(diǎn)對(duì)點(diǎn)能源交易服務(wù)進(jìn)行研究,并使用中間人攻擊、重放攻擊與偽裝攻擊驗(yàn)證了該機(jī)制的安全性與可靠性。文獻(xiàn)[6]提出了基于區(qū)塊鏈和多重簽名的電能交易機(jī)制,保障了交易雙方的權(quán)益。文獻(xiàn)[7]基于以太坊平臺(tái)的區(qū)塊鏈技術(shù),建立了面向?qū)崟r(shí)交易請(qǐng)求與數(shù)據(jù)采集的層級(jí)化智能配售電交易平臺(tái)體系架構(gòu)。文獻(xiàn)[8]應(yīng)用區(qū)塊鏈技術(shù)的多中心化、可信任、可追溯等特性,使聯(lián)盟企業(yè)的數(shù)字資產(chǎn)交易系統(tǒng)相互連通,實(shí)現(xiàn)數(shù)字資產(chǎn)跨機(jī)構(gòu)安全流轉(zhuǎn)。文獻(xiàn)[9]提出基于區(qū)塊鏈的電力數(shù)據(jù)統(tǒng)一監(jiān)管與共享交易模型,設(shè)計(jì)基于摘要目錄樹集中式檢索的電力數(shù)據(jù)共享交易第三方平臺(tái),形成了區(qū)塊鏈下以“弱化第三方數(shù)據(jù)集中托管中心,強(qiáng)化點(diǎn)對(duì)點(diǎn)交易”為特點(diǎn)的數(shù)據(jù)共享交易機(jī)制。文獻(xiàn)[10]提出基于聯(lián)盟鏈的微電網(wǎng)身份認(rèn)證協(xié)議,將區(qū)塊鏈應(yīng)用于微電網(wǎng)的身份認(rèn)證,以解決微電網(wǎng)電力交易存在的身份認(rèn)證協(xié)議不安全、交易中心化、數(shù)據(jù)無(wú)法追蹤溯源、節(jié)點(diǎn)之間缺乏共識(shí)等問(wèn)題。文獻(xiàn)[11]利用聯(lián)盟區(qū)塊鏈的分布式存儲(chǔ)、智能合約、共識(shí)機(jī)制等技術(shù)解決泛在電力物聯(lián)網(wǎng)的信息安全、數(shù)據(jù)建模、網(wǎng)絡(luò)傳輸?shù)葐?wèn)題。文獻(xiàn)[12]從多種維度對(duì)區(qū)塊鏈在能源互聯(lián)網(wǎng)中的運(yùn)用進(jìn)行了總結(jié),并對(duì)區(qū)塊鏈在能源互聯(lián)網(wǎng)各種運(yùn)用場(chǎng)景中發(fā)揮的作用進(jìn)行了探討。
雖然目前針對(duì)電力數(shù)據(jù)管理的研究已經(jīng)在區(qū)塊鏈、身份認(rèn)證、溯源等方面有了一定的成果,但是綜合多種技術(shù)需求的實(shí)用平臺(tái)仍有待研究,由此,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于聯(lián)盟鏈并結(jié)合身份認(rèn)證、鏈上鏈下雙數(shù)據(jù)庫(kù)同步存儲(chǔ)以及數(shù)據(jù)訪問(wèn)權(quán)追蹤的電力數(shù)據(jù)交易平臺(tái)方案。
2008年,中本聰首先在Bitcoin:A Peer-to-Peer Electronic Cash System[13]中提出比特幣的概念。而區(qū)塊鏈則是從比特幣系統(tǒng)中抽離出來(lái)的關(guān)鍵技術(shù)實(shí)現(xiàn)。從本質(zhì)上講,區(qū)塊鏈?zhǔn)且粋€(gè)安全、可信的基于密碼學(xué)的分布式數(shù)據(jù)庫(kù),記載所有交易記錄。區(qū)塊鏈基于密碼學(xué)而非基于信任的交易規(guī)則及共識(shí)方式,使得達(dá)成一致的各方可以直接進(jìn)行交易,而無(wú)需第三方中介的參與。
系統(tǒng)中的每項(xiàng)操作以“交易”的形式廣播到所有的參與者,按照系統(tǒng)統(tǒng)一規(guī)則將獲得共識(shí)的交易信息記錄到“塊”中,每個(gè)塊記載著前一個(gè)塊的摘要信息,從而構(gòu)成環(huán)環(huán)相扣的鏈?zhǔn)浇Y(jié)構(gòu),因此,一個(gè)塊的變化會(huì)使得其后續(xù)鏈的數(shù)據(jù)一致性失效,從而確保了鏈上信息的安全性。

圖1 區(qū)塊鏈鏈?zhǔn)浇Y(jié)構(gòu)Fig.1 Blockchain structure
鏈?zhǔn)浇Y(jié)構(gòu)以及多方共識(shí)機(jī)制的存在,使得區(qū)塊鏈具有其他技術(shù)所沒(méi)有的天然優(yōu)勢(shì)——公開(kāi)透明,高度安全。公開(kāi)透明源于其去信任化規(guī)則,網(wǎng)絡(luò)中節(jié)點(diǎn)通過(guò)數(shù)字簽名技術(shù)進(jìn)行驗(yàn)證,無(wú)需相互信任,只有遵守鏈上固定“合同”——智能合約,節(jié)點(diǎn)產(chǎn)生的數(shù)據(jù)才會(huì)被其他節(jié)點(diǎn)認(rèn)可;高度安全則源于其多中心化的特點(diǎn),整個(gè)區(qū)塊鏈網(wǎng)絡(luò)中存在多個(gè)中心化的硬件或管理機(jī)構(gòu),每個(gè)中心包括一個(gè)或多個(gè)接入節(jié)點(diǎn),區(qū)塊鏈數(shù)據(jù)由所有節(jié)點(diǎn)共同維護(hù),如有節(jié)點(diǎn)想篡改數(shù)據(jù),那么其必須擁有超過(guò)半數(shù)的算力(計(jì)算資源),這一設(shè)計(jì)極大地提高了區(qū)塊鏈的安全性。
區(qū)塊鏈發(fā)展初期,主要應(yīng)用于數(shù)字貨幣領(lǐng)域,代表應(yīng)用即為比特幣,實(shí)現(xiàn)了可編程貨幣,這被稱之為“區(qū)塊鏈1.0 時(shí)代”。隨著人們對(duì)區(qū)塊鏈認(rèn)識(shí)程度的不斷深入,區(qū)塊鏈開(kāi)始應(yīng)用至數(shù)字貨幣以外的諸多領(lǐng)域,如數(shù)字存證、數(shù)字版權(quán)等。2014年,支持圖靈完備“智能合約”(smart contract)的以太坊(Ethereum)誕生,業(yè)界由此進(jìn)入了“區(qū)塊鏈2.0”時(shí)代。
根據(jù)不同的應(yīng)用場(chǎng)景以及用戶需求,區(qū)塊鏈大致可以分為公有鏈(Public Blockchain)、私有鏈(Private Blockchain)以及聯(lián)盟鏈(Consortium Blockchain)三大類[8]。具體分類見(jiàn)表格1。

表1 區(qū)塊鏈的種類Table 1 Types of blockchain
以太坊作為區(qū)塊鏈2.0 時(shí)代的代表,通過(guò)一套圖靈完備的腳本語(yǔ)言(Ethereum Virtual Machinecode,簡(jiǎn)稱EVM 語(yǔ)言)來(lái)允許用戶建立應(yīng)用。以太坊整體架構(gòu)分為三層:頂層應(yīng)用、核心層、底層服務(wù)。頂層應(yīng)用中包括 API 接口、智能合約和去中心化應(yīng)用(DApp)等。核心層包含區(qū)塊鏈、共識(shí)算法和以太坊虛擬機(jī)等核心元件,以區(qū)塊鏈技術(shù)為主題,輔以以太坊特有的共識(shí)算法,并且以 EVM(Ethereum Virtual Machine,以太坊虛擬機(jī))作為運(yùn)行智能合約的載體。底層服務(wù)包括P2P 網(wǎng)絡(luò)服務(wù)、LevelDB 數(shù)據(jù)庫(kù)、密碼學(xué)算法及分片(Sharding)優(yōu)化等基礎(chǔ)服務(wù)。
共識(shí)機(jī)制誕生于分布式系統(tǒng)中,幾十年來(lái),該領(lǐng)域已經(jīng)成為一個(gè)很重要的研究方向,共識(shí)機(jī)制的存在,使得分布式節(jié)點(diǎn)集合中的共享數(shù)據(jù)或者共享狀態(tài)達(dá)到一致性,而這種一致性的需求,在于需要保證在同一個(gè)網(wǎng)絡(luò)中,數(shù)據(jù)庫(kù)系統(tǒng)中的信息能夠被保證不受故障節(jié)點(diǎn)影響,也就是說(shuō),即使一個(gè)或多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)失效,共識(shí)機(jī)制可以保證數(shù)據(jù)不會(huì)丟失。
共識(shí)機(jī)制是分布式系統(tǒng)核心。區(qū)塊鏈共識(shí)機(jī)制的目標(biāo)是促使所有誠(chéng)實(shí)節(jié)點(diǎn)保存一致的區(qū)塊鏈視圖,即同時(shí)滿足一致性和有效性。其中,一致性是指所有誠(chéng)實(shí)節(jié)點(diǎn)保存的區(qū)塊鏈前綴部分完全相同;而有效性是指由某誠(chéng)實(shí)節(jié)點(diǎn)發(fā)布的信息終將被其他所有誠(chéng)實(shí)節(jié)點(diǎn)記錄在自己的區(qū)塊中[14]。
本文提出的基于聯(lián)盟鏈的電子數(shù)據(jù)資產(chǎn)交易平臺(tái)在實(shí)現(xiàn)主要業(yè)務(wù)功能的基礎(chǔ)上,提出了基于智能合約的身份管理隨機(jī)驗(yàn)證模型,采用更適合于聯(lián)盟鏈的POA 共識(shí)機(jī)制,設(shè)計(jì)并實(shí)現(xiàn)基于區(qū)塊鏈監(jiān)聽(tīng)賬戶的周期性同步機(jī)制,設(shè)計(jì)并實(shí)現(xiàn)基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制。
系統(tǒng)架構(gòu)(見(jiàn)圖2)整體分為四層:業(yè)務(wù)層、服務(wù)層、接口層以及數(shù)據(jù)層。

圖2 系統(tǒng)架構(gòu)圖Fig.2 System architecture
業(yè)務(wù)層提供了登錄,注冊(cè),查詢(包括在售數(shù)據(jù)信息,已購(gòu)數(shù)據(jù)信息,訪問(wèn)權(quán)追蹤等),出售數(shù)據(jù),購(gòu)買數(shù)據(jù),轉(zhuǎn)讓數(shù)據(jù),創(chuàng)建賬戶等功能。
服務(wù)層我們使用python 語(yǔ)言,采用了基于Flask框架的后臺(tái)管理服務(wù),充分利用了Flask 擴(kuò)展性強(qiáng)的特性,合理地使用了數(shù)據(jù)庫(kù)插件、登錄插件、表單插件、管理員插件等功能,提高了開(kāi)發(fā)效率。
合約層基于solidity 智能合約編程語(yǔ)言進(jìn)行開(kāi)發(fā),除了基本的交易操作(出售、購(gòu)買、轉(zhuǎn)讓),還必須向外提供驅(qū)動(dòng)鏈上信息進(jìn)行周期性同步的接口,以及基于智能合約的身份認(rèn)證管理功能。
在數(shù)據(jù)層,我們采用了鏈上鏈下數(shù)據(jù)庫(kù)相結(jié)合的存儲(chǔ)方式。這一點(diǎn)的設(shè)計(jì)主要是因?yàn)閰^(qū)塊鏈存儲(chǔ)成本高昂,不適合于存儲(chǔ)大量文本信息,同時(shí)基于K-V 型數(shù)據(jù)庫(kù)的特性使得區(qū)塊鏈擅長(zhǎng)寫操作,但是基于非鍵值的讀取和范圍查詢效率低下。因此,我們只在區(qū)塊鏈上存儲(chǔ)數(shù)據(jù)庫(kù)中文本信息的hash 值以及必要的交易信息,保證其不被篡改,同時(shí)為了方便訪問(wèn)權(quán)過(guò)程的查詢,我們使用基于區(qū)塊鏈監(jiān)聽(tīng)賬戶的周期性同步機(jī)制將信息備份到鏈下MySql 數(shù)據(jù)庫(kù)中,保證數(shù)據(jù)的快速查詢。
2.2.1 簡(jiǎn)介
在本文設(shè)計(jì)的系統(tǒng)平臺(tái)中(系統(tǒng)模式見(jiàn)圖3),電力數(shù)據(jù)本身并沒(méi)有發(fā)生實(shí)質(zhì)性的轉(zhuǎn)移,數(shù)據(jù)依舊保存在國(guó)家電網(wǎng)的系統(tǒng)中,不同的是,我們對(duì)電力數(shù)據(jù)進(jìn)行了訪問(wèn)權(quán)限控制約束,即聯(lián)盟鏈中的節(jié)點(diǎn)可以通過(guò)有償交易的方式從其他節(jié)點(diǎn)獲取電力數(shù)據(jù)的訪問(wèn)權(quán),擁有電力數(shù)據(jù)訪問(wèn)權(quán)限的節(jié)點(diǎn)(比如研究院所,高等學(xué)校,政府機(jī)構(gòu)等)在確認(rèn)權(quán)限合法之后,可以通過(guò)國(guó)家電網(wǎng)的指定接口訪問(wèn)對(duì)應(yīng)的電力數(shù)據(jù),方便后續(xù)研究使用。

圖3 系統(tǒng)模式圖Fig.3 System model
鏈下機(jī)構(gòu)或個(gè)人如果想加入到聯(lián)盟鏈中,需要在系統(tǒng)中提交詳細(xì)的驗(yàn)證信息,只有通過(guò)不低于2/3的節(jié)點(diǎn)驗(yàn)證時(shí),才可以成為鏈上節(jié)點(diǎn),進(jìn)行鏈內(nèi)電力數(shù)據(jù)訪問(wèn)權(quán)的交易。
系統(tǒng)平臺(tái)向用戶提供的主要業(yè)務(wù)包括:注冊(cè)/登陸系統(tǒng)平臺(tái)、創(chuàng)建聯(lián)盟鏈賬戶、電力數(shù)據(jù)交易、查詢電力數(shù)據(jù)訪問(wèn)權(quán)。業(yè)務(wù)流程見(jiàn)圖4。

圖4 業(yè)務(wù)流程圖Fig.4 System model
2.2.2 注冊(cè)
在注冊(cè)過(guò)程中,待注冊(cè)用戶需要提供詳細(xì)的機(jī)構(gòu)信息或者個(gè)人信息,作為后期身份認(rèn)證的重要依據(jù);即使注冊(cè)成功,用戶也無(wú)法進(jìn)行實(shí)際的交易操作,只能進(jìn)行基本的查詢功能,只有在創(chuàng)建鏈上賬戶并成功經(jīng)過(guò)鏈上身份認(rèn)證之后,才擁有售賣、購(gòu)買、轉(zhuǎn)讓電力數(shù)據(jù)訪問(wèn)權(quán)的權(quán)利。
2.2.3 創(chuàng)建鏈上賬戶
用戶在網(wǎng)站注冊(cè)成功之后,僅僅是擁有了進(jìn)入網(wǎng)站的權(quán)限,如果進(jìn)行交易操作,則需要?jiǎng)?chuàng)建鏈上賬戶,創(chuàng)建賬戶的過(guò)程會(huì)觸發(fā)身份認(rèn)證管理功能,即經(jīng)過(guò)驗(yàn)證節(jié)點(diǎn)驗(yàn)證確認(rèn)通過(guò),才可以進(jìn)行相關(guān)的交易操作。
2.2.4 交易(出售、購(gòu)買、轉(zhuǎn)讓)
在用戶成功創(chuàng)建鏈上賬戶并成功經(jīng)過(guò)身份認(rèn)證后,可以直接發(fā)起數(shù)據(jù)出售的請(qǐng)求,賣家可以根據(jù)數(shù)據(jù)訪問(wèn)期限、數(shù)據(jù)范圍來(lái)確定不同的價(jià)格。請(qǐng)求成功后,則等待買家進(jìn)行購(gòu)買;買家一旦購(gòu)買成功,將擁有對(duì)該數(shù)據(jù)附加條件(訪問(wèn)期限,訪問(wèn)范圍)的訪問(wèn)權(quán),并通過(guò)返回的秘鑰從網(wǎng)站專用接口訪問(wèn)賣方數(shù)據(jù)庫(kù),獲取數(shù)據(jù);買家在成功購(gòu)買數(shù)據(jù)之后,可以將數(shù)據(jù)的訪問(wèn)權(quán)轉(zhuǎn)贈(zèng)給其他用戶,一旦轉(zhuǎn)贈(zèng)成功,原買家不再擁有該訪問(wèn)權(quán),無(wú)法訪問(wèn)數(shù)據(jù)。
電力數(shù)據(jù)訪問(wèn)權(quán)交易信息以及屬性信息見(jiàn)表格2 和表格3。

表2 電力數(shù)據(jù)訪問(wèn)權(quán)交易信息Table 2 Transaction of electronic data access authority

表3 電力數(shù)據(jù)訪問(wèn)權(quán)屬性信息Table 3 Attribution of electronic data access authority
2.2.5 查詢
查詢過(guò)程中的關(guān)鍵部分在于數(shù)據(jù)訪問(wèn)權(quán)的追蹤查詢,對(duì)數(shù)據(jù)訪問(wèn)權(quán)的追蹤查詢有利于解決數(shù)據(jù)的濫用問(wèn)題,可以方便的查詢到數(shù)據(jù)訪問(wèn)權(quán)每一次的變更狀態(tài)。
本系統(tǒng)的關(guān)鍵技術(shù)主要涉及到四個(gè)方面:(1)基于智能合約的身份管理隨機(jī)驗(yàn)證模型;(2)適用于聯(lián)盟鏈的POA 共識(shí)機(jī)制;(3)基于區(qū)塊鏈監(jiān)聽(tīng)賬戶的周期性同步機(jī)制;(4)基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制。
2.3.1 基于智能合約的身份管理隨機(jī)驗(yàn)證模型
在聯(lián)盟鏈中,節(jié)點(diǎn)的加入以及交易操作需要獲得身份許可,在這里我們借鑒了潘維等人的基于智能合約的身份管理及認(rèn)證模型[15],在該模型中,基于solidity 智能合約實(shí)現(xiàn)用戶多類型身份數(shù)據(jù)的發(fā)布、驗(yàn)證、認(rèn)證以及撤銷功能,達(dá)到管理用戶身份數(shù)據(jù)進(jìn)行身份認(rèn)證的目的。
在原模型中,用戶在注冊(cè)過(guò)程中會(huì)指定一個(gè)驗(yàn)證者節(jié)點(diǎn),進(jìn)行后續(xù)用戶身份信息的驗(yàn)證,但是指定單一節(jié)點(diǎn),有可能形成聯(lián)合作惡?jiǎn)栴},從而導(dǎo)致待注冊(cè)用戶輕松獲得身份許可,形成系統(tǒng)安全的高風(fēng)險(xiǎn)點(diǎn)。因此平臺(tái)在處理注冊(cè)操作的過(guò)程中,將使用隨機(jī)算法隨機(jī)選擇一組驗(yàn)證節(jié)點(diǎn)進(jìn)行驗(yàn)證,避免待注冊(cè)用戶與單一驗(yàn)證節(jié)點(diǎn)共同作惡現(xiàn)象的出現(xiàn)。驗(yàn)證是否通過(guò)由一組長(zhǎng)度等于驗(yàn)證節(jié)點(diǎn)列表長(zhǎng)度的狀態(tài)位來(lái)決策。

表4 Register 函數(shù)Table 4 Register function
在驗(yàn)證過(guò)程中,如果當(dāng)前驗(yàn)證節(jié)點(diǎn)驗(yàn)證通過(guò),則將其對(duì)應(yīng)的狀態(tài)位置為1,當(dāng)有超過(guò)1/2 的狀態(tài)位為1 的時(shí)候,說(shuō)明該用戶的認(rèn)證信息已驗(yàn)證通過(guò)。具體驗(yàn)證合約函數(shù)見(jiàn)表格5。

表5 Confirm 函數(shù)Table 5 Conf rm function
2.3.2 POA 共識(shí)機(jī)制
共識(shí)機(jī)制是區(qū)塊鏈內(nèi)分布式協(xié)作實(shí)現(xiàn)數(shù)據(jù)一致性的多方協(xié)議,用于協(xié)調(diào)多參與方達(dá)成共同接受的唯一結(jié)果,且保證此過(guò)程難以偽造作假,且可持續(xù)穩(wěn)定運(yùn)行。在區(qū)塊鏈系統(tǒng)中,共識(shí)機(jī)制旨在解決節(jié)點(diǎn)之間的信任問(wèn)題。在該系統(tǒng)中,基于以太坊平臺(tái),選擇了更適合于聯(lián)盟鏈的POA 共識(shí)機(jī)制。
POA 全稱Proof-of-Authority,由以太坊聯(lián)合創(chuàng)始人Gavin Wood 提出。在基于POA 的網(wǎng)絡(luò)中,交易和區(qū)塊由認(rèn)可的帳戶(稱為驗(yàn)證者“singer”)驗(yàn)證。驗(yàn)證程序運(yùn)行軟件,使他們可以將交易分批進(jìn)行。該過(guò)程是自動(dòng)化的,不需要驗(yàn)證者不斷監(jiān)視他們的計(jì)算機(jī)。相對(duì)于耗用大量電力進(jìn)行計(jì)算的POW 共識(shí)機(jī)制而言,POA 節(jié)省了大量的電力成本,占用更少的內(nèi)存資源,實(shí)現(xiàn)更高的性能。
在POA 共識(shí)機(jī)制中,個(gè)人可以獲得成為驗(yàn)證者的權(quán)利,因此會(huì)努力保持他們所獲得的共識(shí)參與權(quán)。同時(shí)在交易的過(guò)程中,會(huì)在身份上附加聲譽(yù),這種機(jī)制激勵(lì)驗(yàn)證者保持積極正當(dāng)?shù)慕灰祝幌M档妥约旱男抛u(yù)值。這被認(rèn)為是比POS(Proof-of-Stake權(quán)益證明)更強(qiáng)大的地方[16]。
2.3.3 基于區(qū)塊鏈監(jiān)聽(tīng)賬戶的周期性同步機(jī)制
區(qū)塊鏈?zhǔn)且环N分布式數(shù)據(jù)庫(kù),以太坊區(qū)塊鏈的數(shù)據(jù)庫(kù)是以K-V 型的LevelDB 為基礎(chǔ),如前所述,LevelDB 具有很高的隨機(jī)寫性能,但隨機(jī)讀性能一般,因此適用于查詢較少,而寫很多的場(chǎng)景,因此本文使用監(jiān)聽(tīng)賬戶將交易信息周期性備份到關(guān)系型數(shù)據(jù)庫(kù)(MySQL)中方便查詢。
(1)監(jiān)聽(tīng)賬戶
監(jiān)聽(tīng)賬戶是安排在區(qū)塊鏈上的一種特殊賬戶,其只能讀取需要備份的信息,而沒(méi)有寫入或者讀取其他信息的權(quán)限。
監(jiān)聽(tīng)賬戶的設(shè)置由智能合約完成,且只能由“創(chuàng)世”賬戶進(jìn)行創(chuàng)建。
當(dāng)備份機(jī)制進(jìn)行工作的時(shí)候,會(huì)首先通過(guò)合約接口向區(qū)塊鏈獲取監(jiān)聽(tīng)賬戶的地址,如果返回的地址為:0x0,則說(shuō)明不存在監(jiān)聽(tīng)賬戶。此時(shí),備份機(jī)制會(huì)跳轉(zhuǎn)到創(chuàng)建監(jiān)聽(tīng)賬戶的函數(shù)create_listen_account(),并通過(guò)personal.newAccount()函數(shù)創(chuàng)建新的監(jiān)聽(tīng)賬戶。
(2)信息同步
同步信息主要包括鏈上交易狀態(tài),具體信息見(jiàn)表格6。

表6 同步信息Table 6 Synchronize information
鏈上智能合約通過(guò)附加訪問(wèn)地址限制的同步接口sync()向外輸出待同步信息。
鏈下使用python 通過(guò)web3 接口獲取待同步信息,并同步更新至鏈下數(shù)據(jù)庫(kù)。
使用Linux 系統(tǒng)服務(wù)器命令crontab 周期執(zhí)行同步任務(wù)。
2.3.4 基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制
(1)介紹
從技術(shù)角度上來(lái)說(shuō),目前的數(shù)據(jù)溯源應(yīng)用或者數(shù)據(jù)追蹤應(yīng)用的數(shù)據(jù)存儲(chǔ)在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)如MySQL,SQLServer 中,這類中心化數(shù)據(jù)庫(kù)存在著多種由于單點(diǎn)依賴造成的數(shù)據(jù)安全問(wèn)題,如數(shù)據(jù)被污染,黑客攻擊等[17]。
而完全基于區(qū)塊鏈實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)并進(jìn)行信息追蹤的方案的執(zhí)行效率十分低下,前文介紹過(guò)區(qū)塊鏈本身基于K-V 型數(shù)據(jù)庫(kù),在數(shù)據(jù)的查詢搜索效率上,遠(yuǎn)不及傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)。
因此,我們借助前文提到的基于區(qū)塊鏈監(jiān)聽(tīng)賬戶的周期性同步機(jī)制,將鏈上的追蹤信息周期性的同步到鏈下關(guān)系型數(shù)據(jù)庫(kù)中。當(dāng)用戶在客戶端發(fā)起訪問(wèn)權(quán)追蹤請(qǐng)求時(shí),可以通過(guò)關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn)更快的查詢響應(yīng)速度。同時(shí)在不損失查詢效率的基礎(chǔ)之上,也通過(guò)區(qū)塊鏈的不可篡改性保證了數(shù)據(jù)的安全性。
(2)數(shù)據(jù)結(jié)構(gòu)
在數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制中,設(shè)計(jì)鏈上追蹤信息數(shù)據(jù)結(jié)構(gòu)見(jiàn)表格7,并將其同步到鏈下關(guān)系型數(shù)據(jù)庫(kù)中。

表7 數(shù)據(jù)結(jié)構(gòu)Table 7 Data structure
(3)追蹤機(jī)制
每一個(gè)訪問(wèn)追蹤機(jī)制函數(shù)的請(qǐng)求者,必須是數(shù)據(jù)的發(fā)布方,只有通過(guò)數(shù)據(jù)發(fā)布者地址驗(yàn)證才可以一步步進(jìn)行數(shù)據(jù)的追蹤。
因?yàn)橛行?shù)據(jù)hash 以及機(jī)構(gòu)地址分別都有著明顯的大小序關(guān)系,所以我們可以根據(jù)有效數(shù)據(jù)hash及來(lái)源機(jī)構(gòu)地址來(lái)維護(hù)一個(gè)B+樹結(jié)構(gòu)。
B+ 樹是一種樹型數(shù)據(jù)結(jié)構(gòu),通常用于數(shù)據(jù)庫(kù)和操作系統(tǒng)的文件系統(tǒng)索引方案中。B+ 樹的特點(diǎn)是能夠保持?jǐn)?shù)據(jù)穩(wěn)定有序,其插入與修改擁有較穩(wěn)定的對(duì)數(shù)時(shí)間復(fù)雜度。而未使用B+樹進(jìn)行維護(hù)的數(shù)據(jù),雖然插入數(shù)據(jù)的時(shí)間復(fù)雜度為O(1),但是查找的時(shí)間復(fù)雜度為O(N),所以整個(gè)平均下來(lái),使用了二維B+樹進(jìn)行維護(hù)的數(shù)據(jù)結(jié)構(gòu)在查詢以及插入操作上會(huì)花費(fèi)更少的時(shí)間[18]。
在MySql 數(shù)據(jù)庫(kù)中,我們可以對(duì)字段設(shè)置索引,從而使用B+樹結(jié)構(gòu)進(jìn)行數(shù)據(jù)的插入與查詢。
創(chuàng)建索引的命令如下:
CREATE INDEX track_index ON trackInfo(validHash(255), source(255));
數(shù)據(jù)訪問(wèn)權(quán)追蹤函數(shù)見(jiàn)表格8:

表8 TrackOwner 函數(shù)Table 8 TrackOwner function
本系統(tǒng)部署在安裝了Linux 操作系統(tǒng)的虛擬機(jī)上,測(cè)試過(guò)程具體配置見(jiàn)表格9。

表9 測(cè)試環(huán)境Table 9 Test environment
在上述實(shí)驗(yàn)測(cè)試環(huán)境下,我們對(duì)系統(tǒng)主要模塊進(jìn)行了黑盒測(cè)試,對(duì)于電力數(shù)據(jù),我們采用本地?cái)?shù)據(jù)文件進(jìn)行模擬,測(cè)試結(jié)果見(jiàn)表格10。

表10 測(cè)試結(jié)果Table 10 Test result
3.3.1 基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制性能測(cè)試
本文主要針對(duì)基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制,在僅使用鏈上數(shù)據(jù)庫(kù),使用鏈下MySql 數(shù)據(jù)庫(kù)添加索引,使用鏈下MySql 數(shù)據(jù)庫(kù)不添加索引三種情況下的查詢效率做了對(duì)比測(cè)試分析。
對(duì)于插入操作,當(dāng)分別插入1000,2000,3000,4000,5000 條數(shù)據(jù)的時(shí)候,對(duì)應(yīng)的測(cè)試結(jié)果見(jiàn)表格11。

表11 插入測(cè)試Table 11 Insert test
對(duì)于查詢操作,我們?cè)诿拷M測(cè)試數(shù)據(jù)中分別隨機(jī)選擇了500 條數(shù)據(jù)進(jìn)行查詢,測(cè)試結(jié)果見(jiàn)表格12。

表12 查詢測(cè)試Table 12 Query test
通過(guò)測(cè)試數(shù)據(jù),可以發(fā)現(xiàn),無(wú)論是插入操作還是查詢操作,區(qū)塊鏈的執(zhí)行時(shí)間遠(yuǎn)高于MySql;對(duì)MySql 的插入操作而言,MySql 是否添加索引對(duì)插入操作執(zhí)行時(shí)間幾乎沒(méi)有影響,可以滿足電力數(shù)據(jù)的交易通量需求;就MySql 的查詢操作而言,隨著測(cè)試數(shù)據(jù)量的增加,無(wú)索引情況下的查詢時(shí)間成線性遞增,而有索引情況下的查詢時(shí)間幾乎保持常數(shù)。綜上,基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制的綜合功能效益和性能效益明顯。
3.3.2 聯(lián)盟鏈與公有鏈交易性能測(cè)試
本文中提到的聯(lián)盟鏈基于以太坊進(jìn)行設(shè)計(jì),使用了POA 共識(shí)機(jī)制,該機(jī)制不像POW 共識(shí)機(jī)制那樣需要使用大量的算力來(lái)實(shí)現(xiàn)共識(shí),從而大大節(jié)約了電力資源。
同時(shí)POW 的計(jì)算過(guò)程有一定的難度約束,因此在理論上,使用了POW 的區(qū)塊鏈其共識(shí)過(guò)程以及出塊時(shí)間相對(duì)使用POA 的區(qū)塊鏈要慢,為了驗(yàn)證這一理論,我們?cè)?.1 節(jié)的測(cè)試環(huán)境中對(duì)基于POA 的以太坊聯(lián)盟鏈和基于POW 的以太坊公有鏈進(jìn)行了比較測(cè)試。
在測(cè)試過(guò)程中針對(duì)基于POA 的以太坊聯(lián)盟鏈,本文設(shè)計(jì)了五個(gè)節(jié)點(diǎn),三個(gè)節(jié)點(diǎn)為驗(yàn)證節(jié)點(diǎn);針對(duì)基于POW 的以太坊公有鏈,本文設(shè)計(jì)了五個(gè)節(jié)點(diǎn),挖礦初始困難度設(shè)置為默認(rèn)困難度0x80000。
測(cè)試任務(wù)是針對(duì)兩種區(qū)塊鏈,分別計(jì)算其執(zhí)行100,200,300……1900,2000 筆交易時(shí)所花費(fèi)的時(shí)間(單位:秒)。測(cè)試結(jié)果如圖5所示,在該圖中,可以看出,隨著交易數(shù)的提高,基于POA 的以太坊聯(lián)盟鏈所花費(fèi)的時(shí)間增長(zhǎng)速率相對(duì)穩(wěn)定,而基于POW的以太坊公有鏈增長(zhǎng)速率波動(dòng)較大不穩(wěn)定,而且兩者相比較可以發(fā)現(xiàn),在耗費(fèi)的時(shí)間上,基于POW 的以太坊公有鏈整體要比基于POA 的以太坊聯(lián)盟鏈高,因此該實(shí)驗(yàn)結(jié)果對(duì)本文提出的基于聯(lián)盟鏈的電力數(shù)據(jù)資產(chǎn)交易平臺(tái)提供了有效的支撐。

圖5 系統(tǒng)模式圖Fig.5 System model
本文設(shè)計(jì)并實(shí)現(xiàn)了基于聯(lián)盟鏈的電力數(shù)據(jù)資產(chǎn)交易平臺(tái),允許不同的機(jī)構(gòu)的不同部門在身份認(rèn)證之后可以加入到該鏈中有償共享數(shù)據(jù),在應(yīng)用層面上,一定程度解決了電力部門的數(shù)據(jù)孤島問(wèn)題。
在完成基本功能的前提下,提出了基于智能合約的身份管理隨機(jī)驗(yàn)證模型;對(duì)比多種共識(shí)方案的優(yōu)缺點(diǎn),選擇了適合于聯(lián)盟鏈的POA 共識(shí)機(jī)制;設(shè)計(jì)并實(shí)現(xiàn)了基于區(qū)塊鏈監(jiān)聽(tīng)賬戶的周期性同步機(jī)制;設(shè)計(jì)并實(shí)現(xiàn)了基于B+樹的數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制。
我們基于以太坊,在Linux 平臺(tái)上對(duì)系統(tǒng)進(jìn)行了功能測(cè)試、數(shù)據(jù)訪問(wèn)權(quán)追蹤機(jī)制的性能測(cè)試以及聯(lián)盟鏈與公有鏈交易性能測(cè)試實(shí)驗(yàn),實(shí)驗(yàn)表明系統(tǒng)功能完備且運(yùn)行平穩(wěn),同時(shí)性能測(cè)試表明訪問(wèn)權(quán)追蹤查詢的綜合效率提升明顯,基于聯(lián)盟鏈的電力數(shù)據(jù)資產(chǎn)交易平臺(tái)有著更高的性能。
利益沖突聲明
所有作者聲明不存在利益沖突關(guān)系。
數(shù)據(jù)與計(jì)算發(fā)展前沿2021年1期