李素,陳澤,宋寶燕,張浩林
(遼寧大學(xué) 信息學(xué)院,遼寧 沈陽 110036)
營商環(huán)境包括市場(chǎng)主體在準(zhǔn)入、生產(chǎn)經(jīng)營和退出等過程中涉及的政務(wù)環(huán)境、市場(chǎng)環(huán)境和法治環(huán)境等有關(guān)外部因素和條件的總和[1-3].良好的營商環(huán)境對(duì)于現(xiàn)代化經(jīng)濟(jì)高質(zhì)量發(fā)展具有重要意義[4].由于營商環(huán)境包含的信息源種類復(fù)雜,政務(wù)、市場(chǎng)、法治及企業(yè)經(jīng)營等數(shù)據(jù)存在信息孤立、跨域訪問效率低、中心化存儲(chǔ)易被篡改、可信度差等問題[5-8].營商環(huán)境評(píng)估也對(duì)企業(yè)級(jí)復(fù)合區(qū)塊鏈構(gòu)建帶來數(shù)據(jù)保護(hù)、技術(shù)標(biāo)準(zhǔn)和互操作性、風(fēng)險(xiǎn)管理與安全、資源與成本等挑戰(zhàn).如何高效存儲(chǔ)企業(yè)營商環(huán)境信息,提高信息的可信度和安全性,有效支持營商環(huán)境的評(píng)估,是領(lǐng)域研究的熱點(diǎn)和難點(diǎn)[9].
針對(duì)上述問題,本文引入?yún)^(qū)塊鏈技術(shù)實(shí)現(xiàn)多源異構(gòu)的企業(yè)營商環(huán)境數(shù)據(jù)高效存儲(chǔ)[10-12],在滿足政務(wù)、市場(chǎng)、法治及企業(yè)經(jīng)營等數(shù)據(jù)去中心化可靠存儲(chǔ)需求的同時(shí),提高數(shù)據(jù)的安全性和可信性[13-15].本文的主要貢獻(xiàn)如下.
(1)為了防止?fàn)I商環(huán)境評(píng)估時(shí)企業(yè)原始數(shù)據(jù)被篡改,引入改進(jìn)的哈希函數(shù)SHA256 算法對(duì)企業(yè)原始數(shù)據(jù)進(jìn)行加密.通過在數(shù)據(jù)塊哈希運(yùn)算中增加運(yùn)算次數(shù),增大SHA256 算法邏輯和壓縮函數(shù)復(fù)雜度,進(jìn)一步提高運(yùn)算的抗碰撞性及Hash 結(jié)果的雪崩效應(yīng),從而提高數(shù)據(jù)安全性.
(2)為了降低區(qū)塊鏈系統(tǒng)的通信和存儲(chǔ)壓力,提出鏈上和鏈下相結(jié)合的存儲(chǔ)模式.引入改進(jìn)的基于非易失性內(nèi)存(non-volatile memory,NVM)的Key-Value 型數(shù)據(jù)庫Level DB,實(shí)現(xiàn)在鏈下存儲(chǔ)企業(yè)原始數(shù)據(jù).Key 值為經(jīng)過改進(jìn)后的SHA256 算法加密的Hash 值,Value 值為企業(yè)原始數(shù)據(jù).
(3)針對(duì)傳統(tǒng)區(qū)塊鏈存在交易確認(rèn)速度慢、吞吐量小的問題,提出企業(yè)級(jí)復(fù)合區(qū)塊鏈的構(gòu)建方法.公有鏈采用基于有向無環(huán)圖(directed acyclic graph,DAG)的Conflux 存儲(chǔ)鏈下Level DB 中企業(yè)原始數(shù)據(jù)對(duì)應(yīng)的Key 值,聯(lián)盟鏈存儲(chǔ)企業(yè)狀態(tài)數(shù)據(jù),確保企業(yè)原始數(shù)據(jù)去中心化存儲(chǔ),不可篡改和可追溯.
目前,國內(nèi)外許多專家學(xué)者對(duì)區(qū)塊鏈鏈上鏈下的存儲(chǔ)優(yōu)化方法進(jìn)行研究,取得了一定的研究成果.
在Level DB 優(yōu)化方面,Lu 等[16]針對(duì)Level DB寫放大提出WiscKey 方法,該方法將鍵從值中分離出來,同時(shí)只在Compaction 時(shí)合并鍵,利用該方法可以大大降低寫放大,但它使得垃圾回收和范圍查詢復(fù)雜化.Lepers 等[17]提出的Kvell 模型采取每一項(xiàng)鍵值在磁盤上亂序的方式,可以減輕基于NVMe SSD 鍵值存儲(chǔ)的寫停頓,但不適用于通用的SSD 系統(tǒng).Kaiyrakhmet 等[18]提出SLM-DB 存儲(chǔ)結(jié)構(gòu),該結(jié)構(gòu)采用單級(jí)的 LSM-tree,適用于具有NVM-SSD 存儲(chǔ)的系統(tǒng),通過NVM 上的B+樹來索引SSD 上面的單層LSM-tree,以實(shí)現(xiàn)快速讀,但該方式引入了維護(hù)B+樹和LSM-tree 一致性的額外開銷.Kannan 等[19]提出的NoveLSM 在NVM上采用持久化可變內(nèi)存表,可以在某種程度上減少訪問時(shí)延,但造成了更嚴(yán)重的寫入停頓.
在結(jié)構(gòu)鏈優(yōu)化方面,Lewenberg 等[20]提出構(gòu)建Inclusive 區(qū)塊鏈,Inclusive 將Nakamoto 共識(shí)和GHOST 規(guī)則擴(kuò)展到DAG,設(shè)計(jì)了框架,以包括鏈外交易.Leonov 等[21]提出PHANTOM 平臺(tái),參與節(jié)點(diǎn)為本地區(qū)塊DAG 找到近似的k-cluster 解決方案,以修剪潛在的惡意區(qū)塊.對(duì)剩余區(qū)塊進(jìn)行拓?fù)渑判?,獲得最終的區(qū)塊總順序.當(dāng)區(qū)塊生成率很高時(shí),Inclusive 和PHANTOM 都很容易受到有效性攻擊.Eyal 等[22]提出構(gòu)建Bitcoin-NG區(qū)塊鏈,Bitcoin-NG 通過定期選舉一個(gè)Leader,并允許該Leader 在一段時(shí)間內(nèi)指定交易全序的方式提高吞吐量,但沒有減少交易的確認(rèn)時(shí)間.Derek等[23]提出Vault 區(qū)塊鏈,Vault 選擇分片技術(shù)對(duì)區(qū)塊鏈進(jìn)行構(gòu)建,以便降低存儲(chǔ)成本,權(quán)衡網(wǎng)絡(luò)帶寬成本的增加.雖然所有分片的綜合吞吐量很大,但分片間交易的吞吐量有限.
綜上所述,現(xiàn)有方法存在讀寫性能差、存儲(chǔ)效率低、交易確認(rèn)速度慢和吞吐量小等問題.本文綜合考慮Level DB 優(yōu)化和區(qū)塊鏈存儲(chǔ)效率問題,提出營商環(huán)境評(píng)估的企業(yè)級(jí)復(fù)合區(qū)塊鏈構(gòu)建方法.
企業(yè)級(jí)復(fù)合區(qū)塊鏈總體架構(gòu)由Level DB、公有鏈和聯(lián)盟鏈組成,以實(shí)現(xiàn)鏈上鏈下數(shù)據(jù)協(xié)同.鏈上通過鏈下實(shí)現(xiàn)計(jì)算和存儲(chǔ)能力的擴(kuò)展,鏈下與鏈上對(duì)接實(shí)現(xiàn)異構(gòu)信息的共享.如圖1 所示,在企業(yè)級(jí)復(fù)合區(qū)塊鏈架構(gòu)中,Level DB 數(shù)據(jù)庫存儲(chǔ)企業(yè)原始數(shù)據(jù)信息,Value 為原始數(shù)據(jù),Key 為通過改進(jìn)的哈希函數(shù)SHA256 算法加密后的Hash值.負(fù)責(zé)交易的公有鏈存儲(chǔ)Level DB 數(shù)據(jù)庫中企業(yè)原始數(shù)據(jù)對(duì)應(yīng)的Key 值,負(fù)責(zé)狀態(tài)的聯(lián)盟鏈存儲(chǔ)企業(yè)的狀態(tài)數(shù)據(jù).
圖1 企業(yè)級(jí)復(fù)合區(qū)塊鏈的架構(gòu)圖Fig.1 Architecture diagram of enterprise composite blockchain
為了進(jìn)一步提高數(shù)據(jù)的安全性,在將原始數(shù)據(jù)存入鏈下Level DB 前,采用改進(jìn)的哈希函數(shù)SHA256 算法對(duì)企業(yè)原始數(shù)據(jù)進(jìn)行加密.SHA256 算法采用6 個(gè)邏輯函數(shù)和1 組常數(shù) Kt,輸入為512 bit 的消息塊 xi,將 xi分為16 組32 bit 的字 M0,M1,···,M15,輸出為256 bit 的報(bào)文摘要[24].SHA256 算法的過程如下.
1)初始化.
2)準(zhǔn)備消息列表 Wt:
邏輯函數(shù)的計(jì)算方式為
式中:ROTR(x)為循環(huán)右移函數(shù),POTR(x)為循環(huán)左移函數(shù).
4)當(dāng) 0 ≤t ≤63時(shí),執(zhí)行壓縮函數(shù)Ch:
邏輯函數(shù)的計(jì)算方式為
5)計(jì)算每個(gè)分組的中間散列值:
式中:i為消息的第 i個(gè)分組,所有分組處理完畢后,輸出256 bit 的Hash 值.在對(duì)SHA256 算法進(jìn)行改進(jìn)時(shí),在每個(gè)512 bit 的數(shù)據(jù)塊哈希運(yùn)算中增加16 次運(yùn)算,保證消息的每個(gè)bit 可以影響到更多的bit 位,進(jìn)一步改善算法的非線性擴(kuò)散性.加大SHA256 算法邏輯和壓縮函數(shù)的復(fù)雜度,以加速消息的差分?jǐn)U散程度,使得遞推過程具有更強(qiáng)的隨機(jī)性,消除局部碰撞的依從條件.改進(jìn)后SHA256 算法過程如下.
1)對(duì)消息塊 M(i),i=1,2,···,N,進(jìn)行如下循環(huán).
a)準(zhǔn)備消息列表 Wt:
b)工作變量初始化:
2)當(dāng) 0 ≤t ≤79時(shí),執(zhí)行如下壓縮函數(shù):
式中:T1、T2為中間變量.壓縮函數(shù)采用80 個(gè)32 bit 的字 Kt{256}(0 ≤t ≤79)常數(shù)序列,前64 個(gè)32 bit 的字見文獻(xiàn)[25],后16 個(gè)32 bit 的字定義如下:
改進(jìn)后的SHA256 算法使用的6 個(gè)邏輯函數(shù)基于32 bit 的字(如 x、y、z)進(jìn)行操作,每個(gè)邏輯函數(shù)的操作結(jié)果是新的32 bit 的字,具體定義如下:
式中:SHR(x)為邏輯右移函數(shù),每一組的循環(huán)操作如圖2 所示.
圖2 改進(jìn)后的SHA256 算法操作Fig.2 Improved SHA256 algorithm operation
采用改進(jìn)后的哈希函數(shù)SHA256 算法,對(duì)企業(yè)原始數(shù)據(jù)加密生成相應(yīng)的Hash 值,作為鏈下Level DB 數(shù)據(jù)庫中的Key 值,開展后續(xù)的存儲(chǔ)操作.
將企業(yè)原始數(shù)據(jù)加密后的Hash值作為Key 值,原始數(shù)據(jù)作為Value 值,對(duì)應(yīng)存入鏈下Level DB 中.Level DB 是基于LSM-tree(log-structured merge tree)架構(gòu)的Key-Value 非關(guān)系型數(shù)據(jù)庫存儲(chǔ)系統(tǒng),它寫入快,占用空間少,但LSMtree 架構(gòu)有寫停頓、寫放大和不利于讀的缺點(diǎn).在LSM-tree 架構(gòu)的基礎(chǔ)上,提出基于NVM 的LSMtree 存儲(chǔ)模型.利用該模型,可以提高訪問速度、持久性、并發(fā)性和擴(kuò)展性,同時(shí)具有更好的集成性.鏈下Level DB 存儲(chǔ)模型架構(gòu)如圖3 所示.
圖3 鏈下LevelDB 存儲(chǔ)模型架構(gòu)Fig.3 Off-chain LevelDB storage model architecture
如圖3 所示,將原有LSM-tree 架構(gòu)中的 L0層放在NVM 上,L1~Ln層存儲(chǔ)在固態(tài)硬盤(solid state disk,SSD)上,解決數(shù)據(jù)合并時(shí)的寫時(shí)延問題.對(duì)L0層的文件引入學(xué)習(xí)索引,使得 L0層文件之間有序,在降低讀時(shí)延的同時(shí)提高 L0層文件中數(shù)據(jù)的查找速度.在NVM 層上使用學(xué)習(xí)索引,利用學(xué)得的模型對(duì)數(shù)據(jù)的位置進(jìn)行預(yù)測(cè),以便加快數(shù)據(jù)在NVM 上的查找速度.通過學(xué)習(xí)索引,可以找到 L0層中某一個(gè)key 的位置.每個(gè)NVMTable 需要單獨(dú)學(xué)習(xí)一個(gè)索引模型.建立key 到數(shù)據(jù)位置的近似映射.從近似映射的位置開始,和目標(biāo) key 進(jìn)行大小比較,通過向前或向后線性搜索,確定正確的位置.如圖4 所示,選擇分段集合模型索引(piecewise geometric model index,PGM-index)進(jìn)行位置定位.
圖4 PGM 索引示例圖Fig.4 Example diagram of PGM index
在PGM 索引第1 層,將數(shù)據(jù)分成3 個(gè)分區(qū),每個(gè)分區(qū)由簡單的線性模型 (f1,f2,f3)表示.通過構(gòu)建這些線性模型,每個(gè)線性模型能夠利用預(yù)先設(shè)定的誤差,在各自的分區(qū)內(nèi)進(jìn)行相應(yīng)的key 值預(yù)測(cè).將第1 層的劃分邊界當(dāng)作其自身的排序數(shù)據(jù)集,計(jì)算另一個(gè)誤差有界的分段線性回歸.如此反復(fù),直至頂層的 PGM 變得足夠小,以加快數(shù)據(jù)查找速度.
為了提高區(qū)塊鏈的性能,從有向無環(huán)圖(DAG)的特殊結(jié)構(gòu)出發(fā),采用基于主干鏈的DAG 共識(shí)協(xié)議Conflux 共識(shí),構(gòu)建企業(yè)級(jí)復(fù)合區(qū)塊鏈中的Conflux 公有鏈.Conflux 公有鏈的架構(gòu)如圖5 所示.
圖5 Conflux 公有鏈架構(gòu)圖Fig.5 Architecture diagram of Conflux public blockchain
Conflux 中的交易由2.2 節(jié)鏈下Level DB 中企業(yè)原始數(shù)據(jù)對(duì)應(yīng)的Key 值組成.Conflux 從預(yù)定義的創(chuàng)世區(qū)塊開始,確定區(qū)塊鏈的初始狀態(tài),所有區(qū)塊和邊構(gòu)成一個(gè)DAG 結(jié)構(gòu).Conflux 中的所有參與節(jié)點(diǎn)通過Gossip 網(wǎng)絡(luò)連接,每當(dāng)一個(gè)節(jié)點(diǎn)發(fā)起一項(xiàng)交易或生成一個(gè)新區(qū)塊,它將通過 Gossip 網(wǎng)絡(luò)將交易廣播給所有其他節(jié)點(diǎn).Conflux 底層區(qū)塊的數(shù)據(jù)結(jié)構(gòu)如圖6 所示,采用樹圖的形式,通過并行處理方式加大出塊速度,且不會(huì)因?yàn)殒湻植鎲栴}降低安全性,使得每個(gè)企業(yè)都可以并行地上傳交易,即企業(yè)原始數(shù)據(jù)對(duì)應(yīng)的Hash 值,使得整個(gè)系統(tǒng)可以更高效地處理區(qū)塊和交易.
在Conflux 公有鏈中,提出基于主干鏈的DAG 共識(shí)協(xié)議進(jìn)行共識(shí)操作.該共識(shí)可以處理并發(fā)區(qū)塊,不會(huì)丟棄任何并發(fā)區(qū)塊作為分叉.除創(chuàng)世區(qū)塊外,每個(gè)區(qū)塊都有一條出度的父邊(見圖6的實(shí)線箭頭),表示區(qū)塊之間的投票關(guān)系.每個(gè)區(qū)塊可以有多條出度的引用邊(見圖6 的虛線箭頭),表示區(qū)塊的生成順序.DAG 中的所有父邊一起形成一棵父樹,其中創(chuàng)世區(qū)塊是根.在父樹中,Conflux 選擇一條從創(chuàng)世區(qū)塊到其中一個(gè)葉區(qū)塊的鏈作為主鏈.Conflux 采用Ghost 協(xié)議選取主鏈,從創(chuàng)世區(qū)塊開始,計(jì)算每個(gè)節(jié)點(diǎn)的子樹大小,擁有最大子樹的節(jié)點(diǎn)成為主鏈上的一個(gè)節(jié)點(diǎn).
每當(dāng)一個(gè)節(jié)點(diǎn)生成一個(gè)新的區(qū)塊時(shí),它首先計(jì)算其本地DAG 狀態(tài)下的主鏈,并將主鏈中的最后一個(gè)區(qū)塊設(shè)置為新區(qū)塊的父塊.在DAG 中查找沒有入度邊的所有端區(qū)塊,創(chuàng)建從新區(qū)塊到每個(gè)端區(qū)塊的引用邊.給定一個(gè)從創(chuàng)世區(qū)塊開始、只包含父邊的主鏈,排序算法利用主鏈將DAG 中的所有區(qū)塊劃分為epoch,主鏈上的每個(gè)區(qū)塊都對(duì)應(yīng)一個(gè)epoch.當(dāng)進(jìn)行共識(shí)確定區(qū)塊總序時(shí),Conflux對(duì)epoch 進(jìn)行排序,根據(jù)epoch 的拓?fù)漤樞驅(qū)γ總€(gè)epoch 中的區(qū)塊進(jìn)行排序.當(dāng)確定交易順序時(shí),交易的順序由包含這筆交易的區(qū)塊總序確定先后順序.
按照上述過程,對(duì)企業(yè)上傳的原始數(shù)據(jù)對(duì)應(yīng)的Key 值進(jìn)行數(shù)據(jù)上鏈操作.
由于企業(yè)眾多,為了進(jìn)一步降低網(wǎng)絡(luò)資源消耗,選取一定比例通過驗(yàn)證的企業(yè)節(jié)點(diǎn)構(gòu)建聯(lián)盟鏈,通過這些預(yù)選節(jié)點(diǎn)實(shí)現(xiàn)共識(shí)算法、公開驗(yàn)證、安全存儲(chǔ).采用聯(lián)盟鏈Hyperledger Fabric 部署聯(lián)盟鏈.聯(lián)盟鏈主要負(fù)責(zé)企業(yè)狀態(tài)數(shù)據(jù)存儲(chǔ),存儲(chǔ)過程中所使用的符號(hào)及其含義如表1 所示.在滿足合約執(zhí)行觸發(fā)條件后,智能合約會(huì)自動(dòng)地訪問、共享和存儲(chǔ)數(shù)據(jù),根據(jù)預(yù)先定義的約束執(zhí)行數(shù)據(jù)存儲(chǔ)操作.
表1 聯(lián)盟鏈狀態(tài)數(shù)據(jù)存儲(chǔ)過程使用的符號(hào)及其含義Tab.1 Symbols used by consortium chain state data storage procedure and their meanings
企業(yè)狀態(tài)數(shù)據(jù)存儲(chǔ)的主要流程如下.
1)系統(tǒng)初始化.每個(gè)企業(yè)節(jié)點(diǎn)須通過監(jiān)管機(jī)構(gòu)節(jié)點(diǎn)身份認(rèn)證,認(rèn)證通過后成為合法的聯(lián)盟鏈網(wǎng)絡(luò)節(jié)點(diǎn).獲取分別表示用于加密數(shù)據(jù)的公私密鑰對(duì)及其證書.執(zhí)行系統(tǒng)初始化,企業(yè)節(jié)點(diǎn)從鄰近企業(yè)總部節(jié)點(diǎn)的記錄池中下載當(dāng)前聯(lián)盟鏈的區(qū)塊數(shù)據(jù)存儲(chǔ)位置索引表.2)狀態(tài)數(shù)據(jù)上傳.企業(yè)節(jié)點(diǎn) Ni向本地的企業(yè)總部節(jié)點(diǎn) BSj發(fā)送上傳請(qǐng)求,請(qǐng)求包括 Ni當(dāng)前使用的和數(shù)字簽名 Sig_1,以確保數(shù)據(jù)來源的可靠性和真實(shí)性.BSj接收并驗(yàn)證Ni的請(qǐng)求和身份信息,以確認(rèn)其合法性并作出回應(yīng).Ni使用當(dāng)前公私密鑰對(duì)中的公鑰對(duì)狀態(tài)數(shù)據(jù) Data進(jìn)行加密,并將該狀態(tài)數(shù)據(jù)連同它的數(shù)字簽名一起發(fā)送給 BSj,通過它的公鑰 PKBSj對(duì) Ni發(fā)送過來的記錄數(shù)據(jù)進(jìn)行加密,得到最終的上傳數(shù)據(jù) Record.上述過程的形式化語言描述如下:
3)收集上傳數(shù)據(jù).本地企業(yè)總部節(jié)點(diǎn) BSj對(duì)上傳的 Record進(jìn)行驗(yàn)證.若數(shù)據(jù)安全有效,則將Record存入本地記錄池;反之則忽略.
4)本地企業(yè)總部節(jié)點(diǎn)工作量證明.
每經(jīng)過一個(gè)周期,BSj將 T內(nèi)收集到的所有有效數(shù)據(jù)合并為一個(gè)數(shù)據(jù)集合 Data_set(Data_set={Records||Timestamp}),并對(duì)其進(jìn)行數(shù)據(jù)簽名,以確保 Data_set來源的合法性和可驗(yàn)證性.先找到有效工作量證明的 BSj,可以獲得記錄本次數(shù)據(jù)區(qū)塊的權(quán)利,并獲得相應(yīng)獎(jiǎng)勵(lì).獲得記賬權(quán)的 BSj須將當(dāng)前的 Data_set和計(jì)算出來的 x廣播給其他企業(yè)總部節(jié)點(diǎn),用于驗(yàn)證和檢驗(yàn).若其他企業(yè)總部節(jié)點(diǎn)驗(yàn)證通過,則該 BSj將 Data_set合并為新的數(shù)據(jù)區(qū)塊,并存儲(chǔ)在聯(lián)盟鏈中,得到相應(yīng)的系統(tǒng)獎(jiǎng)勵(lì).
5)企業(yè)總部節(jié)點(diǎn)間的區(qū)塊共識(shí).
在最短時(shí)間內(nèi)計(jì)算出有效工作量證明的企業(yè)總部節(jié)點(diǎn) BSj成為當(dāng)前共識(shí)過程中的主節(jié)點(diǎn)(Leader),其他企業(yè)總部節(jié)點(diǎn)作為從節(jié)點(diǎn)(Slave),聯(lián)盟鏈采用拜占庭容錯(cuò)(practical byzantine fault tolerance,PBFT)共識(shí)機(jī)制進(jìn)行共識(shí),共識(shí)過程如下.
a)Leader收集各 Slave 的 Data_set,并將其整合到一個(gè)新的數(shù)據(jù)區(qū)塊中,同時(shí)附加上 Leader的數(shù)字簽名和新數(shù)據(jù)區(qū)塊的 Hash以備檢驗(yàn).Leader向各個(gè) Slave廣播新生成的數(shù)據(jù)區(qū)塊,以等待其他節(jié)點(diǎn)的驗(yàn)證.上述過程的形式化語言描述如下:
b)Slave收到數(shù)據(jù)區(qū)塊后,對(duì) L eader發(fā)送過來的區(qū)塊 Hash和數(shù)字簽名信息進(jìn)行驗(yàn)證,確認(rèn)區(qū)塊Hash和數(shù)字簽名的正確性和合法性,并將驗(yàn)證結(jié)果 Result與自己的數(shù)字簽名廣播給其他 Slave,實(shí)現(xiàn) Slave間互連、互查.
c)某個(gè) SlaveBSl接收并匯總其他 Slave的驗(yàn)證結(jié)果,與自己的驗(yàn)證結(jié)果比較,驗(yàn)證后向 Leader發(fā)送一個(gè)回復(fù) Reply.該 Reply包括 Slave自身的驗(yàn)證結(jié)果(my_result)、收到的所有驗(yàn)證結(jié)果(R ece_results)、驗(yàn)證對(duì)比的最終結(jié)論(Comparison)和對(duì)應(yīng)的數(shù)字簽名.上述過程的形式化語言描述如下:
其中,Data_3=my_result||Rece_results||Comparison,SigBSl=SignSKBSl(Data_3).
d)Leader收集匯總所有 Slave的驗(yàn)證回復(fù).若所有 Slave都驗(yàn)證通過當(dāng)前區(qū)塊的正確性和合法性,則 Leader整合該數(shù)據(jù)區(qū)塊、參與驗(yàn)證的 Slave的證書集合({CertBS})以及對(duì)應(yīng)的數(shù)字簽名并發(fā)送給所有的 Slave.此后,該數(shù)據(jù)區(qū)塊將以時(shí)間順序存儲(chǔ)在聯(lián)盟鏈中,Leader從中獲得系統(tǒng)的獎(jiǎng)勵(lì).上述過程的形式化語言描述如下:
e)若部分企業(yè)總部節(jié)點(diǎn)未驗(yàn)證通過,則Leader將分析和查驗(yàn)這些企業(yè)總部節(jié)點(diǎn)的驗(yàn)證結(jié)果.Leader重新發(fā)送該數(shù)據(jù)區(qū)塊給這部分企業(yè)總部節(jié)點(diǎn)進(jìn)行二次驗(yàn)證.若仍有節(jié)點(diǎn)不通過,則將按照少數(shù)服從多數(shù)的原則,超過一定比例的企業(yè)總部節(jié)點(diǎn)驗(yàn)證通過該數(shù)據(jù)區(qū)塊,將該數(shù)據(jù)區(qū)塊按d)的方式加載到聯(lián)盟鏈中.
通過上述共識(shí)過程,企業(yè)狀態(tài)數(shù)據(jù)將存入聯(lián)盟鏈Fabric 中,以便為后續(xù)對(duì)企業(yè)營商環(huán)境進(jìn)行評(píng)估時(shí)提供關(guān)聯(lián)數(shù)據(jù)溯源和分析支持.
實(shí)驗(yàn)數(shù)據(jù)集來自區(qū)塊鏈與智能金融研究中心InplusLab 實(shí)驗(yàn)室開發(fā)的區(qū)塊鏈數(shù)據(jù)智能平臺(tái)XBlock 中的數(shù)據(jù)集,所有數(shù)據(jù)集都進(jìn)行了標(biāo)準(zhǔn)化的清洗和歸類,并統(tǒng)一為標(biāo)準(zhǔn)的一致格式.數(shù)據(jù)集的具體內(nèi)容如表2 所示.
表2 實(shí)驗(yàn)數(shù)據(jù)集介紹Tab.2 Introduction to experimental datasets
實(shí)驗(yàn)從鏈下Level DB 讀寫性能、企業(yè)級(jí)復(fù)合區(qū)塊鏈存儲(chǔ)效率2 個(gè)方面,對(duì)比分析營商環(huán)境評(píng)估的企業(yè)級(jí)復(fù)合區(qū)塊鏈構(gòu)建方法的有效性.
當(dāng)進(jìn)行Level DB 讀寫性能測(cè)試對(duì)比時(shí),設(shè)置L0層文件數(shù)量上限為10,對(duì)比測(cè)試在4、8、16 kB 3 種不同大小Value下的讀寫時(shí)延.在每種Value 下,分別生成10 萬條均勻分布的測(cè)試數(shù)據(jù),再生成測(cè)試數(shù)據(jù)范圍內(nèi)均勻分布的10 萬條查詢.在修改 L0層前,讀操作時(shí)延包括讀內(nèi)存和讀磁盤.寫操作時(shí)延包括3 種:1)在數(shù)據(jù)寫入內(nèi)存表前,將數(shù)據(jù)及它的校驗(yàn)值寫入磁盤的時(shí)延;2)數(shù)據(jù)寫入MemTable 的時(shí)延;3)2 次合并帶來的尾時(shí)延.如圖7、8 所示分別為修改前、后的Level DB 的讀、寫時(shí)延對(duì)比圖.圖中,RLb、WLb分別為修改前Level DB 的讀、寫時(shí)延,RLa、WLa分別為修改后Level DB 的讀、寫時(shí)延.
圖7 修改前LevelDB 讀、寫時(shí)延的對(duì)比圖Fig.7 Comparison of reading and writing latency of LevelDB before modification
圖8 修改后LevelDB 讀、寫時(shí)延的對(duì)比圖Fig.8 Comparison of reading and writing latency of LevelDB after modification
如圖7、8 所示,與未修改 L0層相比,修改后的 L0層總體讀時(shí)延都降低了約50%,由于將 L0層放在NVM 上,縮短了 L0層的查詢路徑,同時(shí)引入了查找學(xué)習(xí)索引,效率比傳統(tǒng) SSTable 的二分查找快.總體寫時(shí)延都降低了約30%.由于內(nèi)存表持久化的過程由DRAM 到SSD 變?yōu)镈RAM 到NVM,減少的大部分時(shí)延都來自合并.
實(shí)驗(yàn)環(huán)境為20 臺(tái)服務(wù)器、32 核CPU、128 GB 內(nèi)存、10 TB 存儲(chǔ)空間.區(qū)塊鏈采用Docker 虛擬化技術(shù)部署,使用Kubernetes 管理Docker 集群.對(duì)比存儲(chǔ)模型為公有鏈以太坊Ethereum 和聯(lián)盟鏈Hyperledger Fabric.實(shí)驗(yàn)結(jié)果如圖9 所示.圖中,de為存儲(chǔ)的企業(yè)實(shí)體數(shù)據(jù)集大小,t 為存儲(chǔ)所需的時(shí)間.
圖9 企業(yè)級(jí)復(fù)合區(qū)塊鏈的存儲(chǔ)效率對(duì)比Fig.9 Storage efficiency comparison of enterprise composite blockchain
從圖9 可知,提出的企業(yè)級(jí)復(fù)合區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)的存儲(chǔ)效率高于Ethereum 和Fabric,復(fù)合區(qū)塊鏈中的公有鏈采用基于DAG 的區(qū)塊結(jié)構(gòu)和Conflux 共識(shí),加快了區(qū)塊構(gòu)建和共識(shí)過程,提高了存儲(chǔ)效率.
營商環(huán)境的好壞直接影響企業(yè)的經(jīng)營狀況和當(dāng)?shù)氐慕?jīng)濟(jì)發(fā)展.針對(duì)營商環(huán)境評(píng)估時(shí)面臨的企業(yè)原始數(shù)據(jù)質(zhì)量不高的問題,本文提出營商環(huán)境評(píng)估的企業(yè)級(jí)復(fù)合區(qū)塊鏈構(gòu)建方法,采用鏈上和鏈下相結(jié)合的存儲(chǔ)模式,對(duì)企業(yè)原始數(shù)據(jù)進(jìn)行存儲(chǔ).引入改進(jìn)的哈希函數(shù)SHA256 算法對(duì)企業(yè)原始數(shù)據(jù)進(jìn)行加密,并將其存入鏈下基于非易失性內(nèi)存的Level DB 數(shù)據(jù)庫中,以降低系統(tǒng)的通信和存儲(chǔ)壓力.將數(shù)據(jù)上鏈存儲(chǔ),分別將Level DB 中的Key 值對(duì)應(yīng)存儲(chǔ)到基于DAG 的Conflux 公有鏈,將企業(yè)狀態(tài)數(shù)據(jù)對(duì)應(yīng)存入聯(lián)盟鏈Hyperledger Fabric,為營商環(huán)境評(píng)估提供可信的存證數(shù)據(jù).通過實(shí)驗(yàn)對(duì)比分析,驗(yàn)證了所提方法的有效性.