李朝放,盧清華
(中國石油大學(xué)(華東)計算機(jī)科學(xué)與技術(shù)學(xué)院,山東青島 266580)
現(xiàn)代供應(yīng)鏈復(fù)雜多變,企業(yè)在發(fā)展過程中的運(yùn)營管理存在諸多問題。一方面,供應(yīng)鏈網(wǎng)絡(luò)的管理風(fēng)險不易把控且存在不良交易,造成了供應(yīng)鏈信任短缺的現(xiàn)象;另一方面,在中心化的系統(tǒng)中,若關(guān)鍵設(shè)備或服務(wù)中斷運(yùn)行,可能會對鏈上的公司造成嚴(yán)重?fù)p害[1-2]。
基于分布式賬本的區(qū)塊鏈提供了高可信的安全環(huán)境和自動化交易的能力,去中心化的架構(gòu)也使歷史交易信息在區(qū)塊中得到保護(hù),有效避免數(shù)據(jù)篡改和惡意刪除。許多政府和企業(yè)都在探索區(qū)塊鏈技術(shù)的更多應(yīng)用場景,但是仍然缺少系統(tǒng)、完整的區(qū)塊鏈解決方案來優(yōu)化供應(yīng)鏈支付問題。
基于此,該文提出了一種基于區(qū)塊鏈和物聯(lián)網(wǎng)的供應(yīng)鏈托管架構(gòu),以實(shí)現(xiàn)供應(yīng)鏈的去中心化管理;設(shè)計研究了供應(yīng)鏈支付托管算法,做到自動化執(zhí)行交易交割;最后實(shí)現(xiàn)了系統(tǒng)原型并完成性能測試工作,結(jié)果表明所提結(jié)構(gòu)和算法具有較高的可行性和良好的性能,為供應(yīng)鏈提供了高信任度的環(huán)境和可以安全執(zhí)行的交易合約。
目前供應(yīng)鏈越來越依賴于高效可信的運(yùn)輸和通信系統(tǒng)[3]。一些企業(yè)采用了供應(yīng)鏈彈性技術(shù),使供應(yīng)鏈具有自動恢復(fù)和自我重建的能力[4];或?qū)⒐?yīng)鏈內(nèi)部和外部進(jìn)行整合,并構(gòu)建最佳匹配狀態(tài)[5]等。但是這些仍然不能避免改進(jìn)方案受到單點(diǎn)故障、人為因素和不良商業(yè)交易行為的影響,導(dǎo)致網(wǎng)絡(luò)環(huán)境的受信程度不高,敏感關(guān)鍵信息存在被篡改的可能,造成交易甚至企業(yè)的嚴(yán)重?fù)p失[6-7]。
區(qū)塊鏈作為一種去中心化分布式賬本技術(shù),使用共識算法、多種加密和激勵策略等手段,搭建了一種去中心化的、無需信任的分布式對等網(wǎng)絡(luò)和一種鏈?zhǔn)劫~本數(shù)據(jù)結(jié)構(gòu)。這種技術(shù)依托去中心化架構(gòu),從而實(shí)現(xiàn)了點(diǎn)對點(diǎn)交易和分布式自治節(jié)點(diǎn)集群,很好地解決了單點(diǎn)故障以及數(shù)據(jù)、身份信任問題[8-9]。
如圖1 所示,區(qū)塊鏈基于共識的鏈?zhǔn)浇Y(jié)構(gòu)從源頭上保證了歷史數(shù)據(jù)的不可篡改性,配合共識算法和激勵策略保證鏈上數(shù)據(jù)的安全性和完整性[10-12]。
圖1 區(qū)塊數(shù)據(jù)結(jié)構(gòu)
智能合約是指在分布式賬本的多個節(jié)點(diǎn)上同步運(yùn)行的代碼腳本,且能夠做到由互不信任的節(jié)點(diǎn)正確執(zhí)行,而不需要第三方可信機(jī)構(gòu)。由于智能合約的自動執(zhí)行特性,為依賴數(shù)據(jù)驅(qū)動事務(wù)的許多領(lǐng)域提供了機(jī)遇,目前越來越多的開發(fā)者正致力于開發(fā)不同類型的智能合約,例如金融、公證、政務(wù)、物流等[13-15]。
目前國內(nèi)區(qū)塊鏈在供應(yīng)鏈上也有實(shí)驗(yàn)性應(yīng)用,但主要集中在農(nóng)產(chǎn)品溯源和防偽等問題上[16],對供應(yīng)鏈的架構(gòu)升級和支付管理缺少深入研究。
圖2 展示了所提供應(yīng)鏈托管系統(tǒng)的系統(tǒng)架構(gòu)圖。在Fabric 網(wǎng)絡(luò)中的每一個點(diǎn)代表一個服務(wù)器節(jié)點(diǎn)。若干服務(wù)器節(jié)點(diǎn)組成一個組織,組織內(nèi)部的節(jié)點(diǎn)數(shù)并不限制,按照真實(shí)機(jī)構(gòu)組成來劃分組織,而組織中必須確定錨節(jié)點(diǎn)來代表本組織與其他節(jié)點(diǎn)的通信,如組織1 中的錨節(jié)點(diǎn)為服務(wù)器節(jié)點(diǎn)0,而組織之間或節(jié)點(diǎn)之間的通信是建立在通道之上。
圖2 供應(yīng)鏈托管系統(tǒng)架構(gòu)
通道是任意節(jié)點(diǎn)組成的一個子區(qū)塊鏈網(wǎng)絡(luò),這些節(jié)點(diǎn)可以來自同一組織也可以跨組織,并且節(jié)點(diǎn)能夠在通道建立之后靈活加入。但節(jié)點(diǎn)不能退出,同樣通道也不可撤銷。需要說明的是,各通道之間不可通信,各擁有獨(dú)立分布式賬本。另外,通道也是鏈碼的安裝基礎(chǔ),相同鏈碼只能在同一通道中安裝一次,但是可以通過版本迭代來升級鏈碼。
客戶端系統(tǒng)由Fabric SDK 開發(fā),安裝在服務(wù)器節(jié)點(diǎn)和物聯(lián)網(wǎng)設(shè)備上??蛻舳酥性O(shè)定了各服務(wù)器節(jié)點(diǎn)的IP 地址和名稱以及通道和鏈碼等的名稱??蛻舳讼到y(tǒng)中開發(fā)了通道和節(jié)點(diǎn)管理器,服務(wù)器節(jié)點(diǎn)擁有使用該功能的權(quán)限,可以實(shí)現(xiàn)創(chuàng)建通道和節(jié)點(diǎn)加入的管理;交易廣播器由物聯(lián)網(wǎng)設(shè)備使用,可以實(shí)現(xiàn)交易的發(fā)起和廣播,廣播的目標(biāo)節(jié)點(diǎn)為服務(wù)器節(jié)點(diǎn)中的peer 節(jié)點(diǎn),也稱背書節(jié)點(diǎn),并在此節(jié)點(diǎn)上模擬執(zhí)行交易,結(jié)果返回至客戶端系統(tǒng)中;交易排序器由物聯(lián)網(wǎng)設(shè)備調(diào)用,該功能可以將得到背書的交易發(fā)送至orderer 節(jié)點(diǎn)進(jìn)行排序,并最終上鏈。物聯(lián)網(wǎng)設(shè)備對客戶端系統(tǒng)中的功能調(diào)用是自動化的,需要傳感器數(shù)據(jù)達(dá)到預(yù)定閾值,從而觸發(fā)設(shè)備調(diào)用相應(yīng)功能。
算法1 描述了基于區(qū)塊鏈的供應(yīng)鏈支付托管算法。在算法中對每個公司ci進(jìn)行如下循環(huán):從通道中獲得ci的當(dāng)前賬本信息l,使用定義的prase()函數(shù)對l進(jìn)行解析,獲得當(dāng)前合同conc以及歷史合同conh。對當(dāng)前合同conc進(jìn)行循環(huán)解析,并與參數(shù)con對比,若conci與con 不相同則保留conci;若相同,則跳過當(dāng)前conci,保留后續(xù)所有合同內(nèi)容,并將當(dāng)前conci接入conh,成為歷史合同。
接下來使用算法中定義的組裝函數(shù)assemble(),將更改后的conc和conh整合至賬本信息l中,并對l中的資產(chǎn)asset 按照con 的轉(zhuǎn)賬合同內(nèi)容通過轉(zhuǎn)賬函數(shù)transfer()進(jìn)行轉(zhuǎn)賬操作。
最后將更新的賬本信息l進(jìn)行廣播并上傳至鏈上。首先定義結(jié)構(gòu)體pair,包括背書節(jié)點(diǎn)peer、交易proposal 以及交易返回值responds。pr 為背書節(jié)點(diǎn),在所有背書節(jié)點(diǎn)中循環(huán)下述算法:
將pr 賦值于pair.peer,待執(zhí)行交易p 賦值給pair.proposal。初始化本地背書客戶端,使用該客戶端與區(qū)塊鏈中所有背書節(jié)點(diǎn)通信,并將返回值賦值pair.responds。再將節(jié)點(diǎn)相關(guān)狀態(tài)更新為connected,并將pair 整體添加至pairs 中。最后將pairs 的內(nèi)容轉(zhuǎn)換為易于讀取數(shù)據(jù)的proposalResponds,并返回該數(shù)據(jù)結(jié)構(gòu)。
該系統(tǒng)節(jié)點(diǎn)集群使用Vmware 虛擬機(jī)創(chuàng)建4 臺服務(wù)器,操作系統(tǒng)為Ubuntu18.04,安裝Hyperledger Fabric1.4 分支版本,區(qū)塊鏈共識算法采用Apache Kafka 共識。4 臺服務(wù)器的配置如表1 所示。
表1 節(jié)點(diǎn)集群服務(wù)器配置
為實(shí)現(xiàn)供應(yīng)鏈上全流程操作托管,該系統(tǒng)在區(qū)塊鏈上開發(fā)并安裝了如表2 的智能合約。智能合約中允許聲明兩類機(jī)構(gòu)實(shí)體,一為普通公司,一為物流公司。其中普通公司為簽署各種合同的主體;相應(yīng)的,合同也分為兩種:普通公司的商業(yè)合同和物流公司的物流交易合同;表中增加請求是指公司發(fā)布購買意愿或售出意愿,等待其他公司根據(jù)請求簽訂合同;另外,完成請求、完成合同和轉(zhuǎn)賬操作均為不可直接調(diào)用的智能合約,請求的完成將在增加對應(yīng)合同時自動執(zhí)行;商業(yè)合同的完成是在對應(yīng)物流協(xié)議完成時被調(diào)用執(zhí)行,而物流協(xié)議的觸發(fā)則需要通過物聯(lián)網(wǎng)設(shè)備的數(shù)據(jù)傳輸,實(shí)現(xiàn)全流程自動化。
表2 智能合約說明
圖3展示了Fabric物聯(lián)網(wǎng)客戶端的類圖。APIEscrow為main 函數(shù)所在類,在該類中主要聲明了Fabric 網(wǎng)絡(luò)和通道的基本參數(shù),以及創(chuàng)建、初始化客戶端、調(diào)用智能合約等方法。APIEscrow 類關(guān)聯(lián)的HFClient類是實(shí)現(xiàn)客戶端方法的主要Java 類。在HFClient 類中,聲明和定義了客戶端相關(guān)的基本參數(shù),包括客戶端線程執(zhí)行器核心池大小、通道Map 等。類中的主要方法有通道的加載、創(chuàng)建和獲取以及智能合約相關(guān)操作、通過獲取和查詢通道信息等方法。
圖3 客戶端類圖
BuildClientDTO 類和ChaincodeID 類是創(chuàng)建客戶端和安裝、初始化智能合約必需的Java 類。在這兩個類中聲明了客戶端和智能合約的必要參數(shù),如mspID、msp 路徑等。
APIHandler 是另一個核心Java 工具類。其中createChannel 方法將通過HFClient 客戶端對象獲取到所需環(huán)境參數(shù)和orderer 節(jié)點(diǎn)數(shù)據(jù)進(jìn)行通道的創(chuàng)建,并獲取CreateChannelDTO 對象的數(shù)據(jù),將需要的peer節(jié)點(diǎn)加入至通道。另外智能合約的安裝、初始化、升級和查詢等操作也可以在APIHandler 類中完成。
圖4 展示了交易在客戶端和服務(wù)器節(jié)點(diǎn)間的流程。步驟一,由客戶端發(fā)起交易,并通過該系統(tǒng)交易廣播器廣播至全體背書節(jié)點(diǎn),背書節(jié)點(diǎn)進(jìn)行交易模擬,通過后簽署背書簽名;步驟二,客戶端收集所有背書簽名;步驟三,客戶端再次通過交易廣播器將得到簽名的交易發(fā)送至排序節(jié)點(diǎn),獲取排序服務(wù);步驟四,排序節(jié)點(diǎn)驗(yàn)證交易合法性并給客戶端返回值,最后將合法交易送至提交節(jié)點(diǎn)。
圖4 交易流程圖
此節(jié)對該托管系統(tǒng)進(jìn)行性能測試。使用樹莓派中的Fabric 客戶端進(jìn)行通道創(chuàng)建和peer節(jié)點(diǎn)加入,每次運(yùn)行耗時情況如圖5 所示,運(yùn)行時間穩(wěn)定在2 s 上下,平均運(yùn)行時間為1.983 s,完全可以滿足企業(yè)需求。
圖5 通道創(chuàng)建運(yùn)行時間
圖6 展示了使用Fabric 客戶端進(jìn)行智能合約調(diào)用的性能測試結(jié)果,圖中的數(shù)據(jù)為運(yùn)行多次智能合約調(diào)用的累計耗時。從圖中可以看出累計運(yùn)行時間成線性增長,平均單次調(diào)用智能合約的運(yùn)行時間為0.397 s,可以實(shí)現(xiàn)該供應(yīng)鏈托管系統(tǒng)的秒級響應(yīng)。
圖6 調(diào)用智能合約累計運(yùn)行時間
文中設(shè)計并實(shí)現(xiàn)了一個基于區(qū)塊鏈的供應(yīng)鏈托管系統(tǒng)。該系統(tǒng)結(jié)合區(qū)塊鏈網(wǎng)絡(luò)和物聯(lián)網(wǎng),實(shí)現(xiàn)了供應(yīng)鏈商業(yè)合同的自動化執(zhí)行,避免惡意篡改,做到去中心化地管理供應(yīng)鏈。利用區(qū)塊鏈客戶端實(shí)現(xiàn)了網(wǎng)絡(luò)中輕節(jié)點(diǎn)調(diào)用鏈上智能合約,并且從創(chuàng)建通道到調(diào)用智能合約的累計時間可以滿足企業(yè)的實(shí)際需求。該系統(tǒng)的下一步工作是實(shí)現(xiàn)動態(tài)增加服務(wù)器節(jié)點(diǎn),并接入更真實(shí)的物聯(lián)網(wǎng)設(shè)備,如RFID、紅外傳感器等。