王志鏵,柳平增,宋成寶,宋云勝,張 超,張 艷,吳曉彤,趙 坤
(山東農業大學 a.信息科學與工程學院; b.機械與電子工程學院,山東 泰安 271018)
農產品溯源,即對農產品從生產到流通產業鏈所有環節的正向追蹤與逆向回溯[1]。我國農產品溯源體系經過多年發展日趨完善,但仍存在溯源結果可信度低、系統靈活性差等問題。
為提高農產品溯源系統的可信度與靈活性,可采用區塊鏈替代傳統集中式數據庫,以確保溯源數據安全存儲與信息源頭不可抵賴,從而實現農產品的可信溯源[2]。此外,還可將完整產業鏈解耦為多個獨立環節,與超級賬本中獨立通道結合為環節模塊,配合模塊調配機制并根據實際生產動態調整溯源流程,最終實現農產品的動態溯源。本文在文獻[3-4]所提農產品產業鏈柔性溯源模型的基礎上,結合超級賬本的特點與農產品溯源的可信性及靈活性需求,提出基于區塊鏈的農產品柔性可信溯源模型設計方案。
2006年我國提出建立農產品質量安全追溯體系[5],經過多年發展該項目已經取得豐碩的成果。文獻[6]結合物聯網技術特點提出“一核、雙軸、三鏈”的農產品質量安全追溯系統技術體系。文獻[7]基于食品鏈提出溯源系統的追溯鏈層次模型。文獻[8]針對我國溯源系統分散不集中的特點,設計出農產品質量安全多邊溯源系統。文獻[9]提出基于區塊鏈的供應鏈可信溯源查尋實現方案。文獻[10]構建出基于Fabric區塊鏈實現策略的農產品質量溯源系統設計方案。通過分析典型溯源系統得到國內傳統農產品溯源模型,其結構如圖1所示。

圖1 國內傳統農產品溯源模型結構Fig.1 Structure of domestic traditional agriculturalproducts traceability model
傳統農產品溯源系統普遍以集中式數據庫為中心[11]。在實際生產過程中,產業鏈中生產資料的供應、種植、倉儲、物流、銷售等環節依次排布[12],溯源數據上傳至集中式數據庫[13]。質量監管部門通過調取集中式數據庫的信息以達到監督農產品質量安全的目的。消費者向集中式數據庫發送查詢請求可得到所購農產品的溯源信息。
在農產品溯源研究的前期階段,國內研究人員通常將重點聚焦于溯源數據充分采集與產業鏈完整覆蓋上,而在數據安全存儲和系統動態追溯等方面的研究相對較少,導致傳統農產品溯源系統的可信度與靈活性不足。部分研究人員將區塊鏈技術應用到農產品溯源中,卻很少結合兩者的特點優化溯源流程及系統結構,雖然得到的溯源結果具有可信度,但系統靈活性仍有較大提升空間。
1)可信度
傳統農產品溯源系統將數據存儲在集中式數據庫中,這帶來數據安全問題:(1)企業可能會為自身利益篡改數據,導致無法達到可信溯源的目標;(2)如果系統遭受黑客攻擊或者存儲介質發生損壞,溯源數據會被破壞甚至消失。數據安全問題會導致消費者無法查詢到正確的溯源信息,從而降低農產品溯源系統的可信度。
2)系統靈活性
傳統溯源系統通常針對較窄范圍內特定的農產品進行溯源,溯源對象與生產過程的局限性導致溯源系統的事務處理流程被固化,無法根據實際生產場景動態調整生產環節組合順序,不利于系統功能拓展與升級,導致溯源系統的靈活性較差。
2008年NAKAMOTO提出區塊鏈概念[14],并將其作為比特幣的底層技術支撐。區塊鏈是一種共享賬本,用于數據分布式加密存儲,其融合了計算機網絡、概率論、密碼學等多方面技術,具有去中心化、天然互信、數據不可篡改等特性[15],被廣泛用于金融、能源、征信和貿易等多個領域[16]。
區塊鏈是由區塊有序串聯形成的鏈式數據結構[17],區塊是構成區塊鏈的基本單元,每條區塊鏈都存在于各自所屬的通道x中。區塊鏈包括區塊頭與區塊體,其結構如圖2所示。區塊頭包含版本號、前一區塊Hash、Merkle樹根、時間戳等本區塊元信息。前一區塊Hash字段中保存前一區塊內容的Hash值[18],若前一區塊中任何內容被篡改,則對其內容再次進行Hash運算后的結果就與此字段完全不同[19],由此可定位發生篡改的區塊位置。Merkle樹是一種Hash二叉樹,其葉子結點保存溯源數據,分支節點保存子節點Hash值,底層節點數據發生變化后會逐級向上傳遞到父節點直到Merkle樹根,從而可定位發生篡改的節點位置。

圖2 區塊鏈結構Fig.2 Blockchain structure
區塊鏈按照其對外開放程度分為公有鏈、私有鏈和聯盟鏈。其中:所有人都能參與并維護公有鏈(如比特幣),其在區塊鏈中信息公開,在公有鏈的基礎上引入身份驗證機制可實現私有鏈與聯盟鏈;私有鏈只允許某組織內部少數人參與,對信息保密度要求較高,通常用于企業內部系統;聯盟鏈介于公有鏈與私有鏈之間,由幾個組織共同參與和維護,其所存儲信息也由上述參與方共享,例如銀行聯盟鏈[20]等。
目前區塊鏈主要有以太坊和超級賬本2種實現方式。其中:以太坊屬于公有鏈,對數據的保密度較低,且參與方不易管理[21];超級賬本屬于聯盟鏈,具有權限控制優勢,較以太坊安全程度更高[22]。因此,本文以超級賬本為區塊鏈實現方式來設計基于區塊鏈的農產品柔性可信溯源模型。
超級賬本具有去中心化、天然互信、數據不可篡改以及多通道等特點,其與農產品溯源相結合,既可保證溯源數據的可信度,又能為柔性可信溯源的實現提供架構基礎。
1)去中心化。超級賬本采用分布式存儲結構,其中的peer節點均有同一賬本的完整備份,所有節點共同維護此賬本。超級賬本無集中式管理者,所有peer節點都可給出提案,并在通過共識機制后將新數據同步到每個節點的備份數據中,從而避免農產品溯源系統的控制權由少數用戶掌控。
2)天然互信。由于超級賬本屬于聯盟鏈,要求其必須控制用戶權限,因此超級賬本中內置基于證書等密碼學機制的身份驗證功能,以確保只有聯盟中指定組織成員才能對賬本發起操作,且一旦發生農產品質量安全問題可直接追責至溯源數據發起方,身份的確定性保證了組織成員之間互相信任。
3)數據不可篡改。數據被加密保存在區塊的Merkle樹中,隨區塊同步到多個節點并持久化,相鄰區塊通過Hash值產生密切關聯。上述加密措施可提高數據篡改難度,從而保證農產品溯源信息安全。如果要實現對某個區塊中數據的改動,則需繼續修改所有后續區塊和每個節點中的對應備份。此外,由于超級賬本為分布式存儲,如果某個節點的數據被破壞,則其他節點可將數據恢復到該節點,因此提高了區塊鏈系統的容錯性。
4)多通道。多通道是超級賬本特有的概念,1個通道存在1個賬本,該邏輯結構可將賬本相互隔離,賬本之間無法直接通信從而確保賬本的機密性。操作不同賬本需不同身份加密信息,保證了賬本數據的隱私性。多通道為后續動態溯源機制的實現提供了架構基礎。
本文設計了基于區塊鏈的農產品柔性可信溯源模型及系統架構,并以生姜產品為溯源對象實現對該系統模型的驗證。
以下介紹本文所提基于區塊鏈的農產品柔性可信溯源模型系統的設計思想與動態追溯機制。
1)系統設計思想
如果將所有模塊的數據存儲在同個賬本中,隨著參與方的加入及環節擴展,數據量會日漸龐大,數據內容會趨于復雜,不同環節參與方在同個區塊鏈系統中共享數據隱私性也會降低。本文在雙區塊鏈和側鏈結構的農產品供需系統基礎上[2,20,23],結合超級賬本的通道概念,進一步細化存儲結構,提出“一環節一賬本”的設計思想[24],將各環節數據相互隔離存儲在不同賬本中,為后續實現動態溯源所要求的模塊化結構做好準備,并在保證數據安全的基礎上降低存儲結構復雜度以實現可信溯源。
2)動態追溯機制
農產品產業鏈中各環節之間銜接的先后順序并非固定不變,溯源系統需根據實際生產的推進情況靈活追蹤不同環節直到串聯為完整的溯源鏈,即動態追溯。本文先遵循“高內聚,低耦合”的軟件設計標準,將復雜的系統解耦、封裝為一系列功能模塊,再在生產過程中根據實際需求選擇后續環節,并將現階段農產品信息發送至該環節模塊進行下一階段處理,從而實現農產品產業鏈靈活延伸,使溯源系統能適應不同場景下的生產流程,最終實現動態追溯。
為提高農產品溯源系統的可信度與靈活性,本文結合“一環節一賬本”的設計思想與動態追溯機制,提出基于區塊鏈的農產品柔性可信溯源模型,其結構如圖3所示(圖中實線表示直接通信,虛線表示間接通信)。在該模型中:產業鏈各環節和模塊管理服務均由適量的獨立模塊組成,模塊內后臺服務程序與具備本環節賬本操作權限的peer節點整合,能獨立處理環節主體的事務請求并安全存儲溯源數據;環節模塊與模塊管理服務模塊直接交互,環節模塊間通過此服務模塊實現間接通信;模塊管理服務模塊處于溯源模型的核心部位,負責管理與調配系統中各環節,并處理質量監管部門與消費者的查詢請求,完成環節之間動態組合進而實現靈活溯源?;趨^塊鏈的農產品柔性可信溯源模型由區塊鏈儲存關鍵數據以確保系統的可信性,各環節之間無固定銜接順序,其主要根據模塊管理服務模塊的統一調度,按照實際生產需求靈活排布環節模塊,最終實現產業鏈的柔性延展。

圖3 基于區塊鏈的農產品柔性可信溯源模型結構Fig.3 Flexible and reliable blockchain-based traceability model structure of agricultural products
基于區塊鏈的農產品柔性可信溯源系統架構如圖4所示,該系統主要由數據采集層、存儲層、應用層以及交互層構成。

圖4 基于區塊鏈的農產品柔性可信溯源系統架構Fig.4 Architecture of flexible and credible blockchain-basedtraceability system for agricultural products
1)數據采集層
數據采集層是由生產資料供應商、種植農戶、倉庫、物流公司、銷售商等產業鏈中間環節參與者通過配套的農殘檢測儀、溫濕度傳感器、掃描設備、RFID標簽等物聯網設備,詳盡地采集各環節數據,以實現農產品產業鏈信息的完整輸入。
2)存儲層
存儲層由超級賬本與傳統集中式數據庫組成,超級賬本與集中式數據庫分別保存溯源數據與非溯源數據。產業鏈各環節的參與者在對應賬本中均有其特定身份標識,根據溯源數據的加密信息可直接對發布者進行定位,從源頭確保數據的不可抵賴性。產業鏈各環節數據只保存于對應模塊的賬本內,以降低數據結構復雜度,并提高系統的可拓展性與靈活性。結合圖3可知,模塊管理服務模塊處于系統中心,其他模塊均僅與其直接交互并由其統一管理,各環節模塊的狀態信息也由模塊信息賬本統一保存,通過集中式管理機制實現環節模塊的規范管理與靈活調配。超級賬本與傳統的集中式數據庫互相配合存儲農產品溯源系統全部數據。
3)應用層
應用層為系統管理員、數據提供者、質量監管部門以及消費者提供服務。其中:系統管理員負責維護農產品溯源系統與超級賬本,保證其穩定運行;數據提供者即產業鏈中間環節的參與者,其主要負責采集產業鏈中的溯源數據并上傳到系統;質量監管部門負責監督上鏈的農產品是否符合質量安全標準,并對存在問題的農產品發出警告;消費者是農產品產業鏈的最后一環,其主要負責對所購農產品的溯源數據進行查詢。
4)交互層
交互層包括Web應用、手機APP、微信小程序以及溯源終端,是系統與使用者之間的接口,可提供快捷方便的系統操作途徑。
本文以生姜產業鏈為例,從動態溯源機制角度出發介紹基于區塊鏈的農產品柔性可信溯源系統應用場景并分析動態溯源過程。
3.4.1 溯源系統的運行
假設某生姜產品依次經歷種植、物流、倉儲、物流和銷售5個環節后到達消費者手中,參照圖4的系統架構,溯源模型的運行流程如下:
1)種植環節
該生姜溯源產品的流程由種植環節開始。在種植環節運行過程中,種植戶將地塊信息、種植人員信息、生產資料數據、生產過程數據等錄入種植數據賬本。在種植環節完成后,系統自動為該環節輸出產品生成批次碼,同時模塊管理服務模塊為種植戶提供可選的下一環節。種植戶根據實際生產需要選定物流環節,種植環節的產品批次碼會即刻通過模塊管理服務模塊提交到所選物流環節,并在該環節完成后續過程。
2)物流環節
在物流環節運行過程中,物流公司將農產品的發貨地、目的地、配送人員、配送路線等信息錄入物流數據賬本。在物流環節完成后,相關操作與種植環節相同,系統自動生成批次碼,物流公司選擇倉儲環節作為下一環節并將批次碼提交至該環節,然后在所選倉儲環節完成后續過程。
3)倉儲環節
在倉儲環節運行過程中,倉庫管理員將農產品的入庫時間、出庫時間、倉庫環境信息等錄入倉儲數據賬本。在倉儲環節完成后,重復與物流環節類似的操作,系統自動生成批次碼,倉儲管理員選擇物流環節作為下一環節并將批次碼提交至該環節,然后在所選物流環節完成后續過程。
4)物流環節
物流環節的運行過程與上個物流環節相同。在物流環節完成后,系統會自動生成批次碼,物流公司選擇銷售環節作為下一環節并將批次碼提交至該環節,然后在所選銷售環節完成后續過程。值得注意的是,這批生姜雖經歷過2次不同的物流運輸過程,但其物流數據的提交、處理、保存等操作均在物流環節模塊中完成。
5)銷售環節
在銷售環節運行過程中,分銷商將農產品的價格、銷售地點、上架時間等錄入銷售數據賬本,系統自動為商品生成批次碼。在銷售環節完成后,消費者可憑借銷售環節批次碼查詢商品所經歷的全部環節數據。
3.4.2 溯源流程的優化
結合上述系統運行流程可知,柔性可信溯源模型使溯源流程較傳統農產品溯源模型在靈活性方面有本質提升,上述模型的邏輯流程如圖5所示。與傳統農產品溯源流程的一維邏輯結構相比,柔性可信溯源流程的邏輯結構升級為二維有向連通結構,環節順序不再固定,產業鏈中任意兩節點可前后相繼,進而實現隨著實際需求動態改變生產流程走向的目的。

圖5 不同模型的邏輯流程Fig.5 Logical flow of different models
3.5.1 溯源碼標識對象的確定
農產品產業鏈各環節生產信息通過溯源碼前后銜接形成完整的溯源數據,但是以哪種粒度的農產品作為溯源碼標識對象值得考慮。本文從產業鏈網絡中剝離并分析得到上、下游環節輸出產品之間的對應關系模型,并選取輸出產品作為溯源對象。
由于產業鏈各環節形成復雜的供需關系網絡,對某一環節而言,可能同時有多個上游環節發來不同生產原料,也可能向多個下游環節同時輸出本環節的不同產品,產品之間供需關系較復雜,因此上下游關系可分別從環節層次與產品層次來分析。值得注意的是,產品層次的分析結果是在環節層次分析的基礎上形成,環節之間與產品之間的上下游對應關系如圖6所示。其中:a模塊為復雜的農產品產業鏈,A、B、C、D分別代表種植、加工、倉儲、物流等農產品產業鏈環節,由于這些環節會出現在產業鏈中任何位置,因此其既可作為上游環節向下游環節輸出原料,也可作為下游環節接收原料并運行本環節處理過程;b模塊將C作為輸入環節,并剔除a模塊中多余的上下游關系,A、B等n個輸出環節向環節C輸出原料,環節C接收原料并進行本環節內的生產活動,這種上下游關系可視為環節間復雜關系的基本組成單位;c模塊將上下游關系的粒度進一步細化到產品層次,上游環節輸出原料就是該環節的產品,下游環節接收原料為生產本環節產品,環節間上下游關系的實質是產品間上下游關系;d模塊在c模塊的基礎上減少了環節層次和其他無關產品,只保留C環節某一輸出產品及其對應的上游原料產品,簡化后產品上下游關系可視為產品間復雜關系的基本組成單位。

圖6 環節之間與產品之間的上下游對應關系Fig.6 Corresponding relationship between upstream and downstream between links and products
3.5.2 賬本內容及數據格式
超級賬本主要用來存儲鍵值對數據。本文結合溯源碼標識對象的確定,以環節輸出產品批次碼和數據所屬環節標識碼為鍵,以環節輸入原料批次碼集、生產過程負責人姓名和編號、加工步驟名稱為值,以JSON格式書寫鍵、值信息并作為農產品溯源數據的存儲格式,具體樣例如下:
1.{"traceCode":"12345","linkCode":"CLink"}:
2.{
3."rawMaterialTraceCodes":[
4.{"rawMaterialTraceCode":"678",
5."linkCode":"ALink"},
6.{"rawMaterialTraceCode":"789",
7."linkCode":"BLink"}
8.],
9."producer":"oneProducer",
10."producerCode":"12345",
11."productionProcess":[
12.{"stepName":"firstStep"},
13.{"stepName":"secondStep"}
14.]
15.}
3.6.1 應用背景
山東省萬興食品有限公司(以下簡稱萬興),是全國生姜出口第一大戶,也是農業產業化國家重點龍頭企業,該公司已具有多年溯源系統應用經驗。本文結合萬興生姜產業鏈流程分析其環節之間與產品之間的上下游關系,將原有系統進行升級,充分利用超級賬本的多通道架構和模塊化設計思想,建立基于區塊鏈的生姜產品質量安全管理柔性可信溯源系統。
3.6.2 系統模型實現
本文在Hyperledger Fabric v1.1版本開源框架的基礎上,采用4臺服務器組建具有3個orderer節點、4個peer節點、基于Kafka共識機制的超級賬本后端,將fabric-sdk-java植入區塊鏈前端代碼并根據具體功能需求做出適配,初步實現基于區塊鏈的生姜產品質量安全管理柔性可信溯源系統。該系統自2019年7月開始測試運行,到2019年9月已穩定運行70多天,各區塊鏈存儲數據共計800余條。生姜脫水類產品系統、生姜脫水類產品向上與向下溯源信息、區塊鏈后臺測試樣例信息輸出等系統運行界面如圖7~圖9所示。在實際運行過程中可以看到,系統將完整產業鏈數據按環節劃分存儲在不同模塊的區塊鏈中,模塊間通過網絡交互數據合作完成系統功能,并能根據生姜生產流程的變化改變或追加追溯環節,柔性貼合實際的產業鏈走向,實現了基于區塊鏈的農產品質量安全可信溯源,這表明該系統可有效提高溯源信息安全性和溯源結果可信度,靈活性較傳統溯源系統有本質提升。

圖7 生姜脫水類產品系統Fig.7 Ginger dehydration product system

圖8 生姜脫水類產品向上與向下溯源信息Fig.8 Upward and downward traceability informationof ginger dehydration products

圖9 區塊鏈后臺測試樣例信息輸出Fig.9 Information output of blockchain backgroundtest sample
本文在傳統農產品溯源模型的基礎上,結合超級賬本與農產品供應鏈的特點,提出“一環節一賬本”的系統設計思想與動態追溯機制,建立基于區塊鏈的農產品柔性可信溯源模型及系統架構,針對模型應用過程中出現的追溯粒度與溯源數據結構問題給出解決方案,并以生姜產品為追溯對象進行溯源模型的驗證。分析及應用結果表明,該系統具有數據存儲安全、農產品質量安全責任主體明確以及系統拓展性強等特點,實現了農產品的柔性可信溯源,系統追溯產品信息可信度高,可適用于多種生產場景。后續將針對本文模型設計溯源碼標準和追溯機制提高系統效率,研究用于數據批量處理應用場景的數據安全保障方案,同時在農產品溯源系統中加入供需交易功能,利用大數據分析并根據供需雙方交易行為定向推送其所需農產品信息。