劉雙印 雷墨鹥兮 徐龍琴 李景彬 孫傳恒 楊信廷
(1.仲愷農(nóng)業(yè)工程學(xué)院智慧農(nóng)業(yè)創(chuàng)新研究院,廣州 510225;2.廣東省高校智慧農(nóng)業(yè)工程技術(shù)研究中心,廣州 510225;3.石河子大學(xué)機(jī)械電氣工程學(xué)院,石河子 832003;4.國家農(nóng)業(yè)信息化工程技術(shù)研究中心,北京 100097)
近年來,農(nóng)產(chǎn)品質(zhì)量安全問題頻發(fā),各國政府高度關(guān)注,并出臺(tái)系列法律法規(guī)以保障農(nóng)產(chǎn)品質(zhì)量安全[1-3]。各國政府、高校科研院所和企業(yè)采用條形碼、射頻識(shí)別、二維碼、產(chǎn)品電子代碼、物聯(lián)網(wǎng)、云計(jì)算等技術(shù)等構(gòu)建系列的農(nóng)產(chǎn)品質(zhì)量安全溯源系統(tǒng)[4-8],并在水產(chǎn)品、蔬菜、畜禽肉蛋類、糧油、水果等領(lǐng)域得到廣泛應(yīng)用,取得一些成效[9-10]。但因農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈具有產(chǎn)業(yè)鏈長、參與主體多、涉及面廣、環(huán)節(jié)復(fù)雜、周期長、信息多源異構(gòu)等特性,再加上傳統(tǒng)的溯源系統(tǒng)多采用數(shù)據(jù)中心化存儲(chǔ),各自管理,尤其是農(nóng)產(chǎn)品質(zhì)量高附加值信息被選擇性公開,使現(xiàn)有溯源系統(tǒng)存在共享性差、數(shù)據(jù)易篡改、信息不透明和不對稱、數(shù)據(jù)可信任性差等問題,導(dǎo)致農(nóng)產(chǎn)品質(zhì)量安全事件仍多發(fā)[11]。因此,為解決上述問題,研究先進(jìn)的溯源技術(shù)及其系統(tǒng)對保障農(nóng)產(chǎn)品質(zhì)量安全具有重要的研究價(jià)值。
區(qū)塊鏈?zhǔn)且环N分布式賬本技術(shù),具有去中心化、不可篡改、成本低、可追溯、安全可靠等特征[12-15]。一些國內(nèi)外學(xué)者研究將區(qū)塊鏈技術(shù)應(yīng)用在農(nóng)產(chǎn)品質(zhì)量安全溯源領(lǐng)域,文獻(xiàn)[16]提出了一種統(tǒng)一的食品本體論,該理論可提高全球食品可追溯性、質(zhì)量控制和數(shù)據(jù)整合,它是一個(gè)由聯(lián)盟驅(qū)動(dòng)的項(xiàng)目,為建立一個(gè)全面的、容易獲得的全球農(nóng)場,它準(zhǔn)確且一致地描述了常見的食物。文獻(xiàn)[17]采用區(qū)塊鏈技術(shù)構(gòu)建了糧油食品供應(yīng)鏈信息安全管理模型,并通過雙模數(shù)據(jù)存儲(chǔ)機(jī)制和基于智能合約的供應(yīng)鏈信息管理,實(shí)現(xiàn)了信息存儲(chǔ)與傳輸安全可信。文獻(xiàn)[18]提出了“數(shù)據(jù)庫+區(qū)塊鏈”的鏈上鏈下追溯信息雙存儲(chǔ)模型,通過Hyperledger Fabric設(shè)計(jì)了區(qū)塊鏈農(nóng)產(chǎn)品追溯信息存儲(chǔ)模型和查詢方法,實(shí)現(xiàn)了農(nóng)產(chǎn)品追溯信息高效存儲(chǔ)和快速查詢。文獻(xiàn)[19]采用基于危害因子的食品風(fēng)險(xiǎn)評(píng)估和區(qū)塊鏈溯源技術(shù)構(gòu)建了食品質(zhì)量安全管理系統(tǒng),實(shí)現(xiàn)了大米質(zhì)量安全管控。文獻(xiàn)[20]設(shè)計(jì)了一個(gè)旨在為養(yǎng)魚戶提供安全的存儲(chǔ)空間,以保存大量不能被篡改的農(nóng)業(yè)數(shù)據(jù)平臺(tái),實(shí)現(xiàn)了使用智能契約來自動(dòng)完成養(yǎng)魚的不同過程,減少了錯(cuò)誤操作。文獻(xiàn)[21]提出了一種利用區(qū)塊鏈和智能合約有效地執(zhí)行商業(yè)交易,以實(shí)現(xiàn)整個(gè)農(nóng)業(yè)的大豆跟蹤和可追溯所有信息供應(yīng)鏈,該方案以高完整性提高效率和安全性,實(shí)現(xiàn)了為用戶提供高透明度和可追溯性的供應(yīng)鏈生態(tài)系統(tǒng)。上述研究采用區(qū)塊鏈技術(shù)實(shí)現(xiàn)質(zhì)量安全溯源,一定程度上解決了傳統(tǒng)溯源系統(tǒng)的問題,但存在數(shù)據(jù)存儲(chǔ)壓力大和查詢效率低等問題,尤其是隨著農(nóng)產(chǎn)品產(chǎn)業(yè)鏈節(jié)點(diǎn)拓展和數(shù)據(jù)劇增,溯源系統(tǒng)負(fù)荷壓力將增大。
本文首先對農(nóng)產(chǎn)品溯源信息雙鏈存儲(chǔ)模式和智能合約進(jìn)行設(shè)計(jì),然后采用聯(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è)鏈涉及的活動(dòng)主體主要有:育種企業(yè)、生產(chǎn)資料企業(yè)(生產(chǎn)化肥、農(nóng)藥等)、種養(yǎng)殖企業(yè)、加工企業(yè)、倉儲(chǔ)企業(yè)、物流企業(yè)、分銷商、零售商和消費(fèi)者,其關(guān)鍵控制節(jié)點(diǎn)主要有種苗、種植、收獲、加工、倉儲(chǔ)、冷鏈物流、質(zhì)檢、銷售、消費(fèi)等環(huán)節(jié)。各節(jié)點(diǎn)的信息主要包括種苗信息(種子編號(hào)、種子名稱、所屬品種、來源)、環(huán)境信息(土壤、水質(zhì)、氣象等多參數(shù))、投入品信息(投入品編號(hào)、名稱、成分含量、投入量和庫存量、來源、購買人、使用人)、檢驗(yàn)檢疫信息(重金屬類別及含量、農(nóng)藥類別及殘留含量、微生物類別及含量、檢測檢驗(yàn)方式、農(nóng)產(chǎn)品品質(zhì)量等級(jí)、檢驗(yàn)人、檢驗(yàn)單位)、控制信息(溫度、光照強(qiáng)度、濕度、投入品配比等技術(shù)指標(biāo))、資質(zhì)管理(企業(yè)資質(zhì)、管理制度、執(zhí)行標(biāo)準(zhǔn))、人員信息(人員ID、姓名、工種類別、聯(lián)系方式、所學(xué)專業(yè)等)、地塊等其他信息(地塊編號(hào)、時(shí)間、生產(chǎn)批次、土壤關(guān)鍵指標(biāo)等)等[22]。由上可知,農(nóng)產(chǎn)品產(chǎn)業(yè)鏈參與的主體眾多,涉及節(jié)點(diǎn)多且各節(jié)點(diǎn)信息化水平參差不齊,缺乏統(tǒng)一的數(shù)據(jù)接口、標(biāo)準(zhǔn)規(guī)范和業(yè)務(wù)集成,形成諸多各自管理的“數(shù)據(jù)孤島”,嚴(yán)重制約農(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ū)塊鏈存儲(chǔ)交易信息的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),由區(qū)塊頭和區(qū)塊體兩部分組成,通過區(qū)塊頭中父區(qū)塊頭Hash值按時(shí)序排列將相鄰區(qū)塊首尾連接組成區(qū)塊鏈[25-26],其區(qū)塊結(jié)構(gòu)如圖1所示。采用哈希算法對區(qū)塊體存儲(chǔ)的農(nóng)產(chǎn)品產(chǎn)業(yè)鏈各參與主體的交易關(guān)鍵數(shù)據(jù)加密成不可逆轉(zhuǎn)的Hash值[27],并作為Merkle樹葉子節(jié)點(diǎn),將兩兩葉子逐層遞歸哈希計(jì)算,生成區(qū)塊頭的Merkle樹根節(jié)點(diǎn)[28]。區(qū)塊通過Merkle樹特性、時(shí)間戳、版本號(hào)、區(qū)塊復(fù)雜度、數(shù)字簽名等措施[29-30],確保農(nóng)產(chǎn)品溯源信息難以篡改[31],若某節(jié)點(diǎn)篡改溯源關(guān)鍵數(shù)據(jù),通過區(qū)塊Hash值比對,可快速追蹤該節(jié)點(diǎn),從而保障了農(nóng)產(chǎn)品溯源系統(tǒng)數(shù)據(jù)不可偽造、安全可信[32-34]。
圖1 區(qū)塊鏈?zhǔn)浇Y(jié)構(gòu)圖Fig.1 Structure diagram of blockchain
1.2.2“On-Chain+Off-Chain”雙模式存儲(chǔ)策略
農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈具有參與主體節(jié)點(diǎn)多、產(chǎn)業(yè)鏈長、涉及范圍廣、數(shù)據(jù)量大且多源異構(gòu)等特征[35],在農(nóng)產(chǎn)品溯源過程中,隨著節(jié)點(diǎn)增加和數(shù)據(jù)量增大,若每次都把各節(jié)點(diǎn)所有數(shù)據(jù)全部上傳到區(qū)塊鏈網(wǎng)絡(luò)中,不僅上傳速度慢還易造成網(wǎng)絡(luò)阻塞,導(dǎo)致區(qū)塊鏈網(wǎng)絡(luò)中各節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)壓力大,查詢效率低,數(shù)據(jù)安全隱患大,還對數(shù)據(jù)存儲(chǔ)系統(tǒng)的設(shè)備性能和投入成本都提出較高要求,影響了基于區(qū)塊鏈的溯源系統(tǒng)的實(shí)施[36-37]。鏈上存儲(chǔ)的主要壓力如表1所示。
為此,本文提出了“On-Chain+Off-Chain”農(nóng)產(chǎn)品質(zhì)量安全溯源信息協(xié)同管理存儲(chǔ)策略,其基本思想為:首先對農(nóng)產(chǎn)品產(chǎn)業(yè)鏈各節(jié)點(diǎn)產(chǎn)出的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化和規(guī)范化;其次采用智能合約對各節(jié)點(diǎn)規(guī)范化后的詳細(xì)數(shù)據(jù)進(jìn)行驗(yàn)證,把通過驗(yàn)證的大部分農(nóng)產(chǎn)品產(chǎn)業(yè)鏈數(shù)據(jù)和區(qū)塊鏈位置信息存儲(chǔ)在本地或云服務(wù)器上的關(guān)系型和非關(guān)系型數(shù)據(jù)庫中;然后將農(nóng)產(chǎn)品溯源關(guān)鍵信息使用MD5對局部數(shù)據(jù)(圖像、視頻等)和持有人簽名一起計(jì)算上鏈,并在鏈下建立索引,在鏈上僅進(jìn)行Key-Value的精準(zhǔn)讀寫。同時(shí)為了保證智能合約的隱私性,在必要的情況下智能合約也可以采用鏈下存儲(chǔ),使用計(jì)算節(jié)點(diǎn)進(jìn)行合約的計(jì)算記錄,共識(shí)節(jié)點(diǎn)記錄合約的狀態(tài)記錄;最后,對于鏈下的溯源數(shù)據(jù)的存儲(chǔ)要盡可能地詳盡,鏈上經(jīng)哈希算法計(jì)算過的數(shù)據(jù)要盡可能地精簡,上鏈的數(shù)據(jù)一定是需要經(jīng)過共識(shí)的,因此該“On-Chain+Off-Chain”協(xié)同管理存儲(chǔ)策略能很靈活地應(yīng)對網(wǎng)絡(luò)擁塞、傳輸時(shí)延等的影響。對于鏈上數(shù)據(jù)的快速查詢達(dá)到了效率、成本以及隱私安全的平衡。設(shè)計(jì)的農(nóng)產(chǎn)品質(zhì)量安全溯源信息協(xié)同管理存儲(chǔ)模型如圖2所示。
表1 鏈上存儲(chǔ)數(shù)據(jù)開銷與效率Tab.1 Analysis of cost and efficiency within storing data on chain
圖2 農(nóng)產(chǎn)品質(zhì)量安全區(qū)塊溯源信息協(xié)同管理存儲(chǔ)模型Fig.2 Cooperative management and storage model of block traceability information for agricultural product quality and safety
鏈下存儲(chǔ)的數(shù)據(jù)為當(dāng)前區(qū)塊高度、當(dāng)前Hash值、溯源碼,溯源碼則包含了農(nóng)產(chǎn)品從出產(chǎn)到銷售整個(gè)流程的信息,也稱為二維碼溯源,如產(chǎn)品介紹、溯源信息、食品安全、企業(yè)信息以及信息防偽等各項(xiàng)數(shù)據(jù)的Hash值。當(dāng)前Hash值是集當(dāng)前的版本號(hào)(Version)、前區(qū)塊Hash值(Previews Hash)、時(shí)間戳(Timestamp)、隨機(jī)數(shù)(Nonce)以及默克爾樹(Merkle Tree)所包含所有事務(wù)的Hash值(Merkle Hash)等各項(xiàng)信息經(jīng)MD5哈希算法處理之后得到的結(jié)果。鏈下存儲(chǔ)著由鏈上數(shù)據(jù)共同參與哈希計(jì)算產(chǎn)生的Hash值,鏈上分布式賬本記錄著所有的原始數(shù)據(jù),塊與塊相連接,每一塊的當(dāng)前Hash值都有前一區(qū)塊的Hash值參與計(jì)算完成,默克爾樹的根Hash值無法篡改,得到的鏈下數(shù)據(jù)的上鏈情況如表2所示。
表2 上鏈數(shù)據(jù)Tab.2 On-chain data
1.2.3農(nóng)產(chǎn)品產(chǎn)業(yè)鏈共識(shí)機(jī)制
共識(shí)算法是區(qū)塊鏈去中心化的核心要素,影響區(qū)塊鏈系統(tǒng)的執(zhí)行效率[38-39]。公有鏈共識(shí)算法主要依靠計(jì)算機(jī)算力完成共識(shí)機(jī)制,存在計(jì)算資源浪費(fèi)問題[40]。私有鏈共識(shí)機(jī)制主要應(yīng)用于企業(yè)內(nèi)部,常采用傳統(tǒng)分布式一致性算法完成共識(shí)操作,不適于多主體參與的農(nóng)產(chǎn)品質(zhì)量安全溯源領(lǐng)域[41-42]。而聯(lián)盟鏈網(wǎng)絡(luò)由通過授權(quán)的聯(lián)盟成員共同維護(hù),常采用Kafka共識(shí)模式[43]或者實(shí)用拜占庭容錯(cuò)算法[44](Practical Byzantine fault tolerance,PBFT)。
Fabric區(qū)塊鏈的共識(shí)過程包括3個(gè)階段:背書、排序和校驗(yàn),背書(Endorsement)階段是背書節(jié)點(diǎn)對客戶端發(fā)來的事務(wù)進(jìn)行合法性校驗(yàn),背書節(jié)點(diǎn)模擬并簽署提案書,對結(jié)果作出批準(zhǔn)或拒絕響應(yīng),根據(jù)設(shè)定的背書邏輯判斷是否支持該交易,如果背書邏輯決定支持交易,會(huì)把交易簽名后發(fā)回給客戶端。背書節(jié)點(diǎn)和提交節(jié)點(diǎn)之間有重疊,背書節(jié)點(diǎn)作為一種特殊的提交節(jié)點(diǎn),它們必須持有智能合約,每個(gè)背書節(jié)點(diǎn)通過在其模擬環(huán)境中調(diào)用智能合同,用來接收并執(zhí)行交易建議,這樣的模擬交易結(jié)果不會(huì)更新到分類賬中,而是由背書節(jié)點(diǎn)將模擬結(jié)果捕獲到一組特定的讀寫數(shù)據(jù)集(ReadWrite set,RW set)中。讀取數(shù)據(jù)以捕獲當(dāng)前狀態(tài)的最新讀寫集(RW set),保存模擬事務(wù)寫入數(shù)據(jù)時(shí)將寫入世界狀態(tài),背書節(jié)點(diǎn)在這些RW集上提供簽名,然后將其返回給客戶端應(yīng)用程序。排序(Ordering)階段是排序節(jié)點(diǎn)接受背書節(jié)點(diǎn)返回的所有交易并對這些交易進(jìn)行排序的過程,排序服務(wù)是共識(shí)機(jī)制中重要的一環(huán),所有交易通過Kafka機(jī)制排序服務(wù)進(jìn)行排序才可以達(dá)成全網(wǎng)共識(shí),客戶端應(yīng)用程序?qū)σ押灻哪M事務(wù)結(jié)果進(jìn)行打包,然后將該事務(wù)連同RW集一起提交給排序節(jié)點(diǎn)。當(dāng)網(wǎng)絡(luò)對提交的事務(wù)達(dá)成共識(shí)時(shí),此事務(wù)將被打包成一個(gè)塊,并將其交付給所有提交節(jié)點(diǎn)進(jìn)行驗(yàn)證。驗(yàn)證(Validation)階段是由排序節(jié)點(diǎn)與提交節(jié)點(diǎn)共同完成的,每個(gè)提交節(jié)點(diǎn)都會(huì)驗(yàn)證交易程序通過檢查這些RW集是否與當(dāng)前世界狀態(tài)相匹配,交易的RW集是否符合多版本并發(fā)控制[45](Multiversion concurrency control,MVCC)的校驗(yàn)等。一旦交易驗(yàn)證,即可將其寫入分類賬中,并根據(jù)RW集設(shè)置更新世界狀態(tài)寫入數(shù)據(jù)。最后,這些提交節(jié)點(diǎn)生成異步消息以通知客戶端所提交的事務(wù)是否已成功執(zhí)行。整個(gè)事務(wù)的合約過程都由共識(shí)機(jī)制強(qiáng)制參與執(zhí)行,每當(dāng)事件發(fā)生時(shí),客戶端應(yīng)用程序就可以訂閱每個(gè)提交節(jié)點(diǎn)的事件通知。Fabric利用Kafka對交易信息進(jìn)行排序處理,為實(shí)時(shí)數(shù)據(jù)提供統(tǒng)一的、高吞吐量、低延時(shí)的處理能力,并且在集群內(nèi)部支持節(jié)點(diǎn)故障容錯(cuò);PBFT解決拜占庭將軍問題,但需要O(N2)時(shí)間復(fù)雜度(N表示同一消息共識(shí)次數(shù))的網(wǎng)絡(luò)通信才能完成n個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)共識(shí),導(dǎo)致網(wǎng)絡(luò)帶寬壓力大,影響算法共識(shí)效率。圖3為基于聯(lián)盟鏈共識(shí)機(jī)制設(shè)計(jì)的農(nóng)產(chǎn)品溯源共識(shí)機(jī)制原理。
圖3 農(nóng)產(chǎn)品溯源共識(shí)機(jī)制Fig.3 Consensus mechanism of agricultural product traceability
1.2.4農(nóng)產(chǎn)品產(chǎn)業(yè)鏈智能合約機(jī)制
智能合約是一種具有確定性、自校驗(yàn)、自治化、去中心化、自動(dòng)執(zhí)行、不可篡改等特點(diǎn),能執(zhí)行合同條款的可計(jì)算的計(jì)算機(jī)協(xié)議[46-48]。智能合約根據(jù)事先預(yù)置好和可自動(dòng)執(zhí)行的合約條款及業(yè)務(wù)邏輯機(jī)制,就可以為區(qū)塊鏈網(wǎng)絡(luò)中各節(jié)點(diǎn)活動(dòng)主體提供數(shù)據(jù)交互、防篡改的交易記錄、價(jià)值轉(zhuǎn)移、關(guān)鍵數(shù)據(jù)上鏈存儲(chǔ)等功能,也是在區(qū)塊鏈網(wǎng)絡(luò)上實(shí)施更加靈活、更細(xì)粒度的訪問控制機(jī)制[49-51]。本系統(tǒng)以Hyperledger Fabric[52]為區(qū)塊鏈開發(fā)平臺(tái),結(jié)合國家食品安全法規(guī)、行業(yè)標(biāo)準(zhǔn),領(lǐng)域?qū)<医?jīng)驗(yàn)等,制定農(nóng)產(chǎn)品質(zhì)量安全溯源智能合約規(guī)則集和合約觸發(fā)條件,通過編寫的智能合約,實(shí)時(shí)驗(yàn)證擬上鏈的合約數(shù)據(jù)、監(jiān)控區(qū)塊鏈網(wǎng)絡(luò)上的交易信息,實(shí)現(xiàn)對農(nóng)產(chǎn)品全產(chǎn)業(yè)鏈各環(huán)節(jié)產(chǎn)品精準(zhǔn)管控,為農(nóng)產(chǎn)品生產(chǎn)企業(yè)優(yōu)化生產(chǎn)工藝、保障產(chǎn)品質(zhì)量和提高企業(yè)品牌提供技術(shù)支撐;同時(shí)也為廣大消費(fèi)者和農(nóng)產(chǎn)品質(zhì)量安全檢測部門提供可信溯源信息。系統(tǒng)智能合約使用標(biāo)準(zhǔn)編程語言編寫,但不能直接訪問分類帳狀態(tài),而且它們在容器環(huán)境中運(yùn)行以進(jìn)行隔離。系統(tǒng)中智能合約主要體現(xiàn)在3方面:①對上鏈數(shù)據(jù)的驗(yàn)證及維護(hù),智能合約以編程方式訪問分類帳的兩個(gè)不同的部分,一個(gè)不可更改地記錄所有交易歷史的區(qū)塊鏈,以及一個(gè)持有當(dāng)前這些狀態(tài)值的世界狀態(tài)。所以上鏈的數(shù)據(jù)經(jīng)過驗(yàn)證之后不能更改,賬本狀態(tài)會(huì)記錄所有的寫入操作。智能合約打包并部署到區(qū)塊鏈網(wǎng)絡(luò)中,可以在同一包內(nèi)定義多個(gè)智能合約,一旦合約部署完成,包內(nèi)的所有智能合約都可提供給應(yīng)用程序。因?yàn)橹悄芎霞s是允許多步驟流程自動(dòng)化的腳本,其操控的分散應(yīng)用程序可完全按照代碼條件觸發(fā),所以不會(huì)有任何審查、欺騙或宕機(jī)的風(fēng)險(xiǎn)。②對銷售商品的賠付方面,在農(nóng)產(chǎn)品從生產(chǎn)到銷售的過程中需要經(jīng)歷各個(gè)階段的合作加工處理過程,一旦其中某個(gè)環(huán)節(jié)出現(xiàn)問題,智能合約會(huì)根據(jù)事先約定的情況對出現(xiàn)的損失進(jìn)行賠付,而不需要人為地計(jì)算損失與懲罰,這樣既節(jié)省了成本也提高了效率。③對該“On-Chain+Off-Chain”協(xié)同管理存儲(chǔ)策略的保護(hù)措施,外部應(yīng)用程序會(huì)與智能合約在區(qū)塊鏈網(wǎng)絡(luò)上進(jìn)行交互執(zhí)行操作,由于區(qū)塊鏈包含不可變記錄,以反映這些操作產(chǎn)生的更改,所以“On-Chain+Off-Chain”協(xié)同管理存儲(chǔ)策略可以支持最新的緩存信息,且對于數(shù)據(jù)的檢索更加快速便捷,因此對于沒有授權(quán)的應(yīng)用程序開發(fā)人員則無法選擇或修改驗(yàn)證階段進(jìn)行評(píng)估認(rèn)可策略,在最終系統(tǒng)審計(jì)過程中,背書策略作為系統(tǒng)中事務(wù)驗(yàn)證的靜態(tài)庫執(zhí)行操作,只能通過鏈碼實(shí)行參數(shù)化,之后將分類帳更新結(jié)果作為響應(yīng)返回到外部應(yīng)用程序,因此可以保證用戶和數(shù)據(jù)的安全。其農(nóng)產(chǎn)品溯源智能合約如圖4所示。
圖4 農(nóng)產(chǎn)品溯源智能合約Fig.4 Smart contract of agricultural product traceability
列出系統(tǒng)兩個(gè)合約執(zhí)行的算法邏輯(Query與Compare),即用戶掃描溯源碼得到溯源碼內(nèi)的信息,這些數(shù)據(jù)信息都來自以上鏈的信息。其中塊與塊相連接,每一塊上存有大量事務(wù),每個(gè)事務(wù)都有唯一標(biāo)示ID,以及有上鏈的時(shí)間戳共同參與哈希計(jì)算,當(dāng)鏈上返回的原始數(shù)據(jù)經(jīng)過哈希計(jì)算后得到的字符串與本地?cái)?shù)據(jù)庫存儲(chǔ)的字符串相匹配,合約自動(dòng)執(zhí)行對比邏輯進(jìn)行數(shù)據(jù)調(diào)取,當(dāng)tx.ID1==tx.ID2成立時(shí),查詢成功,否則合約調(diào)用失敗,云端數(shù)據(jù)庫返回源數(shù)據(jù)不成功,查詢失敗。兩個(gè)合約如下:
合約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ù)計(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ù)進(jìn)行梳理分析、歸納合并,并以“高內(nèi)聚、低耦合”的現(xiàn)代軟件工程思想進(jìn)行系統(tǒng)功能劃分。該系統(tǒng)由我的農(nóng)場、基地管理、生產(chǎn)操作、作物追溯、系統(tǒng)設(shè)置、大數(shù)據(jù)分析共6大功能模塊組成,每個(gè)功能模塊又由多個(gè)子功能構(gòu)成,實(shí)現(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è)的實(shí)際生產(chǎn)過程和農(nóng)產(chǎn)品可信溯源的需求,設(shè)計(jì)的系統(tǒng)整體架構(gòu)如圖6所示。該系統(tǒng)架構(gòu)主要由數(shù)據(jù)采集層、數(shù)據(jù)存儲(chǔ)層、服務(wù)管理層、接口層、業(yè)務(wù)邏輯層、用戶層等6層組成。
數(shù)據(jù)采集層主要采用物聯(lián)網(wǎng)系統(tǒng)、多參數(shù)智能傳感器、分析儀等設(shè)備在線或離線采集農(nóng)產(chǎn)品產(chǎn)業(yè)鏈各節(jié)點(diǎn)的數(shù)據(jù),并通過無線傳感器網(wǎng)絡(luò)、4G/5G、LoRa、WIFI等網(wǎng)絡(luò)把數(shù)據(jù)傳輸?shù)綌?shù)據(jù)存儲(chǔ)層。
數(shù)據(jù)存儲(chǔ)層采用鏈上和鏈下雙存儲(chǔ)模式存放所有數(shù)據(jù),首先對數(shù)據(jù)進(jìn)行清洗、轉(zhuǎn)化、融合等預(yù)處理,然后把通過智能合約和共識(shí)機(jī)制驗(yàn)證的溯源關(guān)鍵數(shù)據(jù)、分布式賬本、時(shí)間戳、數(shù)字簽名、區(qū)塊頭Hash值等信息上鏈存儲(chǔ)到聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò)中,該鏈上數(shù)據(jù)可通過不同身份驗(yàn)證和訪問權(quán)限查看不同數(shù)據(jù);將通過智能合約的各節(jié)點(diǎn)大量的數(shù)據(jù)和區(qū)塊鏈網(wǎng)絡(luò)映射關(guān)系都存儲(chǔ)到鏈下關(guān)系型和非關(guān)系型數(shù)據(jù)庫中,這種鏈上和鏈下雙存儲(chǔ)模式可有效提高存儲(chǔ)效率及保障數(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
服務(wù)管理層主要包括安全服務(wù)體系、分布式賬本、資源管理服務(wù)3部分,其中安全服務(wù)體系負(fù)責(zé)管理整個(gè)系統(tǒng)的賬號(hào)、密鑰、認(rèn)證、權(quán)限、簽名、共識(shí)算法、合約等信息;分布式賬本負(fù)責(zé)管理所有交易記錄、數(shù)據(jù)共識(shí)、智能合約,登記和交換實(shí)體或虛擬的資產(chǎn)等;資源管理服務(wù)負(fù)責(zé)系統(tǒng)算法庫、農(nóng)產(chǎn)品質(zhì)量安全法律法規(guī)庫、農(nóng)產(chǎn)品行業(yè)標(biāo)準(zhǔn)庫、規(guī)則庫、專家知識(shí)庫、編碼規(guī)則與管理、邊緣計(jì)算設(shè)備、虛擬機(jī)和容器等通過API 應(yīng)用接口,支持業(yè)務(wù)邏輯層的功能應(yīng)用。
業(yè)務(wù)邏輯層主要負(fù)責(zé)整個(gè)溯源系統(tǒng)的數(shù)據(jù)采集、溯源信息查詢、大數(shù)據(jù)統(tǒng)計(jì)分析、區(qū)塊鏈管理、溯源編碼等業(yè)務(wù)功能,為企業(yè)、質(zhì)檢部門、監(jiān)管部門和消費(fèi)者提供真實(shí)可靠的溯源信息和決策支持。
在實(shí)現(xiàn)了上述溯源系統(tǒng)設(shè)計(jì)的基礎(chǔ)上,需要將溯源信息清晰地呈現(xiàn)給企業(yè)、質(zhì)檢部門、監(jiān)管部門以及消費(fèi)者,因此該系統(tǒng)還需能夠快速檢索到鏈上所存儲(chǔ)的溯源信息。
存儲(chǔ)溯源信息時(shí),客戶端SDK將農(nóng)產(chǎn)品生產(chǎn)、加工、運(yùn)輸、包裝和銷售等信息通過invoke函數(shù)發(fā)送到背書節(jié)點(diǎn)(Endorser Peer),背書節(jié)點(diǎn)將與鏈碼(Chain Code)實(shí)例通信,并為其提供模擬的世界狀態(tài)(World State)讀寫集,即鏈碼會(huì)執(zhí)行完溯源信息查詢的邏輯任務(wù),但并不會(huì)在執(zhí)行參數(shù)時(shí)將模擬得到的讀寫集寫入數(shù)據(jù)庫,然后由排序節(jié)點(diǎn)對溯源信息進(jìn)行排序打包入塊,最終由提交節(jié)點(diǎn)進(jìn)行驗(yàn)證并提交至賬本更新狀態(tài)數(shù)據(jù)集;查詢溯源信息時(shí),以ID標(biāo)示碼為 key 值查詢賬本記錄,通過檢索key值來依次遍歷區(qū)塊,索引的value值為溯源信息的Hash值,有時(shí)會(huì)多次檢索key值,鍵-值引入鍵值的版本號(hào)加以標(biāo)識(shí),版本由塊序列號(hào)和事務(wù)(存儲(chǔ)條目)的序列號(hào)組成,因此該版本獨(dú)特且單調(diào)遞增,每次對同一個(gè)key值進(jìn)行寫入操作時(shí)其版本號(hào)(version)都會(huì)遞增,遍歷過程中以version的最大值為標(biāo)準(zhǔn)查詢。同時(shí),溯源信息與對應(yīng)的區(qū)塊號(hào)存儲(chǔ)在本地?cái)?shù)據(jù)庫,即在查詢時(shí)將鏈上、鏈下兩次得到的Hash值進(jìn)行對比以驗(yàn)證溯源數(shù)據(jù)是否被篡改。對應(yīng)的合約執(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ū)塊序號(hào)得到key-value 12.parsing blocks 基于區(qū)塊鏈的農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)采用多層的瀏覽器/服務(wù)器結(jié)構(gòu),由客戶端、服務(wù)器和數(shù)據(jù)庫構(gòu)成。其軟件開發(fā)環(huán)境為區(qū)塊鏈平臺(tái)Hyperledger Fabric,操作系統(tǒng)Ubuntu 16.04,應(yīng)用容器引擎Docker 18.09、開發(fā)語言Go、Java、JavaScript、HTML和CSS,開發(fā)框架Node.js和Bootstrap,數(shù)據(jù)庫服務(wù)器CouchDB、LevelDB、MySQL,其中CouchDB和LevelDB為鏈上分布式存儲(chǔ)的數(shù)據(jù)庫,MySQL為鏈下存儲(chǔ)數(shù)據(jù)庫等。硬件環(huán)境:內(nèi)存8 GB、硬盤容量500 GB、帶寬10 Mb/s。Fabric聯(lián)盟區(qū)塊鏈?zhǔn)褂肒ubernetes集群服務(wù),由1個(gè)命令行接口(CLI)節(jié)點(diǎn)、3個(gè)控制器節(jié)點(diǎn)、1個(gè)負(fù)載平衡器、1個(gè)網(wǎng)絡(luò)文件系統(tǒng)(NFS)節(jié)點(diǎn)和多個(gè)工作節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)都在Ubuntu 16.04虛擬機(jī)上運(yùn)行,Kubernetes集群的控制器節(jié)點(diǎn)負(fù)責(zé)調(diào)度,對等節(jié)點(diǎn)和排序節(jié)點(diǎn)由Kubernetes調(diào)度程序以循環(huán)的方式部署在工作節(jié)點(diǎn)上,以實(shí)現(xiàn)分布式存儲(chǔ)、防篡改和農(nóng)產(chǎn)品質(zhì)量安全可信溯源的目的。 在基于Hyperledger Fabric開發(fā)平臺(tái)中,賬本(Ledger)作為系統(tǒng)文件記錄著數(shù)據(jù)的更新,由狀態(tài)數(shù)據(jù)庫(StateDB)維護(hù)著真實(shí)世界狀態(tài)(World State),其中StateDB就包括LevelDB和 CouchDB。其中區(qū)塊鏈網(wǎng)絡(luò)主要由許多對等點(diǎn)組成,其中還包含了向分類帳寫入鏈上的多個(gè)智能合約。區(qū)塊鏈?zhǔn)且粋€(gè)不斷增長的記錄列表,稱為塊。實(shí)際上,塊包含先前塊的Hash值、時(shí)間戳、事務(wù)數(shù)據(jù)和一些其他信息。除非打破散列Hash值,否則不可能篡改分類帳數(shù)據(jù),因?yàn)榉诸悗ど系乃惺聞?wù)都是按順序并加密鏈接在一起的。區(qū)塊鏈網(wǎng)絡(luò)中的數(shù)據(jù)存儲(chǔ)可以是本地?cái)?shù)據(jù)庫或云存儲(chǔ)數(shù)據(jù)庫,例如關(guān)于茶場的信息(茶場情況、用戶簡介、設(shè)備概況、來自傳感器的環(huán)境數(shù)據(jù)以及執(zhí)行器的控制參數(shù)等)。最終用戶可以通過各種終端設(shè)備讀取區(qū)塊鏈網(wǎng)絡(luò)或?qū)?shù)據(jù)寫入?yún)^(qū)塊鏈網(wǎng)絡(luò)。 該系統(tǒng)從用戶使用的角度分為管理端、客戶端和移動(dòng)端3個(gè)子系統(tǒng),其中管理端是對系統(tǒng)進(jìn)行管理和運(yùn)維,管理端控制了客戶端和移動(dòng)端的數(shù)據(jù)連接,移動(dòng)端是消費(fèi)者查詢農(nóng)產(chǎn)品溯源信息子系統(tǒng),提供了以應(yīng)用程序接口控制用戶界面的形式來顯示數(shù)據(jù),使用手機(jī)掃碼的形式來反饋區(qū)塊信息供用戶訪問??蛻舳耸寝r(nóng)產(chǎn)品產(chǎn)業(yè)鏈多個(gè)企業(yè)節(jié)點(diǎn)進(jìn)行生產(chǎn)管理、農(nóng)事作業(yè)、加工、運(yùn)輸、包裝、銷售等使用的子系統(tǒng),包含產(chǎn)生結(jié)果的所有業(yè)務(wù)邏輯,其中產(chǎn)生的數(shù)據(jù)使用類似于JSON的形式編碼,模塊之間以JSON數(shù)據(jù)形式進(jìn)行數(shù)據(jù)交互,它是一種簡易、存取便捷、可讀性強(qiáng)的編碼形式,更重要的是它的樹形結(jié)構(gòu)天然具有可擴(kuò)展性,對后期各個(gè)階段需要添加更多的數(shù)據(jù)信息到鏈中可以擴(kuò)展,對現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)仍具有兼容性??蛻舳耸褂妹嫦蚍?wù)的架構(gòu)提供的接口,以實(shí)現(xiàn)與系統(tǒng)服務(wù)器的連接,消費(fèi)者可以從系統(tǒng)獲取溯源信息,例如生產(chǎn)數(shù)據(jù)或成品數(shù)據(jù),各個(gè)階段的參與者,如茶莊、加工廠、經(jīng)銷商等都能通過鏈上的信息對農(nóng)產(chǎn)品數(shù)據(jù)進(jìn)行確認(rèn)核實(shí)。將開發(fā)的農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)應(yīng)用于廣東清遠(yuǎn)英德紅茶溯源中,其紅茶追溯系統(tǒng)客戶端、管理端和移動(dò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)移動(dòng)端界面Fig.9 Mobile terminal interface of black tea 農(nóng)產(chǎn)品產(chǎn)業(yè)鏈可信溯源流程如圖10所示,虛線框內(nèi)代表紅茶溯源安全供應(yīng)鏈的材料流程,茶葉從茶園生產(chǎn)出來,經(jīng)過工廠加工成茶葉或茶葉制品,然后運(yùn)輸?shù)礁鱾€(gè)廠商進(jìn)行處理,包裝上會(huì)印上各自供應(yīng)商的商標(biāo)、茶葉的生產(chǎn)日期以及產(chǎn)地,最后擺放在貨架上等待售出。這是一個(gè)復(fù)雜的溯源網(wǎng)絡(luò),在每個(gè)階段都有多個(gè)合作伙伴,各階段都有各自的供應(yīng)商負(fù)責(zé)進(jìn)行數(shù)據(jù)的上鏈和交互,每個(gè)合作伙伴都從多渠道采購原材料提供給上游的供應(yīng)商,并且上下游的數(shù)據(jù)信息都是相通的,上鏈的數(shù)據(jù)存儲(chǔ)進(jìn)賬本就不可以再更改。最終消費(fèi)者掃描得到的溯源信息是上傳到區(qū)塊內(nèi)的數(shù)據(jù)最終選擇性的輸出結(jié)果,其中包括茶葉的溯源碼、當(dāng)前區(qū)塊的高度以及區(qū)塊的哈希地址,消費(fèi)者對買到的農(nóng)產(chǎn)品通過掃描溯源碼進(jìn)行查詢其來源,確保農(nóng)產(chǎn)品質(zhì)量溯源數(shù)據(jù)真實(shí)可靠。 (1)設(shè)計(jì)的農(nóng)產(chǎn)品溯源區(qū)塊結(jié)構(gòu),確保農(nóng)產(chǎn)品溯源數(shù)據(jù)不可篡改或偽造;“On-Chain+Off-Chain”區(qū)塊鏈溯源信息鏈上鏈下雙鏈協(xié)同管理存儲(chǔ)策略,有效減少區(qū)塊鏈網(wǎng)絡(luò)中各節(jié)點(diǎn)數(shù)據(jù)存儲(chǔ)壓力大、查詢效率低等問題;采用 Kafka共識(shí)機(jī)制對多參與主體上鏈的事務(wù)進(jìn)行有效排序,提供數(shù)據(jù)高吞吐量和低延時(shí)的處理能力;同時(shí)結(jié)合國家食品安全法規(guī)編寫智能合約,使農(nóng)產(chǎn)品產(chǎn)業(yè)鏈的數(shù)據(jù)得以標(biāo)準(zhǔn)和規(guī)范,以實(shí)時(shí)驗(yàn)證擬上鏈的合約數(shù)據(jù)、監(jiān)控區(qū)塊鏈網(wǎng)絡(luò)上的交易信息,觸發(fā)驗(yàn)證機(jī)制對合法信息進(jìn)行存儲(chǔ),確保農(nóng)產(chǎn)品數(shù)據(jù)的可靠性和溯源平臺(tái)的公信力。 (2)基于Hyperledger Fabric區(qū)塊鏈平臺(tái),對農(nóng)產(chǎn)品質(zhì)量安全可信溯源系統(tǒng)進(jìn)行整體的設(shè)計(jì),系統(tǒng)分為數(shù)據(jù)采集層、數(shù)據(jù)存儲(chǔ)層、服務(wù)管理層、接口層、業(yè)務(wù)邏輯層、用戶層6層,體現(xiàn)了由物理空間到網(wǎng)絡(luò)空間、鏈下數(shù)據(jù)到鏈上數(shù)據(jù)、分散到統(tǒng)一、信息壁壘到透明可靠的全方位設(shè)計(jì),解決了傳統(tǒng)溯源系統(tǒng)中心化服務(wù)效率低、信息不透明、安全風(fēng)險(xiǎn)大等問題。 圖10 農(nóng)產(chǎn)品產(chǎn)業(yè)鏈可信溯源流程圖Fig.10 Reliable traceability process of agricultural products industry chain (3)不僅實(shí)現(xiàn)了系統(tǒng)數(shù)據(jù)分散存儲(chǔ)、安全規(guī)范上鏈、真實(shí)透明存儲(chǔ),消費(fèi)者還能快捷地查詢到所購買農(nóng)產(chǎn)品的溯源信息,實(shí)現(xiàn)了從農(nóng)田到餐桌全過程生產(chǎn)鏈、農(nóng)資供給鏈、銷售鏈、監(jiān)督鏈等多鏈有機(jī)融合,建立了農(nóng)產(chǎn)品溯源信息不可篡改、全程留痕、公開透明、集體維護(hù)的農(nóng)產(chǎn)品質(zhì)量安全可信溯源體系,實(shí)現(xiàn)了“農(nóng)企-監(jiān)管部門-消費(fèi)者”之間良好的信任氛圍,可為其他產(chǎn)品溯源提供借鑒和參考。2.4 系統(tǒng)實(shí)現(xiàn)
3 結(jié)論