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

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

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

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

圖3 系統(tǒng)模式圖Fig.3 System model

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

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

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

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

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

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

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

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

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

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

表11 插入測試Table 11 Insert test
對于查詢操作,我們在每組測試數(shù)據(jù)中分別隨機選擇了500 條數(shù)據(jù)進(jìn)行查詢,測試結(jié)果見表格12。

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

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