李正超,梁志宏,岳 昆**
(1.云南大學 信息學院,云南 昆明 650500;2.西南林業(yè)大學 大數(shù)據(jù)與人工智能學院,云南 昆明 650224)
供應鏈金融是一種重要的融資模式,廣泛應用于醫(yī)藥供應鏈、汽車供應鏈、房地產(chǎn)供應鏈等領域,供應鏈金融數(shù)據(jù)是金融機構(gòu)進行金融風險分析及企業(yè)獲取融資的重要數(shù)據(jù).然而,供應鏈體系中心化程度高、數(shù)據(jù)篡改難度低,數(shù)據(jù)的篡改直接影響供應鏈的安全與穩(wěn)定[1].研究人員在現(xiàn)有供應鏈金融體系中引入加密技術、大數(shù)據(jù)、物聯(lián)網(wǎng)、云計算等技術,以防范潛在風險[2],但受限于中心化的管理方式,供應鏈數(shù)據(jù)的安全性問題尚未得到有效解決,數(shù)據(jù)偽造、篡改的事件時有發(fā)生.例如,2019 年的閩興藥業(yè)騙貸案、諾亞財富踩雷事件、武漢金凰珠寶假黃金案,都暴露出了目前供應鏈金融體系中的數(shù)據(jù)篡改風險[3].因此,數(shù)據(jù)防篡改是供應鏈金融體系中亟待解決的問題.
區(qū)塊鏈技術的出現(xiàn),為解決現(xiàn)有供應鏈金融體系中存在的問題提供了新的思路.區(qū)塊鏈本質(zhì)是一種集體維護的分布式賬本技術,具有去中心化、不可篡改、透明可信的特性,與供應鏈金融體系具有天然契合之處.融合區(qū)塊鏈技術的供應鏈金融體系中,數(shù)據(jù)由區(qū)塊鏈網(wǎng)絡節(jié)點共同維護,鏈上數(shù)據(jù)不可篡改.然而,研究表明,區(qū)塊鏈雖然安全性高,但存在性能瓶頸,一方面,隨著數(shù)據(jù)的不斷增加,區(qū)塊鏈的存儲空間成為其限制條件;另一方面,區(qū)塊鏈網(wǎng)絡的交易處理能力弱,例如比特幣每秒僅能處理7 筆交易,以太坊每秒處理15 筆交易[4].目前,國內(nèi)外在供應鏈方面的研究中引入?yún)^(qū)塊鏈技術,但側(cè)重于隱私保護、數(shù)據(jù)溯源,對區(qū)塊鏈性能方面的優(yōu)化研究較少.因此,為了高效地實現(xiàn)供應鏈金融數(shù)據(jù)安全存儲,本文旨在研究高存儲效率的供應鏈金融數(shù)據(jù)存證模型.
聯(lián)盟鏈是部分去中心化的分布式結(jié)構(gòu),事務吞吐量高,適用于多個實體組成的組織或聯(lián)盟[5],因此本文將聯(lián)盟鏈用于供應鏈參與方之間構(gòu)建權(quán)利對等的區(qū)塊鏈網(wǎng)絡,以提高區(qū)塊鏈存儲供應鏈金融數(shù)據(jù)的效率.此外,針對供應鏈金融數(shù)據(jù)存儲和金融風險分析的需求,提出雙聯(lián)盟鏈架構(gòu),利用智能合約對數(shù)據(jù)進行上鏈存證及訪問.
鏈下存儲是一種區(qū)塊鏈擴容方法,可以有效提高區(qū)塊鏈交易效率.針對區(qū)塊鏈存儲資源有限和性能低的問題,本文借鑒鏈上鏈下存儲方法,使用星際文件系統(tǒng)[6](Inter-Planetary File System,IPFS)存儲鏈下數(shù)據(jù),而鏈上僅存儲數(shù)據(jù)指紋,實現(xiàn)了供應鏈金融數(shù)據(jù)高效地存儲于分布式數(shù)據(jù)庫中.為了驗證本文所提方法的存儲和查詢高效性,本文通過吞吐量來描述存儲和查詢效率,在數(shù)據(jù)集上的實驗結(jié)果驗證了所提方法的高效性.
近年來,研究人員在供應鏈數(shù)據(jù)保護與共享、區(qū)塊鏈擴容等方面開展了許多研究.
在供應鏈數(shù)據(jù)保護方面,基于公有鏈的數(shù)據(jù)存儲方法可以有效保障數(shù)據(jù)安全性,例如,Gao 等[7]提出基于區(qū)塊鏈的供應鏈管理模型,使用公有鏈和聯(lián)盟鏈相結(jié)合的混合鏈方式存儲供應鏈數(shù)據(jù).Xu等[8]設計了基于區(qū)塊鏈的產(chǎn)品溯源系統(tǒng),借助區(qū)塊鏈只能插入數(shù)據(jù)不能刪除數(shù)據(jù)的特點,為取證提供可追溯數(shù)據(jù),并在以太坊上部署溯源智能合約.然而,這類使用公有鏈存儲供應鏈數(shù)據(jù)的方法開銷十分昂貴,并且存儲效率極低.
在供應鏈數(shù)據(jù)共享方面,一些方法通過加密算法和授權(quán)訪問方式來存儲及訪問數(shù)據(jù),并提供隱私保護.例如,Abidi 等[9]借助區(qū)塊鏈技術實現(xiàn)供應鏈網(wǎng)絡中的敏感數(shù)據(jù)共享,對敏感數(shù)據(jù)進行數(shù)據(jù)清洗和密鑰加密,以提供隱私保護,加密數(shù)據(jù)存儲在區(qū)塊鏈中.Leng 等[10]提出基于區(qū)塊鏈的農(nóng)業(yè)供應鏈雙鏈模型,該模型同時使用公有鏈和私有鏈存儲數(shù)據(jù).上述方法解決了數(shù)據(jù)共享過程中存在的數(shù)據(jù)易篡改、泄密問題,但其效率受限于加密解密運算.
在區(qū)塊鏈擴容方面,一些模型以IPFS 作為底層存儲[11].例如,Zheng 等[12]提出一種基于IPFS的區(qū)塊鏈存儲模型,以拓展比特幣存儲空間,曠工將交易數(shù)據(jù)存入IPFS,并將返回的IPFS 哈希值寫入?yún)^(qū)塊鏈.Kumar 等[13]提出一種基于區(qū)塊鏈和IPFS 的圖像視頻版權(quán)保護模型,使用IPFS 存儲圖像和視頻元數(shù)據(jù),區(qū)塊鏈僅存儲圖像指紋.文獻[14]提出一種基于區(qū)塊鏈的檔案數(shù)據(jù)保護與共享方法,結(jié)合IPFS 存儲檔案數(shù)據(jù),實現(xiàn)了數(shù)字檔案的保護、驗證、恢復與共享功能,該方法可拓展區(qū)塊鏈數(shù)據(jù)存儲能力[15]、減輕鏈上數(shù)據(jù)高頻訪問壓力.
在現(xiàn)有研究的基礎上,本文基于區(qū)塊鏈技術解決供應鏈金融數(shù)據(jù)安全存證問題,引入IPFS 對區(qū)塊鏈進行擴容,提高了聯(lián)盟鏈存儲和查詢數(shù)據(jù)的效率.
2.1 模型描述 定義 1供應鏈金融數(shù)據(jù)主要包括供應鏈金融關鍵數(shù)據(jù)(Supply Chain Finance Key Information,FKI)和文件關鍵信息數(shù)據(jù)(Document Key Information,DKI),F(xiàn)KI 包括授信、融資、融信、支付、企業(yè)信用、企業(yè)負債等信息,表示為F={f1,f2,···,fn};DKI 包括合同、發(fā)票、圖片、IPFShash等相關信息,其中,IPFShash為文件元數(shù)據(jù)存入IPFS后返回的索引值,D={d1,d2,···,dn}.
定義 2金融信息聯(lián)盟鏈(Financial Information Alliance Chain,FIAC)中存儲交易FKI;文件關鍵信息聯(lián)盟鏈(Document Key Information Alliance Chain,DIAC)中存儲交易DKI.
區(qū)塊鏈的去中心化、不可篡改和智能合約機制等特點,可以滿足供應鏈金融數(shù)據(jù)存證中的防篡改、安全訪問需求.鑒于此,本文提出基于區(qū)塊鏈的供應鏈金融數(shù)據(jù)存證模型.模型使用六元組<BlockNet,DIAC,FIAC,IPFS,SC,Consensus>表示,如圖1 所示,其中:
圖1 基于區(qū)塊鏈的供應鏈金融數(shù)據(jù)存證模型Fig.1 Blockchain-based data storage model for supply chain finance
(1)BlockNet 表示區(qū)塊鏈網(wǎng)絡,以聯(lián)盟鏈為基礎構(gòu)建,由多個組織機構(gòu)組成,主要組織機構(gòu)包括銀行、核心企業(yè)、供應商、監(jiān)管部門等,每個組織機構(gòu)由多個實體節(jié)點組成,節(jié)點加入時需要進行身份認證,各節(jié)點共同維護聯(lián)盟鏈,在區(qū)塊中添加供應鏈金融數(shù)據(jù)以及監(jiān)管部門的審核信息.聯(lián)盟鏈網(wǎng)絡中沒有絕對中心化的第三方,核心企業(yè)不再作為中心化節(jié)點.
(2)FIAC 和DIAC 兩條區(qū)塊鏈、以及IPFS 組成了數(shù)據(jù)存儲層,IPFS 存儲文件元數(shù)據(jù),DIAC 鏈存儲文件關鍵數(shù)據(jù),確保原始數(shù)據(jù)的完整性,F(xiàn)IAC鏈存儲供應鏈金融數(shù)據(jù),可用于供應鏈金融風險分析,在雙鏈結(jié)構(gòu)中,F(xiàn)IAC 鏈和DIAC 鏈通過hash指針的方式錨定連接.
(3)SC 表示智能合約,智能合約實現(xiàn)數(shù)據(jù)上鏈、訪問功能,鏈上節(jié)點只能通過調(diào)用事先部署在區(qū)塊鏈中的智能合約操作數(shù)據(jù),區(qū)塊鏈和鏈下IPFS 之間的數(shù)據(jù)交互同樣也是通過智能合約完成.
(4)Consensus 表示共識算法[16],具有維護區(qū)塊鏈網(wǎng)絡每一個節(jié)點唯一公認的全局賬本的功能,避免網(wǎng)絡延遲、節(jié)點崩潰、惡意攻擊等原因引起的系統(tǒng)錯誤,同時,共識算法是影響模型性能的重要因素.
2.2 基于智能合約的存儲及訪問算法為了保證供應鏈金融數(shù)據(jù)的鏈上鏈下存儲,基于2.1 節(jié)提出的模型,本節(jié)給出基于智能合約的數(shù)據(jù)存儲和訪問算法,智能合約在滿足條件時可觸發(fā)自動執(zhí)行,減少人為干預,從而保障數(shù)據(jù)安全性.合約框架如圖2所示,數(shù)據(jù)管理智能合約(Data Manage Smart Contract,DMSC)作為聯(lián)盟鏈中的全局合約[14],記錄聯(lián)盟鏈中部署的智能合約,包括數(shù)據(jù)存儲智能合約(Data Insert Smart Contract,DISC)、數(shù)據(jù)查詢智能合約(Data Query Smart Contract,DQSC),實現(xiàn)數(shù)據(jù)上鏈和查詢功能.
圖2 智能合約框架Fig.2 Frame of smart contracts
算法1 給出供應鏈金融數(shù)據(jù)存儲方法,該算法將供應鏈金融數(shù)據(jù)記入?yún)^(qū)塊鏈,方便后續(xù)的數(shù)據(jù)驗證及供應鏈金融風險分析.首先初始化IPFS 私有集群,當聯(lián)盟鏈節(jié)點請求數(shù)據(jù)上鏈時,節(jié)點連接IPFS,第3 步存儲鏈下數(shù)據(jù),文件成功存儲到IPFS后,IPFS 返回IPFShash作為索引,同時調(diào)用DISC 將數(shù)據(jù)寫入?yún)^(qū)塊,數(shù)據(jù)經(jīng)過區(qū)塊鏈網(wǎng)絡廣播、驗證、同步后完成數(shù)據(jù)上鏈.該算法的時間復雜度取決于步驟7 和9 所使用的共識算法.
算法1供應鏈金融數(shù)據(jù)存儲
輸入文件名file、IPFS 的IP 地址和連接端口port.
輸出上鏈狀態(tài)status.
步驟:
算法2 給出供應鏈金融數(shù)據(jù)訪問方法,當聯(lián)盟鏈節(jié)點請求讀取鏈上數(shù)據(jù)時,第1~2 步讀取數(shù)據(jù),節(jié)點需要調(diào)用DQSC 從聯(lián)盟鏈上獲取文件關鍵數(shù)據(jù)和供應鏈金融關鍵數(shù)據(jù),然后根據(jù)文件關鍵數(shù)據(jù)中的索引IPFShash下載文件,并驗證數(shù)據(jù)真實性.該算法中通過遍歷區(qū)塊鏈的方式查詢數(shù)據(jù),因此,時間復雜度為O(n),其中,n為區(qū)塊數(shù)量.
算法2供應鏈金融數(shù)據(jù)訪問
輸入文件標識fileID、交易數(shù)據(jù)txid.
輸出供應鏈金融數(shù)據(jù)集DataSet.
步驟:
3.1 實驗指標為了評估本文所提存證模型的效果,使用測試數(shù)據(jù)集模擬供應鏈場景下的金融數(shù)據(jù)存儲和查詢實驗,模擬實驗的方法將在3.3、3.4 節(jié)進行詳細描述.實驗以吞吐量(Transaction Per Second,TPS)作為評估存儲效率和查詢效率的指標,計算方法如下:
其中,MΔt表示Δt時間內(nèi)模型處理的交易總數(shù).
實驗通過增加存儲和查詢數(shù)據(jù)量、共識節(jié)點數(shù)的方法,發(fā)起100~10 000 條數(shù)據(jù)寫入和查詢請求,測試模型資源消耗、寫入吞吐量和查詢吞吐量最大值、雙鏈交互性能;通過增加存儲文件大小的方法,發(fā)起1~32 MB 大小的文件寫入和查詢請求,測試及對比區(qū)塊鏈和IPFS 的存儲、查詢效率.
3.2 實驗環(huán)境本文基于Hyperledger Fabric 區(qū)塊鏈實驗平臺部署聯(lián)盟鏈,使用Golang 語言開發(fā)智能合約,以鏈碼的形式部署在聯(lián)盟鏈中,實驗環(huán)境如下:Centos7.8、Fabric1.4.1、Docker19.03.12、Go1.11.11、Tape0.3.0,1 臺2.5 GHz Intel Core i5-7200U CPU 和16 GB RAM的計算機.Fabric 網(wǎng)絡通過Docker 容器運行,實驗過程中啟動的Docker容器如表1 所示,聯(lián)盟鏈由多個組織機構(gòu)組成,每個組織機構(gòu)由1 個Peer 節(jié)點、1 個Orderer 節(jié)點和1個Fabric-ca 節(jié)點組成,使用CouchDB 作為數(shù)據(jù)庫存儲區(qū)塊交易,IPFS 系統(tǒng)同樣通過Docker 容器搭建.
表1 模型測試實驗環(huán)境Tab.1 The experiment environment for model testing
3.3 模型存儲效率測試為了測試不同聯(lián)盟鏈節(jié)點數(shù)量的情況下模型的寫入吞吐量,創(chuàng)建6 組測試數(shù)據(jù)集,在保證寫入成功率為100%的情況下,由節(jié)點調(diào)用DISC 智能合約,在節(jié)點數(shù)為4、8、12、16、20 和24 的情況下,分別發(fā)起100、500、1 000、2 000、5 000 和10 000 條數(shù)據(jù)上鏈請求,每組實驗重復10 次取平均值,避免實驗結(jié)果的偶然性,結(jié)果如圖3 所示.可以看出,當節(jié)點數(shù)為4 時,上鏈數(shù)據(jù)集規(guī)模在100~500 條時,吞吐量增長較快;規(guī)模在500~5 000 條時,吞吐量緩慢增長;規(guī)模在5 000條以上時,由于服務器性能達到瓶頸,吞吐量在370 左右波動,模型的寫入吞吐量最高為370 事務數(shù)/s,平均出塊率為每秒3.6 個區(qū)塊.此外,模型事務處理效率與節(jié)點數(shù)量負相關,當共識節(jié)點數(shù)為24 時,模型最高寫入效率為227 事務數(shù)/s、下降了38.6%.由算法1 可知,數(shù)據(jù)寫入?yún)^(qū)塊鏈需要使用共識算法,隨著共識節(jié)點orderer 數(shù)量的增加,節(jié)點之間通信次數(shù)增加,驗證區(qū)塊交易的時間消耗隨之增加,因此,模型中節(jié)點數(shù)量越多,模型事務處理效率越低,吞吐量越低.記錄寫入吞吐量達到最大時的資源消耗情況,如表2 所示,模型的中各組件的硬件資源消耗并不高,可滿足實際應用場景下的部署要求.
圖3 不同節(jié)點數(shù)的鏈上存儲效率對比Fig.3 Comparison of on-chain storage efficiency with different number of nodes
表2 模型各組件硬件資源消耗Tab.2 Consumption of hardware resource for each component of the model
為了測試IPFS 對存儲效率的影響,使用1~32 MB 大小的文件,分別存儲到IPFS 和區(qū)塊鏈中,對比鏈上和鏈下的存儲效率,結(jié)果如圖4 所示.可以看出,區(qū)塊鏈上存儲耗時、IPFS 存儲耗時均與文件大小呈正相關,但IPFS 存儲效率要高于區(qū)塊鏈存儲效率,其平均存儲效率比區(qū)塊鏈高37.1%,因此,模型中使用IPFS 不僅能擴展區(qū)塊鏈存儲空間,還能提高模型存儲效率.
圖4 不同大小文件的鏈上鏈下存儲效率對比Fig.4 Comparison of on-chain and off-chain storage efficiency for different file sizes
3.4 查詢效率測試為了測試模型的查詢效率,節(jié)點調(diào)用DQSC 智能合約查詢區(qū)塊鏈中的數(shù)據(jù),在保證查詢成功率為100%的情況下,分別發(fā)起6 組數(shù)據(jù)上鏈請求,結(jié)果如圖5 所示,有索引查詢時,模型的查詢吞吐量峰值為每秒處理261 個事務,無索引查詢時模型的查詢吞吐量峰值為每秒處理186個事務.
圖5 不同索引方式的鏈上查詢效率對比Fig.5 Comparison of the efficiency of on-chain queries with different indexing methods
為了測試IPFS 對查詢效率的影響,分別查詢IPFS 和區(qū)塊鏈上存儲的1、2、4、8、16、32 MB 大小的文件,結(jié)果如圖6 所示.可以看出,隨著文件大小的增加,從區(qū)塊鏈獲取文件元數(shù)據(jù)耗時、IPFS 獲取文件耗時均與文件大小呈正相關,但IPFS 查詢效率要高于區(qū)塊鏈,其平均查詢效率比區(qū)塊鏈高72.3%,因此,IPFS 提高了模型的查詢效率.
圖6 不同大小文件的鏈上鏈下查詢效率對比Fig.6 Comparison of the efficiency of on-chain and off-chain queries for different file sizes
針對本文提出的基于區(qū)塊鏈的供應鏈金融數(shù)據(jù)存證模型,與現(xiàn)有文獻中結(jié)合區(qū)塊鏈技術的供應鏈模型在存儲開銷方面進行對比,如表3 所示.可以看出,本文提出的基于區(qū)塊鏈的供應鏈數(shù)據(jù)存證模型使用聯(lián)盟鏈架構(gòu),其去中心化程度可以靈活設置,因此模型可以安全存儲供應鏈金融數(shù)據(jù)、有效預防數(shù)據(jù)篡改,結(jié)合IPFS 系統(tǒng)進行鏈下文件存儲,減小了鏈上存儲開銷,有效提高了模型可擴展性和存儲效率.實驗結(jié)果表明,模型吞吐量可達370 事務數(shù)/s,效率較高,資源消耗低.通過對比可知,本文提出的模型在資源消耗、存儲效率、可擴展性等方面有顯著的優(yōu)勢.
表3 基于區(qū)塊鏈的供應鏈數(shù)據(jù)存證模型對比Tab.3 Comparison of blockchain-based supply chain data storage models
3.5 雙鏈交互性能測試為了測試模型中雙鏈之間的交互性能,節(jié)點調(diào)用DISC 智能合約將DIAC鏈上存儲的6 組數(shù)據(jù)的哈希值寫入FIAC 鏈,同時通過FIAC 鏈上的哈希值查詢DIAC 鏈上的數(shù)據(jù),結(jié)果如圖7 所示,其中,Write 表示DIAC 鏈上每條數(shù)據(jù)哈希值寫入FIAC 鏈的平均響應時間,Query表示根據(jù)哈希值查詢DIAC 鏈上每條數(shù)據(jù)的平均響應時間.可以看出,隨著交互數(shù)據(jù)量的增加,平均響應時間逐漸減小,在數(shù)據(jù)規(guī)模為10 000 條時,由于服務器性能達到瓶頸,每條交互數(shù)據(jù)的平均寫入耗時穩(wěn)定在33.4 ms、平均查詢耗時穩(wěn)定在14.8 ms.
圖7 雙鏈寫入和查詢性能Fig.7 Performance of double-chain write and query
本文設計了一種基于區(qū)塊鏈的供應鏈金融數(shù)據(jù)存證模型,模型采用鏈上鏈下相結(jié)合的存儲方式,使用雙區(qū)塊鏈存儲供應鏈金融數(shù)據(jù),并設計了智能合約實現(xiàn)對鏈上數(shù)據(jù)的操作.鏈下使用IPFS 存儲供應鏈金融相關文件,可有效擴展區(qū)塊鏈存儲能力.通過實驗對模型多項指標進行了測試及分析,結(jié)果表明,本文模型吞吐量高、資源消耗低,對實際應用有一定意義.借助本模型,供應鏈企業(yè)的數(shù)據(jù)可以在不借助第三方中心化機構(gòu)的情況下實現(xiàn)安全、高效存儲.在未來的工作中,將繼續(xù)深入研究模型優(yōu)化,針對供應鏈特點,對共識算法進行改進,進一步提高模型存儲效率.