邵黑龍, 于 瓅
(安徽理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,安徽 淮南 232001)
供應(yīng)鏈?zhǔn)侵府a(chǎn)品從生產(chǎn)商、運(yùn)輸商、銷售商到最終客戶的系統(tǒng),在這個(gè)體系中,各個(gè)環(huán)節(jié)相互協(xié)調(diào),共同構(gòu)成產(chǎn)品的生命周期,供應(yīng)鏈溯源是指產(chǎn)品在生命周期內(nèi)產(chǎn)生的加工信息、物流信息和銷售信息的追蹤。傳統(tǒng)的供應(yīng)鏈溯源是通過監(jiān)管部門調(diào)取企業(yè)內(nèi)部數(shù)據(jù)進(jìn)行查詢和追蹤,然而這種溯源模式存在以下幾點(diǎn)問題:第一,企業(yè)作為不可靠的中心化個(gè)體,具有篡改數(shù)據(jù)的潛在風(fēng)險(xiǎn);第二,現(xiàn)有的供應(yīng)鏈溯源系統(tǒng)僅記錄產(chǎn)品的生產(chǎn)信息和銷售信息,對物流信息缺少監(jiān)管。這種方式減少了產(chǎn)品的質(zhì)量安全保證;第三,當(dāng)前供應(yīng)鏈系統(tǒng)涉及企業(yè)眾多,數(shù)據(jù)不關(guān)聯(lián)。因此,構(gòu)建不可篡改、全方面一體化的供應(yīng)鏈溯源模型極為重要。
區(qū)塊鏈技術(shù)作為一種去中心化的分布式賬本技術(shù),具有不可篡改,可追溯的特性,十分適合作為溯源模型的支撐技術(shù)。當(dāng)前隨著區(qū)塊鏈技術(shù)的發(fā)展,越來越多的國家和企業(yè)重視區(qū)塊鏈技術(shù),本文總結(jié)了區(qū)塊鏈技術(shù)的發(fā)展歷程和技術(shù)原理,分析當(dāng)前溯源系統(tǒng)存在的問題,提出了一種高性能、整體化的基于區(qū)塊鏈技術(shù)的供應(yīng)鏈溯源模型。
區(qū)塊鏈技術(shù)起源于中本聰在2008年提出的《Bitcoin:A Peer-to-Peer Electronic Crash System》一文[1],該文將公私鑰加密,數(shù)字簽名等密碼學(xué)技術(shù),結(jié)合P2P通信、工作量證明(Proofof work,Po W)和時(shí)間戳等技術(shù)實(shí)現(xiàn)了去中心化的數(shù)字貨幣交易系統(tǒng)。隨后萊特幣、達(dá)世幣、未來幣相繼被提出,以數(shù)字貨幣為主的區(qū)塊鏈技術(shù)被稱為區(qū)塊鏈1.0。2013年,Buterin提出了以太坊[2]平臺(tái),實(shí)現(xiàn)了智能合約,智能合約的概念在1994被密碼學(xué)家Nick首次提出,他認(rèn)為智能合約是一段按照事先規(guī)則自動(dòng)執(zhí)行的程序。在以太坊中,將預(yù)先設(shè)定的代碼上傳到區(qū)塊鏈上,當(dāng)向合約地址發(fā)起交易時(shí),合約代碼自動(dòng)執(zhí)行,智能合約也被稱為區(qū)塊鏈2.0。隨著區(qū)塊鏈技術(shù)的不斷發(fā)展,其應(yīng)用領(lǐng)域也逐漸從金融擴(kuò)展到教育,醫(yī)療,物流等領(lǐng)域,該種模式下的區(qū)塊鏈技術(shù)被稱為區(qū)塊鏈3.0。
區(qū)塊鏈3.0的基礎(chǔ)架構(gòu)分為數(shù)據(jù)層,網(wǎng)絡(luò)層,共識(shí)層和應(yīng)用層[3],如圖1所示。
圖1 區(qū)塊鏈3.0基礎(chǔ)架構(gòu)
數(shù)據(jù)層包含了區(qū)塊鏈的基本數(shù)據(jù)結(jié)構(gòu),如區(qū)塊結(jié)構(gòu)和賬本結(jié)構(gòu),區(qū)塊的結(jié)構(gòu)可分為區(qū)塊頭和區(qū)塊體,以比特幣為例,區(qū)塊頭中包含前一區(qū)塊的hash值、時(shí)間戳、Merkel根、隨機(jī)數(shù)nonce值等字段,區(qū)塊體中則包含當(dāng)前系統(tǒng)中未執(zhí)行的交易。區(qū)塊鏈的賬本結(jié)構(gòu)主要為鏈?zhǔn)浇Y(jié)構(gòu),目前也有研究者提出樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)的區(qū)塊鏈賬本結(jié)構(gòu)。
網(wǎng)絡(luò)層主要包含區(qū)塊鏈系統(tǒng)的組網(wǎng)方式和傳播協(xié)議,區(qū)塊鏈系統(tǒng)的節(jié)點(diǎn)具有平等、自治、分布的特點(diǎn),因此,組網(wǎng)方式為對等式網(wǎng)絡(luò)(Peer-topeernetwork,P2P)。對于區(qū)塊消息的傳播,以太坊和比特幣的傳播協(xié)議是基于TCP協(xié)議實(shí)現(xiàn),Hyperledger Fabric則是基于Gossip協(xié)議實(shí)現(xiàn)洪泛傳播。
共識(shí)層主要包含區(qū)塊鏈的共識(shí)協(xié)議,當(dāng)前共識(shí)算法主要分為兩類:證明類和投票類。證明類共識(shí)算法指節(jié)點(diǎn)通過某種方式證明自己具有區(qū)塊的發(fā)布權(quán)。如Po W,PoS等。證明類算法為了抵御女巫攻擊(惡意節(jié)點(diǎn)創(chuàng)造多個(gè)虛假身份),需要設(shè)置一定的證明難度,如在比特幣中,Po W共識(shí)算法需要節(jié)點(diǎn)不停尋找隨機(jī)數(shù)并計(jì)算hash值,當(dāng)hash值滿足系統(tǒng)的難度需求時(shí),則代表該節(jié)點(diǎn)具有當(dāng)前系統(tǒng)的區(qū)塊發(fā)布權(quán)。PoS算法則是節(jié)點(diǎn)證明自己持有的權(quán)益,權(quán)益大的節(jié)點(diǎn)更容易獲得區(qū)塊的發(fā)布權(quán)。投票類共識(shí)算法指備份節(jié)點(diǎn)對主節(jié)點(diǎn)發(fā)起的區(qū)塊進(jìn)行投票,當(dāng)票數(shù)達(dá)到一定閾值時(shí),該區(qū)塊被共識(shí),節(jié)點(diǎn)將該區(qū)塊加入本地區(qū)塊鏈。如Paxos[4],PBFT[5],Raft[6]等。相較于證明類共識(shí)算法,投票類算法的吞吐量更高,但隨著節(jié)點(diǎn)數(shù)目的增多,投票類算法的通信復(fù)雜度提高,存在通信阻塞的問題。
應(yīng)用層為區(qū)塊鏈在具體領(lǐng)域的功能實(shí)現(xiàn),根據(jù)應(yīng)用領(lǐng)域的不同,區(qū)塊鏈可分為公有鏈,聯(lián)盟鏈和私有鏈,公有鏈上的數(shù)據(jù)公開,所有節(jié)點(diǎn)可以隨意進(jìn)出,不適合企業(yè)和監(jiān)管部門使用,私有鏈只保留了區(qū)塊鏈可追溯,難篡改的特點(diǎn),失去了去中心化的特性。因此本模型采用聯(lián)盟鏈形式,企業(yè)和監(jiān)管部門作為共識(shí)節(jié)點(diǎn),分別維護(hù)系統(tǒng)賬本,既避免了中心化,也保證了數(shù)據(jù)的隱私性。
基于區(qū)塊鏈的溯源技術(shù)一直是學(xué)者們研究的熱點(diǎn),如張朝棟等人[7]提出一種基于側(cè)鏈的供應(yīng)鏈溯源系統(tǒng),該系統(tǒng)使用以太坊側(cè)鏈擴(kuò)容技術(shù)部署智能合約,將交易的哈希值同步到以太坊主鏈,但該系統(tǒng)打包使用以太幣,存在代幣價(jià)格不穩(wěn)定的問題。王志燁等人[8]提出一種基于區(qū)塊鏈的農(nóng)產(chǎn)品柔性可信溯源系統(tǒng),并采用“一環(huán)節(jié)一賬本”的系統(tǒng)模式,能夠?qū)ο到y(tǒng)信息動(dòng)態(tài)溯源。陳飛等人[9]提出一種基于區(qū)塊鏈的食品溯源系統(tǒng),并以豬肉供應(yīng)鏈為例分析了溯源流程。禹忠等人[10]基于Fabric平臺(tái)實(shí)現(xiàn)了對藥品的生產(chǎn)信息,物流信息及使用信息的溯源。上述溯源系統(tǒng)都有自身點(diǎn),但均基于已有平臺(tái)構(gòu)建,缺乏對模型整體的設(shè)計(jì),因此,設(shè)計(jì)了基于區(qū)塊鏈溯源模型的整體化架構(gòu)。
主要介紹基于區(qū)塊鏈的供應(yīng)鏈溯源模型的基本結(jié)構(gòu),模型保持傳統(tǒng)區(qū)塊鏈系統(tǒng)的架構(gòu),但在模型的數(shù)據(jù)層使用物聯(lián)網(wǎng)傳感器設(shè)備采集原始數(shù)據(jù),保證了數(shù)據(jù)的可靠性,在共識(shí)層模塊使用改進(jìn)的區(qū)塊鏈共識(shí)算法增加系統(tǒng)吞吐量,在應(yīng)用層實(shí)現(xiàn)了交互功能。溯源模型整體架構(gòu)如圖2所示。
圖2 溯源模型整體架構(gòu)圖
模型的數(shù)據(jù)層主要包含對區(qū)塊的打包上傳和區(qū)塊鏈賬本的存儲(chǔ),本模型在數(shù)據(jù)采集端采用射頻識(shí)別RFID,激光掃描器等設(shè)備對生產(chǎn)、物流等信息進(jìn)行采集,并將數(shù)據(jù)上傳到請求。共識(shí)節(jié)點(diǎn)收到采集端發(fā)來的請求消息,打包處理生成區(qū)塊,當(dāng)區(qū)塊經(jīng)過共識(shí)節(jié)點(diǎn)達(dá)成共識(shí)后,共識(shí)節(jié)點(diǎn)將區(qū)塊加入本地區(qū)塊鏈賬本中。
在本模型中,網(wǎng)絡(luò)成員主要包含數(shù)據(jù)采集端,共識(shí)節(jié)點(diǎn)和用戶終端。數(shù)據(jù)采集端采集原始數(shù)據(jù)并上傳請求到共識(shí)節(jié)點(diǎn),各企業(yè)和監(jiān)管部門作為共識(shí)節(jié)點(diǎn)以P2P組網(wǎng)方式通信并對數(shù)據(jù)信息達(dá)成共識(shí),共識(shí)完成后,將數(shù)據(jù)信息加入本地區(qū)塊鏈。用戶終端對共識(shí)節(jié)點(diǎn)發(fā)起查詢請求,節(jié)點(diǎn)返回響應(yīng)結(jié)果,溯源模型的網(wǎng)絡(luò)拓?fù)鋱D如圖3所示。
圖3 溯源模型網(wǎng)絡(luò)拓?fù)鋱D
共識(shí)算法是區(qū)塊鏈的核心,本模型對PBFT算法進(jìn)行優(yōu)化,通過多節(jié)點(diǎn)并行打包生成交易塊,主節(jié)點(diǎn)生成聚合塊并打包交易塊的摘要,通過共識(shí)聚合塊來完成多個(gè)交易塊的確認(rèn)階段,相比較PBFT,在共識(shí)相同區(qū)塊的情況下,該算法減少了節(jié)點(diǎn)間通信次數(shù),增加了系統(tǒng)吞吐量,共識(shí)流程如圖4所示。
圖4 共識(shí)流程圖
1)預(yù)提議階段:各節(jié)點(diǎn)將打包好的交易信息生成交易塊,并發(fā)送預(yù)提議消息給其他節(jié)點(diǎn)。
2)提議階段:所有節(jié)點(diǎn)接收來自不同節(jié)點(diǎn)的預(yù)提議消息,驗(yàn)證有效性,驗(yàn)證通過后生成提議消息并廣播給所有節(jié)點(diǎn),與此同時(shí),所有節(jié)點(diǎn)收集來自不同節(jié)點(diǎn)的具有相同輪數(shù)和視圖的提議消息,如果收集2f+1個(gè)(包含自己),則將該交易塊標(biāo)記為proposed。
3)預(yù)準(zhǔn)備階段:主節(jié)點(diǎn)將所有標(biāo)記為proposed的事務(wù)塊的hash值打包生成聚合塊,并將聚合塊包含在預(yù)準(zhǔn)備消息中發(fā)送給其他備份節(jié)點(diǎn)。
4)準(zhǔn)備階段:所有備份節(jié)點(diǎn)接收主節(jié)點(diǎn)發(fā)送的預(yù)準(zhǔn)備消息后,驗(yàn)證有效性,驗(yàn)證通過后,生成準(zhǔn)備消息并廣播給所有節(jié)點(diǎn),與此同時(shí),節(jié)點(diǎn)收集來自不同節(jié)點(diǎn)的具有相同輪數(shù)和視圖的準(zhǔn)備消息,如果收集2f+1個(gè)(包含自己),則將該聚合塊標(biāo)記為prepared,并進(jìn)入確認(rèn)階段。
5)確認(rèn)階段:所有節(jié)點(diǎn)進(jìn)入確認(rèn)階段后,發(fā)送確認(rèn)消息,與此同時(shí),收集來自其他節(jié)點(diǎn)的具有相同輪數(shù)和視圖的確認(rèn)消息,若收集2f+1個(gè),則將聚合塊標(biāo)記為committed,并將聚合塊和其包含的交易塊加入本地區(qū)塊鏈末端。
應(yīng)用層主要實(shí)現(xiàn)與終端用戶的交互,如終端用戶查詢當(dāng)前區(qū)塊鏈賬本狀態(tài),或?qū)μ囟ㄉ唐匪菰吹取?shí)現(xiàn)方式為終端用戶向服務(wù)端發(fā)送請求,服務(wù)端返回響應(yīng)結(jié)果。
基于上述模型使用go編程語言實(shí)現(xiàn)溯源系統(tǒng),模擬實(shí)驗(yàn)為在本地開啟4個(gè)端口分別代表生產(chǎn)商、運(yùn)輸商、銷售商和監(jiān)管部門并作為共識(shí)節(jié)點(diǎn)和服務(wù)端節(jié)點(diǎn),采集端以水果供應(yīng)數(shù)據(jù)信息為例上傳請求數(shù)據(jù)信息。實(shí)驗(yàn)使用postman軟件測試,postman是一個(gè)可以模擬客戶端發(fā)送http請求的接口測試工具。在實(shí)驗(yàn)中,待共識(shí)節(jié)點(diǎn)達(dá)成共識(shí)后,使用postman向服務(wù)端端口發(fā)送查詢區(qū)塊鏈狀態(tài)請求,服務(wù)端返回當(dāng)前區(qū)塊鏈賬本的所有區(qū)塊狀態(tài),響應(yīng)結(jié)果如圖5所示。
圖5 區(qū)塊鏈賬本狀態(tài)
從圖5中可以看到當(dāng)前區(qū)塊鏈賬本中聚合塊的區(qū)塊體中包含交易塊的hash值,交易塊的區(qū)塊體中則包含采集端上傳的交易數(shù)據(jù)信息,這表明溯源系統(tǒng)實(shí)現(xiàn)了對交易塊和聚合塊的共識(shí)以及上鏈存儲(chǔ)功能。
測試對某一交易數(shù)據(jù)進(jìn)行溯源,選擇其中一條交易,如{"data":{"name":"橘子","date":"2021-12-04 20:25:47","starting":"杭州市","destination":" 合 肥 市"}," Digest":"43fb3804b1ecc96f0d5adf2f8c93f44a770b453a734f5fde3 ff9b7560ace38a8"}其中Digest字段為該交易唯一摘要,向服務(wù)端發(fā)送post請求,請求body中包含該摘要43fb3804b1ecc96f0d5adf2f8c93f44a770b453a734f5fde3ff 9b7560ace38a8,服務(wù)端返回該摘要對應(yīng)交易信息,如圖6所示。
圖6 唯一摘要溯源結(jié)果
從圖6中可以看出,服務(wù)端根據(jù)客戶端發(fā)來的包含指定唯一摘要的請求,返回該摘要對應(yīng)的數(shù)據(jù)信息,且該數(shù)據(jù)信息存儲(chǔ)在鏈上,表明系統(tǒng)實(shí)現(xiàn)了對特定數(shù)據(jù)信息的溯源追蹤。
為了解決了傳統(tǒng)供應(yīng)鏈溯源存在數(shù)據(jù)易篡改,不完善等問題,提出一種基于區(qū)塊鏈技術(shù)的供應(yīng)鏈溯源模型,模型包含數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層和應(yīng)用層整體化架構(gòu),基于該模型以水果商品為例實(shí)現(xiàn)了供應(yīng)鏈溯源系統(tǒng),實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)能夠?qū)?yīng)鏈過程的數(shù)據(jù)信息進(jìn)行去中心化存儲(chǔ)和可信溯源。在后續(xù)的工作中,我們將優(yōu)化模型細(xì)節(jié),實(shí)現(xiàn)更多功能。