談和義,顧永跟,吳小紅,陶 杰
(湖州師范學院 信息工程學院,浙江 湖州 313000)
近年來,農產品食品安全問題在我國時有發生,并對消費者的身心健康產生了嚴重的影響[1].由于農產品供應鏈的各方信息流通不暢,存在“信息孤島”,因此消費者難以獲取農產品相關的準確信息.當發生食品安全事故時,既難以判定事故責任方,又難以及時召回問題食品.這進一步增加了消費者對食品安全信息獲取的需求.
農產品溯源體系是一種農產品信息保障體系,在農產品的生產過程中,用于記錄和存儲農產品供、產、銷等各種信息.溯源體系不僅能為消費者提供農產品供應鏈的信息,還能夠精確記錄問題發生的環節和及時確定事故責任方,從而減小損失.區塊鏈作為一種去中心化的分布式賬本,擁有分布式的存儲結構、一致性的共識算法、公開透明的信息記錄和不可篡改的技術特點.將區塊鏈技術與農產品溯源體系結合,通過物聯網設備采集生產周期的數據并實時上鏈,數據不經過第三方,不僅能保證農產品溯源信息的真實可信[2-4],還能為農產品生產者、消費者和政府監管部門提供真實可靠的溯源數據,實現農產品溯源的有效管控.
區塊鏈是比特幣系統提出的新技術,是一種基于分布式網絡技術、密碼學技術、時間戳技術等電子現金系統的構架理念[5].區塊鏈的每一個區塊按照時間順序鏈接,組合成鏈式數據結構,是一種用密碼學技術保證不可篡改和不可偽造的可靠數據庫,也是一種分布式賬本,具有去中心化、開放性、獨立性、安全性、匿名性等特點[6].
從廣義說,區塊鏈系統由數據層、網絡層、共識層、激勵層、合約層和應用層組成.其中,數據層封裝了哈希函數和Merkle樹等數據區塊和密碼學加密技術;網絡層由分布式網絡、數據傳播機制和數據驗證機制組成;共識層主要封裝工作量證明和權益證明等各類共識算法;激勵層將現實生活中的經濟因素與激勵機制組合到區塊鏈中,激勵機制包括發行機制和分配機制等;合約層包含各類腳本代碼、算法機制和智能合約,是區塊鏈可編程特性的基礎;應用層表現區塊鏈在現實生活中的可編程應用和可編程金融等應用場景[7-8].區塊鏈基礎架構模型見圖1.
比特幣自發行以來,被稱為區塊鏈1.0,比特幣的工作量證明共識算法,使得交易順序達成共識,也讓區塊鏈系統具有去中心化的特點.被稱為區塊鏈2.0的以太坊,新增了權益證明共識算法,這使得區塊鏈系統的發展更加迅速.到目前為止,區塊鏈技術已被運用到社會生活的各種場景,區塊鏈也進入到3.0時代[9].

圖1 區塊鏈基礎架構模型
SSM是Java開發過程中的一種快速應用框架,其分別是Spring、SpringMVC、MyBatis[10].Spring框架是一個輕量級容器,提供功能強大的IOC、AOP和Web MVC等功能,以解決開發者在開發過程中遇到的常見問題.Spring不僅能應用于Java應用程序,還能應用于桌面應用程序和小程序,其特點是方便解耦、簡化開發、支持聲明式事務、方便程序測試等.SpringMVC是一種Web層的MVC框架,它是Spring的一個模塊,擁有Spring特性.Spring MVC擁有清晰的角色劃分、強大的直接配置方式、業務代碼可重用等優點,能夠通過功能強大的前端控制器DispatcherServlet,對請求和響應進行統一處理,并提供一整套解決方案,性能卓越,尤其適合現代的大型或超大型項目.MyBatis 是一個開源、輕量級的數據持久化框架,是 JDBC 和 Hibernate 的替代方案.MyBatis內部封裝了JDBC,xml文件和注解減少了大量的JDBC代碼,實現對象到數據庫的映射,降低SQL與程序代碼的耦合度,開發者只需關注 SQL 語句本身,就能方便后期系統的修改和維護.
基于融合區塊鏈的農產品溯源體系架構,主要由物理層、數據傳輸層、數據存儲層、接口層、系統層、用戶層構成[11].系統架構見圖2.

圖2 融合區塊鏈的農產品溯源體系整體架構圖
物理層主要由物聯網設備和傳感器等模塊組成.這類設備安裝在生產環境中,自動采集信息,詳盡地將感知信息、產品生產信息等收集待發.
數據傳輸層負責網絡數據傳輸,其通過WLAN、藍牙、數據網絡等方式,并通過安全協議將物理層的信息傳輸到系統.數據傳輸層保證了區塊鏈網絡節點間的信息通信.P2P網絡的每個節點間通過維護一個共同的區塊來保持通信.
數據存儲層主要實現對數據的存儲操作,其通過關系型數據庫和分布式存儲的雙重保障來保證信息的安全性.
接口層主要是一些API接口的設置,系統對各種數據的讀取和調用系統的不同模塊,都是通過接口層的交互來實現的.
系統層包括各種功能模塊的設計實現.在各環節,企業可以通過企業管理模塊實現自身的需求,政府可以通過系統監管全流程的安全信息,用戶也有相應的溯源查詢、評價建議等功能.
用戶層主要面向用戶,不同的用戶可以通過不同的客戶端,使用融合區塊鏈的農產品溯源系統.
農產品溯源需要整個生產周期的所有參與方共同完成,生產過程中前一個環節的信息自動上傳到系統后,跟隨農產品一起發送到下一環節,環環相扣,以保證信息鏈完整真實.以湖羊農產品溯源為例,其溯源流程見圖3.
2.2.1 生產階段
生產環節主要節點為農產品生產方.生產方需要接入融合區塊鏈的溯源系統,并在系統中錄入產品的基礎信息,包括湖羊的父母耳標號、出生時間、性別、出生欄舍、所屬企業等,并實時上鏈.在進入下一環節后,下一環節的參與方可以通過數字簽名和時間戳來驗證消息的來源和真實性.此外,生產企業還可以在不同時間對湖羊的體檢數據進行即時上鏈,并將湖羊的防疫、診療記錄、欄舍環境信息即時上鏈存儲.生產階段上鏈數據見表1.

表1 生產階段上鏈數據
2.2.2 加工階段
加工環節的主要節點為農產品加工方.當加工方接收到來自生產環節的產品和信息后,需要對產品和信息進行驗證,同時將加工企業名稱、資質、加工時間、加工方式等信息加入到農產品信息中,并實時上鏈,以備后續查詢.加工階段上鏈數據見表2.

表2 加工階段上鏈數據
2.2.3 倉儲階段
倉儲環節關鍵為倉庫廠房.生產方和加工方的產品在交接時會存儲在固定地點,倉儲方需要對農產品信息和來源信息進行驗證,然后對農產品的倉儲信息,如倉儲地點、倉儲環境等進行收集上鏈.倉儲階段上鏈數據見表3.

表3 倉儲階段上鏈數據
2.2.4 運輸階段
運輸環節的主要信息是物流信息.當農產品狀態更新時,需要增加物流單號和物流企業等信息.運輸信息需要同農產品的批次信息和物流信息一一對應,以便下個環節對接管理不同批次的農產品.運輸階段上鏈數據見表4.
2.2.5 銷售階段
銷售環節的主要節點為各銷售方.經過運輸環節,農產品被發往不同的銷售點,銷售企業驗證農產品信息后,需要將經銷商名稱、地址、商品來源、接收時間、銷售時間等信息加入到農產品溯源信息中,以確保整個流程的產品信息完整性.銷售階段上鏈數據見表5.

表5 銷售階段上鏈數據
2.2.6 溯源階段
消費者輸入農產品的溯源碼,系統對溯源碼和農產品批次號等關鍵信息進行驗證,并將通過驗證的對應批次號的所有溯源信息,包括商品來源、生產加工信息、倉儲物流信息等展示給消費者,從而完成農產品的溯源過程.溯源數據見表6.

表6 溯源數據
溯源系統使用最多的模塊主要是溯源信息的收集和展示.本系統的主要使用者包括系統管理員、農產品生產方、農產品加工方、農產品倉儲方、農產品運輸方、農產品銷售方.消費者作為溯源體系的最終使用者,只需獲取農產品的溯源信息即可,對溯源系統的邏輯并沒有更高的需求.系統模塊見圖4.

圖4 系統功能模塊圖
系統管理員模塊主要用于查看使用溯源系統的企業數量和企業信息,并結合Lay-UI前端組件展示使用溯源系統企業的信息.當管理員登錄溯源系統后,可以通過企業管理模塊查看各企業的登錄賬號、密碼等,也可以注銷企業.當前登錄的管理員可以新增一個管理員賬號,并設置新賬號的密碼和用戶名等信息.
農產品新增模塊可通過輸入農產品名稱、產地、等級和生產方式來建立農產品溯源信息檔案,在建立檔案后會自動生成唯一的農產品溯源碼,溯源碼以IP地址的形式存儲在數據庫.在查詢數據庫溯源信息時,溯源信息以IP地址的形式發送給前端,在前端解析后再以二維碼的形式展示給消費者,而二維碼的內容即為農產品生命周期的溯源信息.
農產品溯源主頁面展示溯源系統的主要功能.在頁面中間區域輸入農產品溯源碼后,主頁面即可展示該農產品的溯源信息.頁面上半部分展示農產品溯源的整個流程,頁面下半部分展示農產品溯源系統在不同農產品領域的應用.
基于以上概述的溯源體系架構和模型,設計一個融合區塊鏈的農產品溯源系統.該系統面向消費者、生產供應鏈各環節主體和監管部門,以保證農產品信息能真實可信地被記錄下來,從而保障消費者溯源查詢結果的真實性,減少農產品食品安全事故的發生概率.系統拓撲結構見圖5.
融合區塊鏈的農產品溯源系統使用聯盟區塊鏈將各方企業納入溯源體系,采用Hyper ledger fabric底層區塊鏈架構,基于Windows10操作系統,在jdk1.8的Java環境下,通過IDEA編譯器進行開發,使用MySQL關系型數據庫存儲基礎信息.
3.3.1 溯源系統主界面
溯源查詢功能是消費者使用頻率最高的功能.在溯源系統主頁,消費者可通過溯源碼可查詢到產品的溯源檔案.在輸入溯源碼后,系統主頁展示的溯源信息包含農產品在生產全生命周期的id、生產產地、生產日期、上鏈時間、生產企業等關鍵溯源信息.溯源信息展示界面見圖6.

圖5 區塊鏈溯源系統拓撲圖

圖6 溯源信息展示界面
3.3.2 鏈上新增用戶接口測試
新增用戶的接口參數為certificate,該字段表示新增用戶的數字證書.接口返回值的參數包括:success,表示請求是否正確處理,返回true表示數據上鏈請求已經收到,并未實現數據上鏈;errorCode,表示請求失敗時對應的錯誤碼;msg,表示應答消息描述;data,表示該接口,data為null.調用示例見圖7.

圖7 新增用戶接口測試
3.3.3 溯源信息上鏈接口測試
數據的明文上鏈接口參數包括:dataId,表示數據標識;dataVersion,表示數據版本標識;dataId和dataVersion,表示唯一一條上鏈數據;bizCode,表示上鏈數據的類型,根據業務場景定義;indexes,表示可用來查詢的字段集合;dataContent,表示待上鏈的數據部分,該部分將直接存儲到區塊鏈上.接口返回值參數包括:success,表示請求是否正確處理,返回true表示數據上鏈請求已經收到,但并未實現數據上鏈;errorCode,表示請求失敗時對應的錯誤碼;msg,表示應答消息的描述;data,表示該接口,data為null.調用示例見圖8.
3.3.4 溯源信息查詢接口測試
查詢鏈上數據接口參數包括:dataId,表示數據身份標識;dataVersion,表示數據版本標識,dataId 和 dataVersion,表示唯一一條上鏈數據.接口返回值的參數包括:success,表示請求是否正確處理,返回true表示數據上鏈成功;errorCode,表示請求失敗時對應的錯誤碼;msg,表示應答消息描述;鏈上的數據,data 為null,表示數據未上鏈.調用示例見圖9.
3.3.5 關鍵信息篡改測試
在農產品信息的溯源流程中,農產品生產信息、加工信息和運輸信息對溯源結果的真實性具有重要作用.在生產周期中,這些關鍵信息被上傳至區塊鏈系統,系統可通過區塊鏈的密碼學技術和分布式存儲技術等架構,保證上鏈信息不被篡改.

圖9 溯源查詢接口測試
在溯源鏈上產生交易新增區塊時,將生產、加工和運輸等關鍵信息寫入區塊鏈的區塊體.區塊鏈網絡則會在記錄數據時,通過數字簽名驗證交易的有效性,并將驗證通過的交易打包到區塊中,且在區塊鏈各節點形成共識.區塊鏈交易數據的全網共識,依靠的是共識機制制定的規則,只有通過共識的信息才會被保存在鏈上.
農產品溯源鏈在生產環節產生交易新增區塊時,生產方上傳的信息為:{“dataId” :”20221211”,”dataVersion” :“0060”,”dataConttent” :“生產日期為2022年10月25日”},并在各節點共識.在后續環節中,生產方更改生產日期為2022年11月25日,并將此條信息重新上鏈.當修改的信息通過聯盟鏈的共識算法進行共識時,全網節點需要相互通信,以比對收到的信息與各自已共識的信息是否一致.在超過 2/3 節點收到一致的回復后,才能達成全網共識.而上傳虛假信息的節點因區塊鏈的共識算法規則,并不能讓所有節點都對此信息回復一致,所以修改的信息在全網節點中共識失敗,即此條信息不能被上傳并保存到鏈上.
信息篡改測試見圖10,其為真實信息的查詢結果.圖11為篡改信息的查詢結果,但鏈上并無篡改后的信息記錄,表明篡改的信息并未上鏈.這是因為農產品溯源鏈至少有5個共識節點,只有一個節點篡改了信息,而超過2/3的節點無法對此達成全網共識,所以無法上鏈.

圖10 真實信息查詢結果

圖11 篡改信息查詢結果
本文基于傳統的農產品溯源流程,設計一種融合區塊鏈技術的農產品溯源系統.通過對傳統溯源系統存在問題的分析,對農產品溯源流程進行分階段、分環節優化設計,在每個階段實時收集信息并上傳至區塊鏈系統,以保證農產品生產過程的關鍵信息真實和不可篡改,從而解決傳統農產品溯源系統的中心化存儲、信息不透明和存儲安全性低等問題.
由于區塊鏈技術在軟件系統方面尚未大范圍應用,融合區塊鏈的農產品溯源系統還存在需要改進的地方.分布式存儲的共識機制和共識算法仍是區塊鏈技術的一大難點,不僅需要安全可信的機制算法,還需要考慮共識時間問題.此外,溯源流程的全國統一標準和規范還未完全建立,因此系統的運行機制還需要進一步根據市場規律來進行研究和改進.