劉雙印 雷墨鹥兮 徐龍琴 李景彬 孫傳恒 楊信廷
(1.仲愷農(nóng)業(yè)工程學院智慧農(nóng)業(yè)創(chuàng)新研究院,廣州 510225;2.廣東省高校智慧農(nóng)業(yè)工程技術(shù)研究中心,廣州 510225;3.石河子大學機械電氣工程學院,石河子 832003;4.國家農(nóng)業(yè)信息化工程技術(shù)研究中心,北京 100097)
近年來,農(nóng)產(chǎn)品質(zhì)量安全問題頻發(fā),各國政府高度關(guān)注,并出臺系列法律法規(guī)以保障農(nóng)產(chǎn)品質(zhì)量安全[1-3]。各國政府、高校科研院所和企業(yè)采用條形碼、射頻識別、二維碼、產(chǎn)品電子代碼、物聯(lián)網(wǎng)、云計算等技術(shù)等構(gòu)建系列的農(nóng)產(chǎn)品質(zhì)量安全溯源系統(tǒng)[4-8],并在水產(chǎn)品、蔬菜、畜禽肉蛋類、糧油、水果等領(lǐng)域得到廣泛應用,取得一些成效[9-10]。但因農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈具有產(chǎn)業(yè)鏈長、參與主體多、涉及面廣、環(huán)節(jié)復雜、周期長、信息多源異構(gòu)等特性,再加上傳統(tǒng)的溯源系統(tǒng)多采用數(shù)據(jù)中心化存儲,各自管理,尤其是農(nóng)產(chǎn)品質(zhì)量高附加值信息被選擇性公開,使現(xiàn)有溯源系統(tǒng)存在共享性差、數(shù)據(jù)易篡改、信息不透明和不對稱、數(shù)據(jù)可信任性差等問題,導致農(nóng)產(chǎn)品質(zhì)量安全事件仍多發(fā)[11]。因此,為解決上述問題,研究先進的溯源技術(shù)及其系統(tǒng)對保障農(nóng)產(chǎn)品質(zhì)量安全具有重要的研究價值。
區(qū)塊鏈是一種分布式賬本技術(shù),具有去中心化、不可篡改、成本低、可追溯、安全可靠等特征[12-15]。一些國內(nèi)外學者研究將區(qū)塊鏈技術(shù)應用在農(nóng)產(chǎn)品質(zhì)量安全溯源領(lǐng)域,文獻[16]提出了一種統(tǒng)一的食品本體論,該理論可提高全球食品可追溯性、質(zhì)量控制和數(shù)據(jù)整合,它是一個由聯(lián)盟驅(qū)動的項目,為建立一個全面的、容易獲得的全球農(nóng)場,它準確且一致地描述了常見的食物。文獻[17]采用區(qū)塊鏈技術(shù)構(gòu)建了糧油食品供應鏈信息安全管理模型,并通過雙模數(shù)據(jù)存儲機制和基于智能合約的供應鏈信息管理,實現(xiàn)了信息存儲與傳輸安全可信。文獻[18]提出了“數(shù)據(jù)庫+區(qū)塊鏈”的鏈上鏈下追溯信息雙存儲模型,通過Hyperledger Fabric設計了區(qū)塊鏈農(nóng)產(chǎn)品追溯信息存儲模型和查詢方法,實現(xiàn)了農(nóng)產(chǎn)品追溯信息高效存儲和快速查詢。文獻[19]采用基于危害因子的食品風險評估和區(qū)塊鏈溯源技術(shù)構(gòu)建了食品質(zhì)量安全管理系統(tǒng),實現(xiàn)了大米質(zhì)量安全管控。文獻[20]設計了一個旨在為養(yǎng)魚戶提供安全的存儲空間,以保存大量不能被篡改的農(nóng)業(yè)數(shù)據(jù)平臺,實現(xiàn)了使用智能契約來自動完成養(yǎng)魚的不同過程,減少了錯誤操作。文獻[21]提出了一種利用區(qū)塊鏈和智能合約有效地執(zhí)行商業(yè)交易,以實現(xiàn)整個農(nóng)業(yè)的大豆跟蹤和可追溯所有信息供應鏈,該方案以高完整性提高效率和安全性,實現(xiàn)了為用戶提供高透明度和可追溯性的供應鏈生態(tài)系統(tǒng)。上述研究采用區(qū)塊鏈技術(shù)實現(xiàn)質(zhì)量安全溯源,一定程度上解決了傳統(tǒng)溯源系統(tǒng)的問題,但存在數(shù)據(jù)存儲壓力大和查詢效率低等問題,尤其是隨著農(nóng)產(chǎn)品產(chǎn)業(yè)鏈節(jié)點拓展和數(shù)據(jù)劇增,溯源系統(tǒng)負荷壓力將增大。
本文首先對農(nóng)產(chǎn)品溯源信息雙鏈存儲模式和智能合約進行設計,然后采用聯(lián)盟區(qū)塊鏈技術(shù)構(gòu)建從田間到餐桌的農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈質(zhì)量安全可信溯源系統(tǒng),以期為農(nóng)產(chǎn)品質(zhì)量安全管控提供技術(shù)支撐。
農(nóng)產(chǎn)品產(chǎn)前、產(chǎn)中和產(chǎn)后等全產(chǎn)業(yè)鏈涉及的活動主體主要有:育種企業(yè)、生產(chǎn)資料企業(yè)(生產(chǎn)化肥、農(nóng)藥等)、種養(yǎng)殖企業(yè)、加工企業(yè)、倉儲企業(yè)、物流企業(yè)、分銷商、零售商和消費者,其關(guān)鍵控制節(jié)點主要有種苗、種植、收獲、加工、倉儲、冷鏈物流、質(zhì)檢、銷售、消費等環(huán)節(jié)。各節(jié)點的信息主要包括種苗信息(種子編號、種子名稱、所屬品種、來源)、環(huán)境信息(土壤、水質(zhì)、氣象等多參數(shù))、投入品信息(投入品編號、名稱、成分含量、投入量和庫存量、來源、購買人、使用人)、檢驗檢疫信息(重金屬類別及含量、農(nóng)藥類別及殘留含量、微生物類別及含量、檢測檢驗方式、農(nóng)產(chǎn)品品質(zhì)量等級、檢驗人、檢驗單位)、控制信息(溫度、光照強度、濕度、投入品配比等技術(shù)指標)、資質(zhì)管理(企業(yè)資質(zhì)、管理制度、執(zhí)行標準)、人員信息(人員ID、姓名、工種類別、聯(lián)系方式、所學專業(yè)等)、地塊等其他信息(地塊編號、時間、生產(chǎn)批次、土壤關(guān)鍵指標等)等[22]。由上可知,農(nóng)產(chǎn)品產(chǎn)業(yè)鏈參與的主體眾多,涉及節(jié)點多且各節(jié)點信息化水平參差不齊,缺乏統(tǒng)一的數(shù)據(jù)接口、標準規(guī)范和業(yè)務集成,形成諸多各自管理的“數(shù)據(jù)孤島”,嚴重制約農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈質(zhì)量安全有效監(jiān)管和可信溯源[23-24]。
1.2.1農(nóng)產(chǎn)品可信溯源區(qū)塊模型結(jié)構(gòu)
區(qū)塊是區(qū)塊鏈存儲交易信息的鏈式數(shù)據(jù)結(jié)構(gòu),由區(qū)塊頭和區(qū)塊體兩部分組成,通過區(qū)塊頭中父區(qū)塊頭Hash值按時序排列將相鄰區(qū)塊首尾連接組成區(qū)塊鏈[25-26],其區(qū)塊結(jié)構(gòu)如圖1所示。采用哈希算法對區(qū)塊體存儲的農(nóng)產(chǎn)品產(chǎn)業(yè)鏈各參與主體的交易關(guān)鍵數(shù)據(jù)加密成不可逆轉(zhuǎn)的Hash值[27],并作為Merkle樹葉子節(jié)點,將兩兩葉子逐層遞歸哈希計算,生成區(qū)塊頭的Merkle樹根節(jié)點[28]。區(qū)塊通過Merkle樹特性、時間戳、版本號、區(qū)塊復雜度、數(shù)字簽名等措施[29-30],確保農(nóng)產(chǎn)品溯源信息難以篡改[31],若某節(jié)點篡改溯源關(guān)鍵數(shù)據(jù),通過區(qū)塊Hash值比對,可快速追蹤該節(jié)點,從而保障了農(nóng)產(chǎn)品溯源系統(tǒng)數(shù)據(jù)不可偽造、安全可信[32-34]。

圖1 區(qū)塊鏈式結(jié)構(gòu)圖Fig.1 Structure diagram of blockchain
1.2.2“On-Chain+Off-Chain”雙模式存儲策略
農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈具有參與主體節(jié)點多、產(chǎn)業(yè)鏈長、涉及范圍廣、數(shù)據(jù)量大且多源異構(gòu)等特征[35],在農(nóng)產(chǎn)品溯源過程中,隨著節(jié)點增加和數(shù)據(jù)量增大,若每次都把各節(jié)點所有數(shù)據(jù)全部上傳到區(qū)塊鏈網(wǎng)絡中,不僅上傳速度慢還易造成網(wǎng)絡阻塞,導致區(qū)塊鏈網(wǎng)絡中各節(jié)點數(shù)據(jù)存儲壓力大,查詢效率低,數(shù)據(jù)安全隱患大,還對數(shù)據(jù)存儲系統(tǒng)的設備性能和投入成本都提出較高要求,影響了基于區(qū)塊鏈的溯源系統(tǒng)的實施[36-37]。鏈上存儲的主要壓力如表1所示。
為此,本文提出了“On-Chain+Off-Chain”農(nóng)產(chǎn)品質(zhì)量安全溯源信息協(xié)同管理存儲策略,其基本思想為:首先對農(nóng)產(chǎn)品產(chǎn)業(yè)鏈各節(jié)點產(chǎn)出的數(shù)據(jù)進行標準化和規(guī)范化;其次采用智能合約對各節(jié)點規(guī)范化后的詳細數(shù)據(jù)進行驗證,把通過驗證的大部分農(nóng)產(chǎn)品產(chǎn)業(yè)鏈數(shù)據(jù)和區(qū)塊鏈位置信息存儲在本地或云服務器上的關(guān)系型和非關(guān)系型數(shù)據(jù)庫中;然后將農(nóng)產(chǎn)品溯源關(guān)鍵信息使用MD5對局部數(shù)據(jù)(圖像、視頻等)和持有人簽名一起計算上鏈,并在鏈下建立索引,在鏈上僅進行Key-Value的精準讀寫。同時為了保證智能合約的隱私性,在必要的情況下智能合約也可以采用鏈下存儲,使用計算節(jié)點進行合約的計算記錄,共識節(jié)點記錄合約的狀態(tài)記錄;最后,對于鏈下的溯源數(shù)據(jù)的存儲要盡可能地詳盡,鏈上經(jīng)哈希算法計算過的數(shù)據(jù)要盡可能地精簡,上鏈的數(shù)據(jù)一定是需要經(jīng)過共識的,因此該“On-Chain+Off-Chain”協(xié)同管理存儲策略能很靈活地應對網(wǎng)絡擁塞、傳輸時延等的影響。對于鏈上數(shù)據(jù)的快速查詢達到了效率、成本以及隱私安全的平衡。設計的農(nóng)產(chǎn)品質(zhì)量安全溯源信息協(xié)同管理存儲模型如圖2所示。

表1 鏈上存儲數(shù)據(jù)開銷與效率Tab.1 Analysis of cost and efficiency within storing data on chain

圖2 農(nóng)產(chǎn)品質(zhì)量安全區(qū)塊溯源信息協(xié)同管理存儲模型Fig.2 Cooperative management and storage model of block traceability information for agricultural product quality and safety
鏈下存儲的數(shù)據(jù)為當前區(qū)塊高度、當前Hash值、溯源碼,溯源碼則包含了農(nóng)產(chǎn)品從出產(chǎn)到銷售整個流程的信息,也稱為二維碼溯源,如產(chǎn)品介紹、溯源信息、食品安全、企業(yè)信息以及信息防偽等各項數(shù)據(jù)的Hash值。當前Hash值是集當前的版本號(Version)、前區(qū)塊Hash值(Previews Hash)、時間戳(Timestamp)、隨機數(shù)(Nonce)以及默克爾樹(Merkle Tree)所包含所有事務的Hash值(Merkle Hash)等各項信息經(jīng)MD5哈希算法處理之后得到的結(jié)果。鏈下存儲著由鏈上數(shù)據(jù)共同參與哈希計算產(chǎn)生的Hash值,鏈上分布式賬本記錄著所有的原始數(shù)據(jù),塊與塊相連接,每一塊的當前Hash值都有前一區(qū)塊的Hash值參與計算完成,默克爾樹的根Hash值無法篡改,得到的鏈下數(shù)據(jù)的上鏈情況如表2所示。

表2 上鏈數(shù)據(jù)Tab.2 On-chain data
1.2.3農(nóng)產(chǎn)品產(chǎn)業(yè)鏈共識機制
共識算法是區(qū)塊鏈去中心化的核心要素,影響區(qū)塊鏈系統(tǒng)的執(zhí)行效率[38-39]。公有鏈共識算法主要依靠計算機算力完成共識機制,存在計算資源浪費問題[40]。私有鏈共識機制主要應用于企業(yè)內(nèi)部,常采用傳統(tǒng)分布式一致性算法完成共識操作,不適于多主體參與的農(nóng)產(chǎn)品質(zhì)量安全溯源領(lǐng)域[41-42]。而聯(lián)盟鏈網(wǎng)絡由通過授權(quán)的聯(lián)盟成員共同維護,常采用Kafka共識模式[43]或者實用拜占庭容錯算法[44](Practical Byzantine fault tolerance,PBFT)。
Fabric區(qū)塊鏈的共識過程包括3個階段:背書、排序和校驗,背書(Endorsement)階段是背書節(jié)點對客戶端發(fā)來的事務進行合法性校驗,背書節(jié)點模擬并簽署提案書,對結(jié)果作出批準或拒絕響應,根據(jù)設定的背書邏輯判斷是否支持該交易,如果背書邏輯決定支持交易,會把交易簽名后發(fā)回給客戶端。背書節(jié)點和提交節(jié)點之間有重疊,背書節(jié)點作為一種特殊的提交節(jié)點,它們必須持有智能合約,每個背書節(jié)點通過在其模擬環(huán)境中調(diào)用智能合同,用來接收并執(zhí)行交易建議,這樣的模擬交易結(jié)果不會更新到分類賬中,而是由背書節(jié)點將模擬結(jié)果捕獲到一組特定的讀寫數(shù)據(jù)集(ReadWrite set,RW set)中。讀取數(shù)據(jù)以捕獲當前狀態(tài)的最新讀寫集(RW set),保存模擬事務寫入數(shù)據(jù)時將寫入世界狀態(tài),背書節(jié)點在這些RW集上提供簽名,然后將其返回給客戶端應用程序。排序(Ordering)階段是排序節(jié)點接受背書節(jié)點返回的所有交易并對這些交易進行排序的過程,排序服務是共識機制中重要的一環(huán),所有交易通過Kafka機制排序服務進行排序才可以達成全網(wǎng)共識,客戶端應用程序?qū)σ押灻哪M事務結(jié)果進行打包,然后將該事務連同RW集一起提交給排序節(jié)點。當網(wǎng)絡對提交的事務達成共識時,此事務將被打包成一個塊,并將其交付給所有提交節(jié)點進行驗證。驗證(Validation)階段是由排序節(jié)點與提交節(jié)點共同完成的,每個提交節(jié)點都會驗證交易程序通過檢查這些RW集是否與當前世界狀態(tài)相匹配,交易的RW集是否符合多版本并發(fā)控制[45](Multiversion concurrency control,MVCC)的校驗等。一旦交易驗證,即可將其寫入分類賬中,并根據(jù)RW集設置更新世界狀態(tài)寫入數(shù)據(jù)。最后,這些提交節(jié)點生成異步消息以通知客戶端所提交的事務是否已成功執(zhí)行。整個事務的合約過程都由共識機制強制參與執(zhí)行,每當事件發(fā)生時,客戶端應用程序就可以訂閱每個提交節(jié)點的事件通知。Fabric利用Kafka對交易信息進行排序處理,為實時數(shù)據(jù)提供統(tǒng)一的、高吞吐量、低延時的處理能力,并且在集群內(nèi)部支持節(jié)點故障容錯;PBFT解決拜占庭將軍問題,但需要O(N2)時間復雜度(N表示同一消息共識次數(shù))的網(wǎng)絡通信才能完成n個網(wǎng)絡節(jié)點共識,導致網(wǎng)絡帶寬壓力大,影響算法共識效率。圖3為基于聯(lián)盟鏈共識機制設計的農(nóng)產(chǎn)品溯源共識機制原理。

圖3 農(nóng)產(chǎn)品溯源共識機制Fig.3 Consensus mechanism of agricultural product traceability
1.2.4農(nóng)產(chǎn)品產(chǎn)業(yè)鏈智能合約機制
智能合約是一種具有確定性、自校驗、自治化、去中心化、自動執(zhí)行、不可篡改等特點,能執(zhí)行合同條款的可計算的計算機協(xié)議[46-48]。智能合約根據(jù)事先預置好和可自動執(zhí)行的合約條款及業(yè)務邏輯機制,就可以為區(qū)塊鏈網(wǎng)絡中各節(jié)點活動主體提供數(shù)據(jù)交互、防篡改的交易記錄、價值轉(zhuǎn)移、關(guān)鍵數(shù)據(jù)上鏈存儲等功能,也是在區(qū)塊鏈網(wǎng)絡上實施更加靈活、更細粒度的訪問控制機制[49-51]。本系統(tǒng)以Hyperledger Fabric[52]為區(qū)塊鏈開發(fā)平臺,結(jié)合國家食品安全法規(guī)、行業(yè)標準,領(lǐng)域?qū)<医?jīng)驗等,制定農(nóng)產(chǎn)品質(zhì)量安全溯源智能合約規(guī)則集和合約觸發(fā)條件,通過編寫的智能合約,實時驗證擬上鏈的合約數(shù)據(jù)、監(jiān)控區(qū)塊鏈網(wǎng)絡上的交易信息,實現(xiàn)對農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈各環(huán)節(jié)產(chǎn)品精準管控,為農(nóng)產(chǎn)品生產(chǎn)企業(yè)優(yōu)化生產(chǎn)工藝、保障產(chǎn)品質(zhì)量和提高企業(yè)品牌提供技術(shù)支撐;同時也為廣大消費者和農(nóng)產(chǎn)品質(zhì)量安全檢測部門提供可信溯源信息。系統(tǒng)智能合約使用標準編程語言編寫,但不能直接訪問分類帳狀態(tài),而且它們在容器環(huán)境中運行以進行隔離。系統(tǒng)中智能合約主要體現(xiàn)在3方面:①對上鏈數(shù)據(jù)的驗證及維護,智能合約以編程方式訪問分類帳的兩個不同的部分,一個不可更改地記錄所有交易歷史的區(qū)塊鏈,以及一個持有當前這些狀態(tài)值的世界狀態(tài)。所以上鏈的數(shù)據(jù)經(jīng)過驗證之后不能更改,賬本狀態(tài)會記錄所有的寫入操作。智能合約打包并部署到區(qū)塊鏈網(wǎng)絡中,可以在同一包內(nèi)定義多個智能合約,一旦合約部署完成,包內(nèi)的所有智能合約都可提供給應用程序。因為智能合約是允許多步驟流程自動化的腳本,其操控的分散應用程序可完全按照代碼條件觸發(fā),所以不會有任何審查、欺騙或宕機的風險。②對銷售商品的賠付方面,在農(nóng)產(chǎn)品從生產(chǎn)到銷售的過程中需要經(jīng)歷各個階段的合作加工處理過程,一旦其中某個環(huán)節(jié)出現(xiàn)問題,智能合約會根據(jù)事先約定的情況對出現(xiàn)的損失進行賠付,而不需要人為地計算損失與懲罰,這樣既節(jié)省了成本也提高了效率。③對該“On-Chain+Off-Chain”協(xié)同管理存儲策略的保護措施,外部應用程序會與智能合約在區(qū)塊鏈網(wǎng)絡上進行交互執(zhí)行操作,由于區(qū)塊鏈包含不可變記錄,以反映這些操作產(chǎn)生的更改,所以“On-Chain+Off-Chain”協(xié)同管理存儲策略可以支持最新的緩存信息,且對于數(shù)據(jù)的檢索更加快速便捷,因此對于沒有授權(quán)的應用程序開發(fā)人員則無法選擇或修改驗證階段進行評估認可策略,在最終系統(tǒng)審計過程中,背書策略作為系統(tǒng)中事務驗證的靜態(tài)庫執(zhí)行操作,只能通過鏈碼實行參數(shù)化,之后將分類帳更新結(jié)果作為響應返回到外部應用程序,因此可以保證用戶和數(shù)據(jù)的安全。其農(nóng)產(chǎn)品溯源智能合約如圖4所示。

圖4 農(nóng)產(chǎn)品溯源智能合約Fig.4 Smart contract of agricultural product traceability
列出系統(tǒng)兩個合約執(zhí)行的算法邏輯(Query與Compare),即用戶掃描溯源碼得到溯源碼內(nèi)的信息,這些數(shù)據(jù)信息都來自以上鏈的信息。其中塊與塊相連接,每一塊上存有大量事務,每個事務都有唯一標示ID,以及有上鏈的時間戳共同參與哈希計算,當鏈上返回的原始數(shù)據(jù)經(jīng)過哈希計算后得到的字符串與本地數(shù)據(jù)庫存儲的字符串相匹配,合約自動執(zhí)行對比邏輯進行數(shù)據(jù)調(diào)取,當tx.ID1==tx.ID2成立時,查詢成功,否則合約調(diào)用失敗,云端數(shù)據(jù)庫返回源數(shù)據(jù)不成功,查詢失敗。兩個合約如下:
合約1:Query
1.Contract Simplequery(off_infm)
2.var buffer bytes.Buffer
3.while(PreviousHash!=NULL){
4. hash := sha256.Sum256(buffer.Bytes(off_infm))
5. if(hash in PreviousHash.select) :
6. tx.ID1 = hash[:]∥從鏈下數(shù)據(jù)計算得到的Hash值中取ID
7.PreviousHash=PreviousHash.next}
8.returntx.ID1
合約2:Compare
1.Contract Simplecompare(tx.ID,on_infm)
2.while(PreviousHash!=NULL){
3. if(on_infm==hash):
4. tx.ID2 = on_infm[:]
5. if(tx.ID1==tx.ID2)
6. fmt.Println(off_infm)
7.return true}∥查詢成功!
以農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈分析和企業(yè)溯源需求為基礎(chǔ),對農(nóng)產(chǎn)品溯源各環(huán)節(jié)數(shù)據(jù)進行梳理分析、歸納合并,并以“高內(nèi)聚、低耦合”的現(xiàn)代軟件工程思想進行系統(tǒng)功能劃分。該系統(tǒng)由我的農(nóng)場、基地管理、生產(chǎn)操作、作物追溯、系統(tǒng)設置、大數(shù)據(jù)分析共6大功能模塊組成,每個功能模塊又由多個子功能構(gòu)成,實現(xiàn)農(nóng)產(chǎn)品從農(nóng)田到餐桌可信溯源。其系統(tǒng)功能模塊如圖5所示。

圖5 系統(tǒng)功能模塊Fig.5 Diagram of system function module
結(jié)合農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈產(chǎn)前、產(chǎn)中和產(chǎn)后企業(yè)的實際生產(chǎn)過程和農(nóng)產(chǎn)品可信溯源的需求,設計的系統(tǒng)整體架構(gòu)如圖6所示。該系統(tǒng)架構(gòu)主要由數(shù)據(jù)采集層、數(shù)據(jù)存儲層、服務管理層、接口層、業(yè)務邏輯層、用戶層等6層組成。
數(shù)據(jù)采集層主要采用物聯(lián)網(wǎng)系統(tǒng)、多參數(shù)智能傳感器、分析儀等設備在線或離線采集農(nóng)產(chǎn)品產(chǎn)業(yè)鏈各節(jié)點的數(shù)據(jù),并通過無線傳感器網(wǎng)絡、4G/5G、LoRa、WIFI等網(wǎng)絡把數(shù)據(jù)傳輸?shù)綌?shù)據(jù)存儲層。
數(shù)據(jù)存儲層采用鏈上和鏈下雙存儲模式存放所有數(shù)據(jù),首先對數(shù)據(jù)進行清洗、轉(zhuǎn)化、融合等預處理,然后把通過智能合約和共識機制驗證的溯源關(guān)鍵數(shù)據(jù)、分布式賬本、時間戳、數(shù)字簽名、區(qū)塊頭Hash值等信息上鏈存儲到聯(lián)盟區(qū)塊鏈網(wǎng)絡中,該鏈上數(shù)據(jù)可通過不同身份驗證和訪問權(quán)限查看不同數(shù)據(jù);將通過智能合約的各節(jié)點大量的數(shù)據(jù)和區(qū)塊鏈網(wǎng)絡映射關(guān)系都存儲到鏈下關(guān)系型和非關(guān)系型數(shù)據(jù)庫中,這種鏈上和鏈下雙存儲模式可有效提高存儲效率及保障數(shù)據(jù)安全可靠。

圖6 農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)架構(gòu)Fig.6 Architecture diagram of reliable traceability system for agricultural product quality safety
服務管理層主要包括安全服務體系、分布式賬本、資源管理服務3部分,其中安全服務體系負責管理整個系統(tǒng)的賬號、密鑰、認證、權(quán)限、簽名、共識算法、合約等信息;分布式賬本負責管理所有交易記錄、數(shù)據(jù)共識、智能合約,登記和交換實體或虛擬的資產(chǎn)等;資源管理服務負責系統(tǒng)算法庫、農(nóng)產(chǎn)品質(zhì)量安全法律法規(guī)庫、農(nóng)產(chǎn)品行業(yè)標準庫、規(guī)則庫、專家知識庫、編碼規(guī)則與管理、邊緣計算設備、虛擬機和容器等通過API 應用接口,支持業(yè)務邏輯層的功能應用。
業(yè)務邏輯層主要負責整個溯源系統(tǒng)的數(shù)據(jù)采集、溯源信息查詢、大數(shù)據(jù)統(tǒng)計分析、區(qū)塊鏈管理、溯源編碼等業(yè)務功能,為企業(yè)、質(zhì)檢部門、監(jiān)管部門和消費者提供真實可靠的溯源信息和決策支持。
在實現(xiàn)了上述溯源系統(tǒng)設計的基礎(chǔ)上,需要將溯源信息清晰地呈現(xiàn)給企業(yè)、質(zhì)檢部門、監(jiān)管部門以及消費者,因此該系統(tǒng)還需能夠快速檢索到鏈上所存儲的溯源信息。
存儲溯源信息時,客戶端SDK將農(nóng)產(chǎn)品生產(chǎn)、加工、運輸、包裝和銷售等信息通過invoke函數(shù)發(fā)送到背書節(jié)點(Endorser Peer),背書節(jié)點將與鏈碼(Chain Code)實例通信,并為其提供模擬的世界狀態(tài)(World State)讀寫集,即鏈碼會執(zhí)行完溯源信息查詢的邏輯任務,但并不會在執(zhí)行參數(shù)時將模擬得到的讀寫集寫入數(shù)據(jù)庫,然后由排序節(jié)點對溯源信息進行排序打包入塊,最終由提交節(jié)點進行驗證并提交至賬本更新狀態(tài)數(shù)據(jù)集;查詢溯源信息時,以ID標示碼為 key 值查詢賬本記錄,通過檢索key值來依次遍歷區(qū)塊,索引的value值為溯源信息的Hash值,有時會多次檢索key值,鍵-值引入鍵值的版本號加以標識,版本由塊序列號和事務(存儲條目)的序列號組成,因此該版本獨特且單調(diào)遞增,每次對同一個key值進行寫入操作時其版本號(version)都會遞增,遍歷過程中以version的最大值為標準查詢。同時,溯源信息與對應的區(qū)塊號存儲在本地數(shù)據(jù)庫,即在查詢時將鏈上、鏈下兩次得到的Hash值進行對比以驗證溯源數(shù)據(jù)是否被篡改。對應的合約執(zhí)行解析區(qū)塊信息如下
合約3:Parsing
1.contract parsing()
2.var (
3. block_height int
4. recorded_block_height int
5. block_seq int
6. )∥定義變量
7.Set max_block_height := retrieve block_height from the ledger
8.Set current_block_height := recorded_block_height
9.If current_block_height 10.For block_seq in (current_block_height,max_block_height): 11. Set recorded_block_height := block_seq∥解析區(qū)塊序號得到key-value 12.parsing blocks 基于區(qū)塊鏈的農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)采用多層的瀏覽器/服務器結(jié)構(gòu),由客戶端、服務器和數(shù)據(jù)庫構(gòu)成。其軟件開發(fā)環(huán)境為區(qū)塊鏈平臺Hyperledger Fabric,操作系統(tǒng)Ubuntu 16.04,應用容器引擎Docker 18.09、開發(fā)語言Go、Java、JavaScript、HTML和CSS,開發(fā)框架Node.js和Bootstrap,數(shù)據(jù)庫服務器CouchDB、LevelDB、MySQL,其中CouchDB和LevelDB為鏈上分布式存儲的數(shù)據(jù)庫,MySQL為鏈下存儲數(shù)據(jù)庫等。硬件環(huán)境:內(nèi)存8 GB、硬盤容量500 GB、帶寬10 Mb/s。Fabric聯(lián)盟區(qū)塊鏈使用Kubernetes集群服務,由1個命令行接口(CLI)節(jié)點、3個控制器節(jié)點、1個負載平衡器、1個網(wǎng)絡文件系統(tǒng)(NFS)節(jié)點和多個工作節(jié)點組成,每個節(jié)點都在Ubuntu 16.04虛擬機上運行,Kubernetes集群的控制器節(jié)點負責調(diào)度,對等節(jié)點和排序節(jié)點由Kubernetes調(diào)度程序以循環(huán)的方式部署在工作節(jié)點上,以實現(xiàn)分布式存儲、防篡改和農(nóng)產(chǎn)品質(zhì)量安全可信溯源的目的。 在基于Hyperledger Fabric開發(fā)平臺中,賬本(Ledger)作為系統(tǒng)文件記錄著數(shù)據(jù)的更新,由狀態(tài)數(shù)據(jù)庫(StateDB)維護著真實世界狀態(tài)(World State),其中StateDB就包括LevelDB和 CouchDB。其中區(qū)塊鏈網(wǎng)絡主要由許多對等點組成,其中還包含了向分類帳寫入鏈上的多個智能合約。區(qū)塊鏈是一個不斷增長的記錄列表,稱為塊。實際上,塊包含先前塊的Hash值、時間戳、事務數(shù)據(jù)和一些其他信息。除非打破散列Hash值,否則不可能篡改分類帳數(shù)據(jù),因為分類帳上的所有事務都是按順序并加密鏈接在一起的。區(qū)塊鏈網(wǎng)絡中的數(shù)據(jù)存儲可以是本地數(shù)據(jù)庫或云存儲數(shù)據(jù)庫,例如關(guān)于茶場的信息(茶場情況、用戶簡介、設備概況、來自傳感器的環(huán)境數(shù)據(jù)以及執(zhí)行器的控制參數(shù)等)。最終用戶可以通過各種終端設備讀取區(qū)塊鏈網(wǎng)絡或?qū)?shù)據(jù)寫入?yún)^(qū)塊鏈網(wǎng)絡。 該系統(tǒng)從用戶使用的角度分為管理端、客戶端和移動端3個子系統(tǒng),其中管理端是對系統(tǒng)進行管理和運維,管理端控制了客戶端和移動端的數(shù)據(jù)連接,移動端是消費者查詢農(nóng)產(chǎn)品溯源信息子系統(tǒng),提供了以應用程序接口控制用戶界面的形式來顯示數(shù)據(jù),使用手機掃碼的形式來反饋區(qū)塊信息供用戶訪問。客戶端是農(nóng)產(chǎn)品產(chǎn)業(yè)鏈多個企業(yè)節(jié)點進行生產(chǎn)管理、農(nóng)事作業(yè)、加工、運輸、包裝、銷售等使用的子系統(tǒng),包含產(chǎn)生結(jié)果的所有業(yè)務邏輯,其中產(chǎn)生的數(shù)據(jù)使用類似于JSON的形式編碼,模塊之間以JSON數(shù)據(jù)形式進行數(shù)據(jù)交互,它是一種簡易、存取便捷、可讀性強的編碼形式,更重要的是它的樹形結(jié)構(gòu)天然具有可擴展性,對后期各個階段需要添加更多的數(shù)據(jù)信息到鏈中可以擴展,對現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)仍具有兼容性。客戶端使用面向服務的架構(gòu)提供的接口,以實現(xiàn)與系統(tǒng)服務器的連接,消費者可以從系統(tǒng)獲取溯源信息,例如生產(chǎn)數(shù)據(jù)或成品數(shù)據(jù),各個階段的參與者,如茶莊、加工廠、經(jīng)銷商等都能通過鏈上的信息對農(nóng)產(chǎn)品數(shù)據(jù)進行確認核實。將開發(fā)的農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)應用于廣東清遠英德紅茶溯源中,其紅茶追溯系統(tǒng)客戶端、管理端和移動端界面如圖7~9所示。 圖7 紅茶追溯系統(tǒng)客戶端界面Fig.7 Client interface of black tea traceability system 圖8 紅茶追溯系統(tǒng)管理端界面Fig.8 Management interface of black tea traceability system 圖9 紅茶追溯系統(tǒng)移動端界面Fig.9 Mobile terminal interface of black tea 農(nóng)產(chǎn)品產(chǎn)業(yè)鏈可信溯源流程如圖10所示,虛線框內(nèi)代表紅茶溯源安全供應鏈的材料流程,茶葉從茶園生產(chǎn)出來,經(jīng)過工廠加工成茶葉或茶葉制品,然后運輸?shù)礁鱾€廠商進行處理,包裝上會印上各自供應商的商標、茶葉的生產(chǎn)日期以及產(chǎn)地,最后擺放在貨架上等待售出。這是一個復雜的溯源網(wǎng)絡,在每個階段都有多個合作伙伴,各階段都有各自的供應商負責進行數(shù)據(jù)的上鏈和交互,每個合作伙伴都從多渠道采購原材料提供給上游的供應商,并且上下游的數(shù)據(jù)信息都是相通的,上鏈的數(shù)據(jù)存儲進賬本就不可以再更改。最終消費者掃描得到的溯源信息是上傳到區(qū)塊內(nèi)的數(shù)據(jù)最終選擇性的輸出結(jié)果,其中包括茶葉的溯源碼、當前區(qū)塊的高度以及區(qū)塊的哈希地址,消費者對買到的農(nóng)產(chǎn)品通過掃描溯源碼進行查詢其來源,確保農(nóng)產(chǎn)品質(zhì)量溯源數(shù)據(jù)真實可靠。 (1)設計的農(nóng)產(chǎn)品溯源區(qū)塊結(jié)構(gòu),確保農(nóng)產(chǎn)品溯源數(shù)據(jù)不可篡改或偽造;“On-Chain+Off-Chain”區(qū)塊鏈溯源信息鏈上鏈下雙鏈協(xié)同管理存儲策略,有效減少區(qū)塊鏈網(wǎng)絡中各節(jié)點數(shù)據(jù)存儲壓力大、查詢效率低等問題;采用 Kafka共識機制對多參與主體上鏈的事務進行有效排序,提供數(shù)據(jù)高吞吐量和低延時的處理能力;同時結(jié)合國家食品安全法規(guī)編寫智能合約,使農(nóng)產(chǎn)品產(chǎn)業(yè)鏈的數(shù)據(jù)得以標準和規(guī)范,以實時驗證擬上鏈的合約數(shù)據(jù)、監(jiān)控區(qū)塊鏈網(wǎng)絡上的交易信息,觸發(fā)驗證機制對合法信息進行存儲,確保農(nóng)產(chǎn)品數(shù)據(jù)的可靠性和溯源平臺的公信力。 (2)基于Hyperledger Fabric區(qū)塊鏈平臺,對農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)進行整體的設計,系統(tǒng)分為數(shù)據(jù)采集層、數(shù)據(jù)存儲層、服務管理層、接口層、業(yè)務邏輯層、用戶層6層,體現(xiàn)了由物理空間到網(wǎng)絡空間、鏈下數(shù)據(jù)到鏈上數(shù)據(jù)、分散到統(tǒng)一、信息壁壘到透明可靠的全方位設計,解決了傳統(tǒng)溯源系統(tǒng)中心化服務效率低、信息不透明、安全風險大等問題。 圖10 農(nóng)產(chǎn)品產(chǎn)業(yè)鏈可信溯源流程圖Fig.10 Reliable traceability process of agricultural products industry chain (3)不僅實現(xiàn)了系統(tǒng)數(shù)據(jù)分散存儲、安全規(guī)范上鏈、真實透明存儲,消費者還能快捷地查詢到所購買農(nóng)產(chǎn)品的溯源信息,實現(xiàn)了從農(nóng)田到餐桌全過程生產(chǎn)鏈、農(nóng)資供給鏈、銷售鏈、監(jiān)督鏈等多鏈有機融合,建立了農(nóng)產(chǎn)品溯源信息不可篡改、全程留痕、公開透明、集體維護的農(nóng)產(chǎn)品質(zhì)量安全可信溯源體系,實現(xiàn)了“農(nóng)企-監(jiān)管部門-消費者”之間良好的信任氛圍,可為其他產(chǎn)品溯源提供借鑒和參考。2.4 系統(tǒng)實現(xiàn)



3 結(jié)論
