孫傳恒 魏玉冉 邢 斌 徐大明 李登奎 張 航
(1.天津農(nóng)學(xué)院計(jì)算機(jī)與信息工程學(xué)院, 天津 300384; 2.國家農(nóng)業(yè)信息化工程技術(shù)研究中心, 北京 100097;3.農(nóng)產(chǎn)品質(zhì)量安全追溯技術(shù)及應(yīng)用國家工程實(shí)驗(yàn)室, 北京 100097)
馬鈴薯在全球重要糧食作物中排名第4位,也是我國主要糧經(jīng)作物[1]。近年來,我國產(chǎn)業(yè)結(jié)構(gòu)調(diào)整,使得馬鈴薯產(chǎn)業(yè)在國民經(jīng)濟(jì)增長中的占比越來越重,馬鈴薯主糧化戰(zhàn)略已經(jīng)啟動[2]。但我國馬鈴薯整體生產(chǎn)水平仍然較低,這主要是因?yàn)槲覈N薯質(zhì)量不高,直接影響了馬鈴薯的最終產(chǎn)量和質(zhì)量[3]。因此,研究馬鈴薯種薯的生產(chǎn)溯源,通過信息技術(shù)提高種薯的產(chǎn)量及質(zhì)量,對加快我國馬鈴薯產(chǎn)業(yè)化、主糧化進(jìn)程有著重大意義[4]。
我國馬鈴薯種薯生產(chǎn)全環(huán)節(jié)流程復(fù)雜、周期較長、品種繁多,對種薯生產(chǎn)溯源數(shù)據(jù)進(jìn)行信息化記錄的技術(shù)儲備不健全,導(dǎo)致種薯溯源困難[5]。對此,相關(guān)研究人員提出了一些傳統(tǒng)溯源解決方案。文獻(xiàn)[6]采用數(shù)據(jù)庫、二維碼等技術(shù)創(chuàng)建溯源平臺,實(shí)現(xiàn)對馬鈴薯種薯全供應(yīng)鏈的溯源。文獻(xiàn)[7]通過對馬鈴薯進(jìn)行連續(xù)3年的跟蹤監(jiān)測,建立了基于穩(wěn)定同位素和礦質(zhì)元素的馬鈴薯產(chǎn)地溯源模型,并開發(fā)了馬鈴薯質(zhì)量信息識別與產(chǎn)地溯源專家系統(tǒng)。文獻(xiàn)[8]使用射頻識別技術(shù)和二維碼技術(shù)達(dá)到防偽防竄貨目的,對整個供應(yīng)鏈進(jìn)行全過程監(jiān)控。然而,傳統(tǒng)質(zhì)量溯源通過中心化平臺來進(jìn)行,生產(chǎn)溯源數(shù)據(jù)的存儲方式為集中式存儲,溯源數(shù)據(jù)易被篡改[9]。區(qū)塊鏈技術(shù)是分布式的網(wǎng)絡(luò)架構(gòu)[10],網(wǎng)絡(luò)中的所有節(jié)點(diǎn)遵守統(tǒng)一的共識機(jī)制,共同維護(hù)一個區(qū)塊鏈賬本,所有交易操作均會被記錄,篡改某數(shù)據(jù)非常困難[11]。近年來,隨著區(qū)塊鏈技術(shù)在農(nóng)業(yè)領(lǐng)域的迅速發(fā)展,文獻(xiàn)[12]采用“區(qū)塊鏈+數(shù)據(jù)庫”的雙存儲模式,實(shí)現(xiàn)紅茶從茶園到茶桌的全程可信溯源。文獻(xiàn)[13]提出一種高效且低成本運(yùn)行的方法,利用公有鏈和私有鏈兩套區(qū)塊鏈確保溯源數(shù)據(jù)的真實(shí)可靠。文獻(xiàn)[14]設(shè)計(jì)出基于區(qū)塊鏈智能合約的框架,用于記錄農(nóng)作物生長、流通等數(shù)據(jù),旨在消除供應(yīng)鏈企業(yè)間的信息孤島。文獻(xiàn)[15]使用嵌入式控制等物聯(lián)網(wǎng)技術(shù)與區(qū)塊鏈相結(jié)合實(shí)現(xiàn)防篡改、透明化、可溯源的農(nóng)產(chǎn)品溯源系統(tǒng)。文獻(xiàn)[16]結(jié)合以太坊智能合約和星際文件系統(tǒng)(InterPlanetary file system,IPFS)管理和控制供應(yīng)鏈生態(tài)系統(tǒng)中所有參與者之間的交互和交易,并在大豆供應(yīng)鏈方面實(shí)現(xiàn)了溯源應(yīng)用。文獻(xiàn)[17]設(shè)計(jì)出一種基于邊緣計(jì)算和區(qū)塊鏈的防偽溯源模型,并采用離散波長轉(zhuǎn)換和遺傳算法來提高系統(tǒng)的安全性,優(yōu)化系統(tǒng)的性能。文獻(xiàn)[18]提出了“On-Chain+Off-Chain”的農(nóng)產(chǎn)品質(zhì)量安全溯源策略,降低鏈上存儲空間壓力的同時實(shí)現(xiàn)了農(nóng)產(chǎn)品供應(yīng)鏈之間溯源信息的真實(shí)可靠。文獻(xiàn)[19]通過智能合約實(shí)現(xiàn)果蔬農(nóng)產(chǎn)品溯源模型,并提出了對稱加密與橢圓曲線混合加密的隱私數(shù)據(jù)授權(quán)訪問方法,實(shí)現(xiàn)供應(yīng)鏈各企業(yè)間隱私數(shù)據(jù)的隔離存儲。根據(jù)文獻(xiàn)表明,眾多區(qū)塊鏈技術(shù)研究人員研究農(nóng)產(chǎn)品和食品安全溯源相關(guān)領(lǐng)域[20-22],實(shí)現(xiàn)全食品業(yè)和農(nóng)業(yè)生產(chǎn)信息透明化和共享數(shù)據(jù)精準(zhǔn)化[23],從源頭解決食品和農(nóng)產(chǎn)品質(zhì)量安全問題是未來的發(fā)展趨勢[24]。然而,將區(qū)塊鏈技術(shù)應(yīng)用于馬鈴薯種薯的生產(chǎn)溯源方面的研究較少。此外,種薯生產(chǎn)期間的實(shí)物形態(tài)差異化明顯[25],在生產(chǎn)過程中易出現(xiàn)品種、等級等竄貨問題,將區(qū)塊鏈技術(shù)應(yīng)用于馬鈴薯種薯生產(chǎn)溯源時,還應(yīng)考慮其生產(chǎn)竄貨問題。
針對上述問題,結(jié)合分析馬鈴薯種薯生產(chǎn)過程中的關(guān)鍵環(huán)節(jié)及溯源數(shù)據(jù),本文提出一種基于智能合約[26-27]和數(shù)字簽名[28-29]的馬鈴薯種薯防竄與溯源方法,為種薯整個生產(chǎn)環(huán)節(jié)設(shè)計(jì)一條溯源區(qū)塊鏈。以智能合約和數(shù)字簽名為實(shí)現(xiàn)方式,解決種薯的生產(chǎn)竄貨問題,并保障種薯各項(xiàng)生產(chǎn)溯源數(shù)據(jù)的安全可靠,最終提高種薯生產(chǎn)基地的整體生產(chǎn)效率。采用Raft共識機(jī)制[30]實(shí)現(xiàn)區(qū)塊鏈間的節(jié)點(diǎn)共識,每個環(huán)節(jié)作為種薯區(qū)塊鏈中的聯(lián)盟組織,每個聯(lián)盟組織中都包含多個節(jié)點(diǎn)共同維護(hù)一個分布式賬本,實(shí)現(xiàn)種薯生產(chǎn)溯源數(shù)據(jù)的真實(shí)可信;利用數(shù)字簽名機(jī)制與種薯生產(chǎn)過程中的接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)進(jìn)行公私鑰對綁定,用于防止種薯生產(chǎn)竄貨的第1層保障;通過智能合約實(shí)現(xiàn)種薯培育目的地的防竄貨報(bào)警設(shè)計(jì),使種薯區(qū)塊鏈網(wǎng)絡(luò)中的所有節(jié)點(diǎn)背書完成后共同遵守統(tǒng)一的邏輯規(guī)則,用于防止種薯品種、等級等生產(chǎn)竄貨的第2層保障;同時將報(bào)警信息進(jìn)行上鏈存儲,更高效地解決種薯生產(chǎn)竄貨數(shù)據(jù)的溯源問題;最后對本文所提出的馬鈴薯種薯生產(chǎn)溯源模型通過應(yīng)用案例進(jìn)行驗(yàn)證分析。
馬鈴薯種薯生產(chǎn)過程中涉及的關(guān)鍵環(huán)節(jié)包括種苗資源保存、脫毒苗擴(kuò)繁、原原種培育、原種培育和倉儲環(huán)節(jié)。種薯生產(chǎn)環(huán)節(jié)眾多,實(shí)物形態(tài)在不同的環(huán)節(jié)有所不同,生產(chǎn)基地同時培育的品種繁多,極其容易發(fā)生竄貨問題。因此,本文在深入分析種薯生產(chǎn)全環(huán)節(jié)及關(guān)鍵溯源數(shù)據(jù)的基礎(chǔ)上,在區(qū)塊鏈網(wǎng)絡(luò)中設(shè)計(jì)種薯生產(chǎn)竄貨報(bào)警環(huán)節(jié),一旦發(fā)生竄貨,將進(jìn)入該環(huán)節(jié)進(jìn)行竄貨報(bào)警處理,同時將對應(yīng)竄貨報(bào)警數(shù)據(jù)進(jìn)行上鏈存儲。各環(huán)節(jié)的關(guān)鍵溯源數(shù)據(jù)如表1所示。
表1 種薯生產(chǎn)全環(huán)節(jié)關(guān)鍵溯源數(shù)據(jù)
馬鈴薯種薯生產(chǎn)全環(huán)節(jié)的溯源數(shù)據(jù)參差不齊,目前尚且沒有種薯生產(chǎn)業(yè)務(wù)集成技術(shù)和手段,也沒有統(tǒng)一的生產(chǎn)溯源信息接口和標(biāo)準(zhǔn)規(guī)范,造成了種薯生產(chǎn)全環(huán)節(jié)的信息孤島,不僅影響種薯生產(chǎn)基地的總體生產(chǎn)效率,還使消費(fèi)者和相關(guān)監(jiān)管部門可信溯源困難。區(qū)塊鏈技術(shù)具有去中心化、篡改存儲數(shù)據(jù)困難、多節(jié)點(diǎn)共同維護(hù)、數(shù)據(jù)透明等特點(diǎn),通過分布式網(wǎng)絡(luò)中的各節(jié)點(diǎn)數(shù)據(jù)備份實(shí)現(xiàn)溯源數(shù)據(jù)的安全存儲。本文通過開源許可區(qū)塊鏈框架Hyperledger Fabric使種薯生產(chǎn)全環(huán)節(jié)共同維護(hù)一個區(qū)塊鏈賬本,每個相關(guān)環(huán)節(jié)安裝不同的智能合約,利用智能合約完成溯源數(shù)據(jù)的更新上鏈,不相關(guān)的環(huán)節(jié)無法相互之間進(jìn)行種薯轉(zhuǎn)送交易操作和溯源數(shù)據(jù)更新上鏈,以此來規(guī)范化種薯生產(chǎn)流程,最終提高可信溯源。種薯生產(chǎn)溯源區(qū)塊鏈網(wǎng)絡(luò)模型如圖1所示。
圖1 種薯生產(chǎn)溯源區(qū)塊鏈網(wǎng)絡(luò)模型
種薯生產(chǎn)全過程的溯源數(shù)據(jù)通過一條綜合區(qū)塊鏈進(jìn)行存儲,將種薯生產(chǎn)溯源中的全部環(huán)節(jié)映射為區(qū)塊鏈中的相關(guān)組織,即種苗資源保存組織、脫毒苗擴(kuò)繁組織、原原種培育組織、原種培育組織和倉儲組織,將防竄報(bào)警環(huán)節(jié)映射為竄貨報(bào)警處理組織,并將各個環(huán)節(jié)的關(guān)鍵溯源數(shù)據(jù)均通過智能合約進(jìn)行上鏈存儲,非關(guān)鍵溯源數(shù)據(jù)使用傳統(tǒng)數(shù)據(jù)庫存儲,可以從源頭減輕區(qū)塊鏈的存儲壓力。同時,將消費(fèi)者、相關(guān)監(jiān)管部門等溯源用戶映射為外部組織,作為查詢相關(guān)溯源數(shù)據(jù)的組織節(jié)點(diǎn)。區(qū)塊鏈中的每個組織都有自己的peer節(jié)點(diǎn)來分布式存儲對應(yīng)溯源數(shù)據(jù),每批種薯都有一個唯一的批次編號,種薯在全部生產(chǎn)環(huán)節(jié)流通時都需關(guān)聯(lián)此唯一批次編號上傳所有關(guān)鍵溯源數(shù)據(jù)。此外,本文還利用區(qū)塊鏈種薯全生產(chǎn)鏈全連接溯源編碼設(shè)計(jì)為每個生產(chǎn)環(huán)節(jié)對應(yīng)產(chǎn)生一個與批次編號相關(guān)聯(lián)的二級編號,如資源編號對應(yīng)種苗資源保存環(huán)節(jié)、擴(kuò)繁編號對應(yīng)脫毒苗擴(kuò)繁環(huán)節(jié)等。
在種薯區(qū)塊鏈溯源模型中,需通過種薯溯源編碼在區(qū)塊鏈網(wǎng)絡(luò)中獲取該編碼所對應(yīng)的全部生產(chǎn)溯源數(shù)據(jù)。為了使區(qū)塊鏈種薯溯源編碼具有唯一溯源性,設(shè)計(jì)區(qū)塊鏈種薯全生產(chǎn)鏈全連接編碼,并利用該編碼與對應(yīng)種薯生產(chǎn)全環(huán)節(jié)溯源數(shù)據(jù)相關(guān)聯(lián)。種薯溯源編碼在馬鈴薯種苗資源保存環(huán)節(jié)進(jìn)行批次編碼初始化處理,包含種苗資源保存環(huán)節(jié)在內(nèi)的種薯生產(chǎn)全環(huán)節(jié)開始培育時,順序連接對應(yīng)環(huán)節(jié)的溯源編碼,在倉儲環(huán)節(jié)實(shí)現(xiàn)種薯溯源編碼的全環(huán)節(jié)連接,最終聚焦到以箱為單位的種薯溯源編碼,實(shí)現(xiàn)一箱一碼,保證種薯溯源編碼的唯一性,為利用區(qū)塊鏈技術(shù)實(shí)現(xiàn)種薯防竄生產(chǎn)溯源打下源頭基礎(chǔ)。
具體編碼設(shè)計(jì)如表2所示,例如,在種苗資源保存環(huán)節(jié)進(jìn)行批次編碼初始化處理,此時的種薯批次編碼為B001。在種苗資源保存環(huán)節(jié)開始對該批次編碼所對應(yīng)的種苗進(jìn)行培育時,順序連接種苗資源保存環(huán)節(jié)的溯源編碼R001,此時對應(yīng)種薯溯源編碼為B001R001,直至對應(yīng)種薯順利進(jìn)入倉儲環(huán)節(jié),形成最終種薯溯源編碼為B001R001D001YY001Y001WH001。當(dāng)對應(yīng)種薯在其生產(chǎn)過程中發(fā)生竄貨報(bào)警時,將不繼續(xù)連接當(dāng)前發(fā)生竄貨環(huán)節(jié)的對應(yīng)環(huán)節(jié)編碼,種薯溯源編碼的連接停留在上一環(huán)節(jié),同時生成對應(yīng)竄貨報(bào)警編碼。例如,對應(yīng)種薯在脫毒苗擴(kuò)繁環(huán)節(jié)發(fā)生竄貨報(bào)警,則此時的種薯溯源編碼為B001R001,對應(yīng)竄貨報(bào)警編碼為W001。此外,所有環(huán)節(jié)的溯源編碼數(shù)字項(xiàng)順序生成。例如,批次編碼為B001的下一批次編碼為B002。
表2 區(qū)塊鏈種薯全生產(chǎn)鏈全連接溯源編碼設(shè)計(jì)
種薯生產(chǎn)各環(huán)節(jié)的培育節(jié)點(diǎn)眾多,生產(chǎn)基地繁育品種數(shù)量龐大,由于對應(yīng)種薯被送往錯誤接收環(huán)節(jié)培育節(jié)點(diǎn)而引發(fā)的生產(chǎn)竄貨問題頻繁出現(xiàn),嚴(yán)重降低整體生產(chǎn)效率。橢圓曲線數(shù)字簽名算法(Elliptic curve digital signature algorithm,ECDSA)是一種非對稱加密算法,使用私鑰簽名、公鑰驗(yàn)證確保數(shù)據(jù)的真實(shí)性并防止交易數(shù)據(jù)被篡改,使用公鑰加密、私鑰解密確??沈?yàn)證節(jié)點(diǎn)的唯一性。同時,ECDSA具有在已知公鑰的情況下,無法推導(dǎo)出該公鑰對應(yīng)私鑰的特點(diǎn),本文利用該特點(diǎn)對種苗/薯轉(zhuǎn)送交易進(jìn)行公鑰數(shù)字簽名加密,相關(guān)接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)使用本節(jié)點(diǎn)私鑰進(jìn)行解密驗(yàn)證,確保該種苗/薯轉(zhuǎn)送接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)的唯一正確性。該方法是種苗/薯接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)的歸屬證明,實(shí)現(xiàn)防止種薯生產(chǎn)竄貨的第1層保障。橢圓曲線公式為
y2=x3+ax+b(modp) (4a3+27b2≠0(modp))
(1)
式中a、b——橢圓曲線參數(shù)
p——質(zhì)數(shù) mod——取模運(yùn)算符
以資源保存環(huán)節(jié)培育完畢,需要將種苗送往脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)進(jìn)行培育為例,橢圓曲線數(shù)字簽名加密、解密過程如下:
(1)脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)選定一條橢圓曲線Fp(a,b),同時選取橢圓曲線上一點(diǎn)作為基點(diǎn)G,其中n為橢圓曲線的階,即nG=∞。
(2)脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)選擇一個隨機(jī)數(shù)作為私有密鑰k,并根據(jù)離散點(diǎn)計(jì)算原則生成公有密鑰K=kG。
(3)脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)將橢圓Fp(a,b)和點(diǎn)G、K傳送給種苗資源保存環(huán)節(jié)對應(yīng)節(jié)點(diǎn)。
(4)種苗資源保存環(huán)節(jié)對應(yīng)節(jié)點(diǎn)接到信息后,將待傳輸?shù)拿魑木幋a到Fp(a,b)上的一點(diǎn)A,并產(chǎn)生一個隨機(jī)整數(shù)r(r (5)種苗資源保存環(huán)節(jié)對應(yīng)節(jié)點(diǎn)通過橢圓曲線公鑰K加密:C1=A+rK,C2=rG,加密后的數(shù)字簽名密文C是一個點(diǎn)對。 (6)脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)接收到數(shù)字簽名密文C后,可通過私鑰k解密C1-kC2,計(jì)算A+rK-k(rG)=A,對點(diǎn)A解碼就可以得到明文。以種苗資源保存環(huán)節(jié)和脫毒苗擴(kuò)繁環(huán)節(jié)為例,數(shù)字簽名機(jī)制如圖2所示。 圖2 數(shù)字簽名機(jī)制 在種薯生產(chǎn)溯源區(qū)塊鏈網(wǎng)絡(luò)中,每個節(jié)點(diǎn)都擁有所有節(jié)點(diǎn)的公鑰以及本節(jié)點(diǎn)的私鑰,通過公私鑰對嚴(yán)格匹配的策略確保種苗/薯轉(zhuǎn)送接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)的唯一正確性。例如,種苗在資源保存環(huán)節(jié)培育完畢,需要將其送往脫毒苗擴(kuò)繁環(huán)節(jié)進(jìn)行下一步培育,資源保存環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)會在區(qū)塊鏈網(wǎng)絡(luò)中產(chǎn)生一個種苗轉(zhuǎn)送交易,并使用脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)接收節(jié)點(diǎn)的公鑰對該交易進(jìn)行數(shù)字簽名加密。脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)接收到需要進(jìn)行下一步培育的種苗后,需使用本節(jié)點(diǎn)的私鑰對該種苗轉(zhuǎn)送交易進(jìn)行數(shù)字簽名解密驗(yàn)證。解密驗(yàn)證成功,則說明接收節(jié)點(diǎn)正確,可以記錄脫毒苗擴(kuò)繁環(huán)節(jié)相關(guān)上鏈數(shù)據(jù);解密驗(yàn)證失敗,則說明接收節(jié)點(diǎn)錯誤,可能發(fā)生竄貨,此時會觸發(fā)竄貨報(bào)警處理,給予相關(guān)竄貨報(bào)警提示,并將對應(yīng)報(bào)警信息進(jìn)行上鏈存儲。 種薯生產(chǎn)基地培育品種繁多,除接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)易發(fā)生竄貨問題外,培育節(jié)點(diǎn)因錯誤識別種薯品種、等級等信息,致使種薯的培育方式發(fā)生改變、種薯成品混雜的情況也頻繁發(fā)生,最終導(dǎo)致種薯整體生產(chǎn)效率和質(zhì)量水平低下。解決種薯生產(chǎn)竄貨問題是本文的研究重點(diǎn),通過智能合約與數(shù)字簽名相結(jié)合的方式實(shí)現(xiàn)防止種薯生產(chǎn)竄貨的雙層保障。在種薯生產(chǎn)溯源區(qū)塊鏈中,每個相關(guān)環(huán)節(jié)間都需安裝部署對應(yīng)的區(qū)塊鏈智能合約,在數(shù)字簽名驗(yàn)證接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)正確后,通過智能合約將當(dāng)前種苗/薯與對應(yīng)鏈上存儲信息進(jìn)行對比,符合竄貨條件時觸發(fā)竄貨報(bào)警處理,實(shí)現(xiàn)防止種薯生產(chǎn)竄貨的第2層保障。實(shí)物數(shù)據(jù)采集通過種薯生產(chǎn)全環(huán)節(jié)安裝部署各種物聯(lián)網(wǎng)設(shè)備獲取,通過二維碼等標(biāo)識技術(shù)結(jié)合區(qū)塊鏈種薯全生產(chǎn)鏈全連接溯源編碼將實(shí)物數(shù)據(jù)對應(yīng)轉(zhuǎn)化為數(shù)字?jǐn)?shù)據(jù)并存入?yún)^(qū)塊鏈中,所有生產(chǎn)環(huán)節(jié)都進(jìn)行上述實(shí)物與鏈上數(shù)據(jù)的錨定。 智能合約是運(yùn)行在區(qū)塊鏈網(wǎng)絡(luò)中的一種計(jì)算機(jī)協(xié)議,以代碼的形式體現(xiàn)出該協(xié)議去中心化、自動執(zhí)行、高確定性、高自治性等特點(diǎn),區(qū)塊鏈中的相關(guān)節(jié)點(diǎn)均安裝部署對應(yīng)智能合約則可以達(dá)到網(wǎng)絡(luò)環(huán)境高度自治的效果。在本文所提出的種薯防竄報(bào)警溯源模型中,智能合約可以實(shí)現(xiàn)種薯全生產(chǎn)環(huán)節(jié)溯源數(shù)據(jù)的安全上鏈、按合約條件觸發(fā)防竄報(bào)警機(jī)制、查詢具體溯源數(shù)據(jù)等功能,實(shí)現(xiàn)對種薯生產(chǎn)全環(huán)節(jié)溯源數(shù)據(jù)的全方位正向記錄、逆向溯源,為種薯生產(chǎn)基地提供強(qiáng)大的數(shù)據(jù)記錄與查詢、防止種薯生產(chǎn)竄貨的技術(shù)支撐。利用智能合約完成種薯開始培育前的品種、等級等自動化確認(rèn),與前生產(chǎn)環(huán)節(jié)的上鏈信息進(jìn)行對比驗(yàn)證,有效防止種薯生產(chǎn)竄貨的問題,也為生產(chǎn)基地、消費(fèi)者和相關(guān)監(jiān)管部門等追溯用戶提供安全可信的溯源信息。種薯防竄報(bào)警溯源模型如圖3所示。 圖3 種薯防竄報(bào)警溯源模型 在該模型中,由于種苗資源保存環(huán)節(jié)是種薯生產(chǎn)全環(huán)節(jié)的初始環(huán)節(jié),不存在生產(chǎn)竄貨的發(fā)生,因此不在該環(huán)節(jié)中設(shè)計(jì)竄貨報(bào)警智能合約,僅利用智能合約將相關(guān)生產(chǎn)溯源數(shù)據(jù)進(jìn)行上鏈存儲。脫毒苗擴(kuò)繁及其后環(huán)節(jié)將對接收種苗/薯的實(shí)際情況與前環(huán)節(jié)上傳的溯源數(shù)據(jù)進(jìn)行對比分析,作為判斷當(dāng)前環(huán)節(jié)是否發(fā)生竄貨的數(shù)據(jù)依據(jù),同時將該溯源數(shù)據(jù)作為全部種薯生產(chǎn)溯源數(shù)據(jù)的一部分。種薯生產(chǎn)全環(huán)節(jié)將本環(huán)節(jié)培育完畢的種苗/薯送往至下一生產(chǎn)環(huán)節(jié)進(jìn)行培育時,需要使用接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)的公鑰對種苗/薯轉(zhuǎn)送交易進(jìn)行數(shù)字簽名加密,接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)收到該種苗/薯時,需要使用本節(jié)點(diǎn)私鑰對已加密的前環(huán)節(jié)種苗/薯轉(zhuǎn)送交易進(jìn)行數(shù)字簽名解密驗(yàn)證。解密驗(yàn)證失敗,則說明接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)錯誤,此時通過智能合約觸發(fā)相關(guān)竄貨報(bào)警處理;解密驗(yàn)證成功,則說明接收環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)正確,此時會自動調(diào)用智能合約要求該節(jié)點(diǎn)通過各種物聯(lián)網(wǎng)設(shè)備獲取并錄入對應(yīng)培育節(jié)點(diǎn)當(dāng)前接收種苗/薯的品種、等級等信息,并與前環(huán)節(jié)相關(guān)節(jié)點(diǎn)存入?yún)^(qū)塊鏈網(wǎng)絡(luò)中的信息進(jìn)行對比,全部符合則說明種苗/薯送至正確培育節(jié)點(diǎn)目的地,同時正確識別該種薯的品種、等級等信息,并正確安排其對應(yīng)培育方式;有一項(xiàng)及以上不符合則說明種薯送至正確培育節(jié)點(diǎn)目的地,但錯誤識別該種苗/薯的品種、等級等信息,無法正確安排其對應(yīng)培育方式,此時進(jìn)行竄貨報(bào)警處理,將種薯溯源編號、報(bào)警編號、報(bào)警時間、報(bào)警環(huán)節(jié)等相關(guān)竄貨報(bào)警信息存儲至區(qū)塊鏈網(wǎng)絡(luò)中,并給予相關(guān)竄貨報(bào)警提示。此外,利用區(qū)塊鏈存儲數(shù)據(jù)的不可篡改等特性,使得種薯生產(chǎn)溯源數(shù)據(jù)在區(qū)塊鏈溯源網(wǎng)絡(luò)中得以可信存儲,并利用不同數(shù)據(jù)查詢智能合約實(shí)現(xiàn)不同追溯用戶的溯源查詢,種薯生產(chǎn)基地、消費(fèi)者和相關(guān)監(jiān)管部門可通過溯源節(jié)點(diǎn)調(diào)用對應(yīng)數(shù)據(jù)查詢智能合約獲取區(qū)塊鏈中對應(yīng)種薯的相關(guān)溯源信息。 本文使用Hyperledger Fabric平臺,結(jié)合種薯種植領(lǐng)域?qū)<乙庖?、種薯生產(chǎn)基地的實(shí)際情況等制定相關(guān)的智能合約規(guī)則和一系列合約觸發(fā)條件。智能合約業(yè)務(wù)邏輯設(shè)計(jì)如表3所示。 表3 智能合約設(shè)計(jì) 將種薯各生產(chǎn)環(huán)節(jié)的溯源信息寫入?yún)^(qū)塊鏈均由智能合約實(shí)現(xiàn)。在各環(huán)節(jié)上傳對應(yīng)生產(chǎn)溯源信息時,如果發(fā)生竄貨則會觸發(fā)防竄報(bào)警智能合約,接續(xù)進(jìn)行防竄報(bào)警處理。具體算法如下: 算法1:發(fā)送方數(shù)據(jù)上鏈智能合約 輸入:以種苗資源保存環(huán)節(jié)為例,批次編號BatchId,資源編號ResourceId,種苗名稱SeedName,品種名稱BreedName等 輸出:上鏈成功返回交易ID,區(qū)塊高度numBlock,數(shù)據(jù)哈希dataHash,前一個區(qū)塊哈希previousHash,上鏈?zhǔn)》祷劐e誤原因 區(qū)塊鏈中的種苗資源保存環(huán)節(jié)對應(yīng)peer節(jié)點(diǎn)發(fā)起invoke上鏈請求 if len(args)∥判斷請求中的數(shù)組長度是否符合規(guī)定長度標(biāo)準(zhǔn) return shim.Error;∥數(shù)組長度不符合標(biāo)準(zhǔn),上鏈?zhǔn)?返回具體錯誤原因 else∥符合上鏈要求,請求上鏈 ECDSA_Encode();∥使用接收節(jié)點(diǎn)公鑰加密 APIstub.PutState(args[2],resourceGrowInfoAsBytes); return success;∥返回交易基本信息 算法2:接收方數(shù)據(jù)上鏈智能合約 輸入:以脫毒苗擴(kuò)繁環(huán)節(jié)為例,批次編號BatchId,種苗名稱SeedName,擴(kuò)繁編號DetoxificateId,品種名稱BreedName等 輸出:上鏈成功返回交易ID,區(qū)塊高度numBlock,數(shù)據(jù)哈希dataHash,前一個區(qū)塊哈希previousHash,上鏈?zhǔn)》祷劐e誤原因 區(qū)塊鏈中的脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)peer節(jié)點(diǎn)發(fā)起invoke上鏈請求 if len(args)∥判斷請求中的數(shù)組長度是否符合長度標(biāo)準(zhǔn) err := ECDSA_Decode;∥使用本節(jié)點(diǎn)私鑰解密 if err != nil∥判斷私鑰是否解密成功 recordWarn();∥解密失敗,觸發(fā)防竄報(bào)警合約 return shim.Error;∥返回具體錯誤原因 else∥解密成功 if args[1]!= resourceBatchIdGrow∥判斷請求中的批次ID是否與前生產(chǎn)環(huán)節(jié)對應(yīng)上鏈數(shù)據(jù)相符 recordWarn();∥如果批次ID不符則觸發(fā)防竄報(bào)警合約 return shim.Error;∥上鏈?zhǔn)?返回具體錯誤原因 elseif args[2]!= resourceResourceIdGrow∥判斷請求中的資源ID是否與前生產(chǎn)環(huán)節(jié)對應(yīng)上鏈數(shù)據(jù)相符 recordWarn();∥如果資源ID不符則觸發(fā)防竄報(bào)警合約 return shim.Error;∥上鏈?zhǔn)?返回具體錯誤原因 elseif args[3]!= resourceSeedNameGrow∥判斷請求中的種苗名稱是否與前生產(chǎn)環(huán)節(jié)對應(yīng)上鏈數(shù)據(jù)相符 recordWarn();∥如果種苗名稱不符則觸發(fā)防竄報(bào)警合約 return shim.Error;∥上鏈?zhǔn)?返回具體錯誤原因 elseif args[4]!= resourceBreedNameGrow∥判斷請求中的品種名稱是否與前生產(chǎn)環(huán)節(jié)對應(yīng)上鏈數(shù)據(jù)相符 recordWarn();∥如果品種名稱不符則觸發(fā)防竄報(bào)警合約 return shim.Error;∥上鏈?zhǔn)?返回具體錯誤原因 else∥符合上鏈要求,請求上鏈 APIstub.PutState(args[5],detoxificateGrowInfoAsBytes); return success;∥返回交易基本信息 竄貨報(bào)警智能合約將觸發(fā)竄貨報(bào)警時的相關(guān)報(bào)警信息進(jìn)行上鏈存儲。具體算法如下: 算法3:竄貨報(bào)警智能合約 輸入:種薯當(dāng)前編號NowSeedPotatoId,報(bào)警時間WarnTime,報(bào)警環(huán)節(jié)WarnLink等 輸出:上鏈成功返回交易ID,區(qū)塊高度numBlock,數(shù)據(jù)哈希dataHash,前一個區(qū)塊哈希previousHash,上鏈?zhǔn)》祷劐e誤原因 觸發(fā)防竄報(bào)警時發(fā)起報(bào)警數(shù)據(jù)上鏈請求 if len(args)∥判斷請求中的數(shù)組長度是否符合規(guī)定長度標(biāo)準(zhǔn) return shim.Error;∥數(shù)組長度不符合標(biāo)準(zhǔn),上鏈?zhǔn)?返回具體錯誤原因 var warnInfo = WarnInfo{BatchId: args[1], NowSeedPotatoId: args[2], WarnId: args[3], WarnTime: args[4], WarnLink: args[5], WarnPoint: args[6], WorkerId: args[7], WorkerName: args[8]};∥將報(bào)警信息存入待上鏈數(shù)組 APIstub.PutState(args[2], warnInfoAsBytes);∥請求上鏈 return success;∥返回交易基本信息 數(shù)據(jù)查詢智能合約在區(qū)塊鏈中通過用戶輸入的查詢編號進(jìn)行對應(yīng)的數(shù)據(jù)查詢。具體算法如下: 算法4:數(shù)據(jù)查詢智能合約 輸入:以查詢竄貨報(bào)警信息為例,報(bào)警編號WarnId 輸出:報(bào)警編號對應(yīng)的具體信息 if len(args)∥判斷請求中的數(shù)組長度是否符合規(guī)定長度標(biāo)準(zhǔn) return shim.Error;∥查詢失敗,返回具體錯誤原因 warnInfoAsBytes, _ := APIstub.GetState(args[0]);∥通過當(dāng)前Key值獲取對應(yīng)Value值 retrun success;∥查詢成功,返回?cái)?shù)據(jù) 本研究基于Hyperledger Fabric構(gòu)建面向種薯生產(chǎn)全環(huán)節(jié)溯源的模型架構(gòu),通過區(qū)塊鏈技術(shù)對溯源數(shù)據(jù)進(jìn)行管理和維護(hù),實(shí)現(xiàn)種薯生產(chǎn)全環(huán)節(jié)溯源數(shù)據(jù)的高度共享;種薯各生產(chǎn)環(huán)節(jié)分布式上傳本環(huán)節(jié)內(nèi)的溯源數(shù)據(jù),并利用數(shù)字簽名結(jié)合智能合約的方式高效防止生產(chǎn)竄貨的發(fā)生,保證各生產(chǎn)環(huán)節(jié)種薯溯源數(shù)據(jù)的真實(shí)性、實(shí)時性以及安全性。種薯生產(chǎn)溯源模型架構(gòu)如圖4所示,共分為4層,由下至上分別為存儲層、服務(wù)層、接口層和應(yīng)用層。 圖4 種薯生產(chǎn)溯源模型架構(gòu) 存儲層利用區(qū)塊鏈技術(shù)不可篡改等特點(diǎn),實(shí)現(xiàn)所有相關(guān)節(jié)點(diǎn)共同維護(hù)同一個數(shù)據(jù)賬本,且所有交易操作均記錄對應(yīng)時間戳,確保生產(chǎn)溯源數(shù)據(jù)的真實(shí)可靠。同時,為減少種薯溯源的查詢時間,溯源數(shù)據(jù)通過面向文檔的數(shù)據(jù)庫管理系統(tǒng)(Cluster of unreliable commodity hardware database,CouchDB)存儲,并通過Key-Value鍵值索引進(jìn)行數(shù)據(jù)查詢;服務(wù)層采用Raft共識機(jī)制,以智能合約為具體實(shí)現(xiàn)方式,結(jié)合ECDSA橢圓曲線數(shù)字簽名算法,保證種薯生產(chǎn)全環(huán)節(jié)溯源數(shù)據(jù)的成功上鏈,實(shí)現(xiàn)防止生產(chǎn)竄貨的自動處理;接口層面向種薯生產(chǎn)過程中的5個關(guān)鍵溯源環(huán)節(jié)和1個竄貨報(bào)警環(huán)節(jié),封裝相關(guān)溯源數(shù)據(jù)公鑰加密接口、私鑰解密接口以及對于種薯生產(chǎn)溯源數(shù)據(jù)和竄貨報(bào)警數(shù)據(jù)上鏈接口和查詢接口,滿足種薯生產(chǎn)全環(huán)節(jié)的溯源數(shù)據(jù)共享、查詢以及防止生產(chǎn)竄貨的發(fā)生等需求;應(yīng)用層通過系統(tǒng)為種薯生產(chǎn)全環(huán)節(jié)的相關(guān)方提供不同的便捷服務(wù)。 本文所提出的馬鈴薯種薯防竄溯源模型應(yīng)用于云南省馬鈴薯種薯質(zhì)量溯源系統(tǒng),種薯生產(chǎn)全環(huán)節(jié)節(jié)點(diǎn)通過對應(yīng)區(qū)塊鏈接口在該系統(tǒng)中實(shí)現(xiàn)種薯生產(chǎn)溯源數(shù)據(jù)的上傳及查詢功能,系統(tǒng)網(wǎng)絡(luò)中的所有節(jié)點(diǎn)共享一個區(qū)塊鏈分布式帳本,共同參與全網(wǎng)的共識記賬。如圖5a所示,種薯生產(chǎn)過程中的5個關(guān)鍵環(huán)節(jié)均可以上傳相關(guān)溯源信息。上傳成功,則會在系統(tǒng)中生成相應(yīng)的環(huán)節(jié)編號,并在狀態(tài)欄顯示成功,同時會顯示該上傳操作交易在區(qū)塊鏈網(wǎng)絡(luò)中生成的區(qū)塊高度以及區(qū)塊交易ID;上傳失敗,則會在系統(tǒng)中生成相應(yīng)的竄貨報(bào)警編號,在狀態(tài)欄中顯示失敗,并給出竄貨報(bào)警提示。如圖5b所示,可根據(jù)竄貨報(bào)警編號查詢對應(yīng)竄貨報(bào)警的詳細(xì)信息。在該系統(tǒng)中設(shè)有用戶節(jié)點(diǎn)權(quán)限機(jī)制,用戶節(jié)點(diǎn)只能進(jìn)行本環(huán)節(jié)內(nèi)的相關(guān)種薯生產(chǎn)溯源信息上傳等操作,不能進(jìn)行其他環(huán)節(jié)的相關(guān)操作。同時,所有生產(chǎn)環(huán)節(jié)生成的交易操作信息、種薯溯源信息和竄貨報(bào)警信息的詳情全部用戶節(jié)點(diǎn)均可查看,可用來監(jiān)督種薯生產(chǎn)全環(huán)節(jié)間共享原始數(shù)據(jù)。 圖5 云南省馬鈴薯種薯質(zhì)量溯源系統(tǒng)界面 同時,為滿足相關(guān)用戶溯源需求,種薯質(zhì)量溯源系統(tǒng)提供掃碼溯源功能,可通過掃描種薯外包裝上的二維碼獲取相關(guān)生產(chǎn)溯源數(shù)據(jù)。如圖6所示,經(jīng)過查詢后,可獲取產(chǎn)品介紹信息、企業(yè)信息、溯源信息和防偽信息。其中溯源信息展示種薯生產(chǎn)全環(huán)節(jié)的關(guān)鍵數(shù)據(jù),防偽信息展示區(qū)塊鏈地址、追溯Hash值、區(qū)塊高度等信息。 圖6 掃碼溯源界面 本研究的測試環(huán)境基于Hyperledger Fabric 1.4.4、Hyperledger Explorer 1.1.8搭建,使用虛擬機(jī)系統(tǒng)版本為Ubuntu 16.04 LTS。性能測試將智能合約通過balance-transfer接口進(jìn)行封裝,使用外部接口測試工具Postman 9.31.0進(jìn)行30輪次的測試。硬件配置為:4 GB內(nèi)存、8核處理器、50 GB硬盤。區(qū)塊鏈通過16個節(jié)點(diǎn)存儲種薯生產(chǎn)溯源數(shù)據(jù),其中包含種苗資源保存節(jié)點(diǎn)、脫毒苗擴(kuò)繁節(jié)點(diǎn)、原原種培育節(jié)點(diǎn)、原種培育節(jié)點(diǎn)、竄貨報(bào)警節(jié)點(diǎn)、外部溯源節(jié)點(diǎn)各2個,另外包含倉儲節(jié)點(diǎn)4個。種薯區(qū)塊鏈中的所有節(jié)點(diǎn)均采用狀態(tài)數(shù)據(jù)庫CouchDB存儲上鏈數(shù)據(jù),通過Key-Value鍵值對檢索狀態(tài)數(shù)據(jù)庫查詢相應(yīng)數(shù)據(jù)。具體測試環(huán)境配置如表4所示。 表4 區(qū)塊鏈配置信息 測試以脫毒苗擴(kuò)繁環(huán)節(jié)接收種苗進(jìn)行下一階段培育,將該接收種苗的相關(guān)信息進(jìn)行上鏈為例。如圖7a所示,如果脫毒苗擴(kuò)繁環(huán)節(jié)對應(yīng)培育節(jié)點(diǎn)私鑰解密失敗,或申請入培養(yǎng)室時上傳的種苗相關(guān)信息與區(qū)塊鏈賬本中存儲的該種苗對應(yīng)品種、等級等信息不符時,則將該上鏈申請給予竄貨報(bào)警處理,并給出竄貨報(bào)警原因提示。如圖7b所示,通過Hyperledger explorer顯示該竄貨報(bào)警交易所在區(qū)塊信息,其中區(qū)塊高度(區(qū)塊號)為2701,區(qū)塊哈希為6939b143ab66e4db59e89ee9c6c9612461fbf1daba8523 6ac0e1b2908341fa8b,前一區(qū)塊哈希為99bc65133e 24ad81bf3cbdcc7a87e97084aee88d0081ad4e67cbdc19 11018371。竄貨報(bào)警交易詳情如圖7c所示,其中交易ID為b3a2c205f71c2fd17c58e3c9cae0e4262fd946f 3be6019e86f87b0838948c12d,調(diào)用鏈碼為alarmcc,寫入賬本的Key為“W230”(竄貨報(bào)編號)、Value為“batch_id:B288,trace_seed_potato_id:B288R016,warn_id:W230,warn_time:2022-11-25 11:50:18,warn_link:脫毒苗擴(kuò)繁環(huán)節(jié),warn_point:私鑰解密失敗,worker_id:DW018,worker_name:袁藝”(種薯溯源編號、竄貨報(bào)警時間、環(huán)節(jié)、觸發(fā)點(diǎn))等信息。 圖7 防竄報(bào)警功能測試 4.3.1種薯生產(chǎn)溯源數(shù)據(jù)上鏈與查詢 數(shù)據(jù)上鏈性能測試結(jié)果如圖8a所示,種薯生產(chǎn)溯源數(shù)據(jù)的平均上鏈時間為2 566 ms,能夠滿足種薯生產(chǎn)基地全環(huán)節(jié)實(shí)時更新種薯溯源數(shù)據(jù)的需求;數(shù)據(jù)查詢性能測試結(jié)果如圖8b所示,種薯生產(chǎn)溯源數(shù)據(jù)的平均查詢時間為95 ms,能夠滿足相關(guān)溯源用戶快速查詢種薯各項(xiàng)生產(chǎn)信息的需求;由測試結(jié)果可以得出,該種薯防竄溯源區(qū)塊鏈的數(shù)據(jù)上鏈和數(shù)據(jù)查詢效率較高,可以滿足各相關(guān)用戶的日常需求。 圖8 數(shù)據(jù)上鏈與查詢性能測試 4.3.2竄貨報(bào)警觸發(fā)上鏈與查詢 種薯生產(chǎn)溯源防竄設(shè)計(jì)是基于智能合約和數(shù)字簽名實(shí)現(xiàn)的,在某種程度上,這兩種方式的結(jié)合可以在種薯生產(chǎn)過程中高度防止竄貨的發(fā)生。因此,本研究在防竄貨的報(bào)警觸發(fā)與報(bào)警信息上鏈和查詢的平均時間方面進(jìn)行性能分析。測試結(jié)果如圖9所示,報(bào)警觸發(fā)與報(bào)警信息上鏈的平均時間為2 562 ms,查詢具體報(bào)警信息的平均時間為77 ms。由測試結(jié)果可以得出,該種薯防竄溯源區(qū)塊鏈的防竄報(bào)警性能較好,可以滿足種薯生產(chǎn)基地的相關(guān)需求。 圖9 防竄貨性能測試 (1)提出了基于智能合約和數(shù)字簽名的馬鈴薯種薯防竄溯源模型,對種薯的整個生產(chǎn)環(huán)節(jié)建立溯源區(qū)塊鏈,使種薯生產(chǎn)全環(huán)節(jié)共同維護(hù)一個區(qū)塊鏈分布式帳本,保證種薯生產(chǎn)溯源數(shù)據(jù)的統(tǒng)一共享;通過數(shù)字簽名公私鑰對驗(yàn)證和智能合約聯(lián)合解決種薯生產(chǎn)過程中的竄貨問題,防止生產(chǎn)竄貨,提高生產(chǎn)溯源效率和準(zhǔn)確率,滿足種薯生產(chǎn)基地的標(biāo)準(zhǔn)化生產(chǎn)需求。 (2)提出的防竄溯源模型能夠?qū)崿F(xiàn)種薯溯源數(shù)據(jù)的安全存儲,并高度防止生產(chǎn)竄貨的發(fā)生。相關(guān)測試結(jié)果表明,種薯生產(chǎn)溯源數(shù)據(jù)的平均上鏈時間為2 566 ms,平均查詢時間為95 ms,報(bào)警觸發(fā)與報(bào)警信息上鏈的平均時間為2 562 ms,查詢具體報(bào)警信息的平均時間為77 ms,模型性能較高,可以滿足種薯生產(chǎn)溯源數(shù)據(jù)的上鏈與查詢需求,在防止種薯生產(chǎn)竄貨方面具有一定的參考價值。2.3 種薯防竄報(bào)警溯源模型
2.4 智能合約設(shè)計(jì)
3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
3.1 系統(tǒng)架構(gòu)設(shè)計(jì)
3.2 系統(tǒng)實(shí)現(xiàn)
4 系統(tǒng)測試
4.1 測試環(huán)境
4.2 竄貨報(bào)警功能分析
4.3 數(shù)據(jù)上鏈與查詢性能分析
5 結(jié)論