吳曉彤 柳平增 王志鏵
(山東農業大學信息科學與工程學院 山東 泰安 271018)
農產品溯源系統作為一種對農產品質量進行監督與控制的有效方法,已成為國內外農產品質量安全監管的有效手段[1]。但由于傳統農產品溯源系統依賴于中心數據庫存儲和管理數據,系統中心化嚴重,導致信息在記錄過程中易被篡改、數據不公開透明、信息易丟失等問題,系統在數據存儲安全方面面臨著眾多挑戰。
區塊鏈是一種分布式賬本技術,具有去中心化、公開透明、分布式存儲、不可篡改、安全可靠等技術特點,被認為是一種與生俱來的信任機器,可用于解決傳統溯源系統產生的中心化、信任危機等問題,提高溯源的可靠性與安全性[2-4]。
本文在總結和分析傳統農產品溯源系統問題的基礎上,構建基于區塊鏈的農產品溯源模型和溯源系統架構,利用區塊鏈的分布式存儲、智能合約等技術實現了去中心化的農產品溯源模式,將農產品溯源信息分布式的存儲在鏈上的每一個節點中,并通過HyperledgerFabric框架實現了基于區塊鏈的農產品溯源系統。該系統提高了農產品溯源信息的透明度與安全性。
國內外許多學者在物聯網、網絡信息、數據庫等技術方面,對農產品溯源系統進行創新性的研究并取得顯著成效[5-17]。傳統農產品溯源以種植、倉儲、加工及物流等流程為主線,記錄和管理從種植到銷售所有環節的產品信息,溯源模型如圖1所示。

圖1 傳統農產品溯源系統模型
可以看出:傳統的農產品溯源系統一般以中心數據庫為基礎,采取分段、分環節的溯源模式;在農產品流通過程中,國內多部門實行切塊分段共管的運行機制,分段監管步調不一;部分系統基礎建設缺乏標準化,信息不規范、系統不兼容;對于監管部門和消費者來說,所有信息需要從中心數據庫中獲取[18-23]。傳統溯源系統依賴于中心數據庫會導致以下問題:
(1) 系統中心化嚴重,信息真實性無法驗證。傳統溯源系統大多采用中心數據庫實現信息存儲,信息存在人為篡改的可能,使得消費者對于溯源信息的真實性有較大的質疑。
(2) 農產品信息不公開透明,導致交易雙方出現信任問題。不同環節的用戶作為不同的角色參與溯源過程,角色間缺乏信息反饋,信息不公開透明,導致各角色掌握的信息不對稱,交易雙方缺乏信任,容易產生信任危機問題。
(3) 農產品責任主體難確定。由于傳統溯源系統各環節分散、碎片化嚴重,一旦產品出現質量問題,需從每個環節逐步進行溯源,過程較為繁瑣,無法快速準確定位責任主體。
區塊鏈是一種分布式賬本技術,是一串利用加密算法相關聯而產生的鏈式數據結構,通過去中心化和去信任的方式集體維護一個可靠數據庫,具有去中心化、共識機制、開放透明、匿名性四個特點[24-26],區塊鏈連接示意圖如圖2所示。

圖2 區塊鏈接示意圖
區塊鏈是一種大家共同參與信息的記錄和存儲的技術。在之前,人們通過中心化的機構進行信息記錄和存儲的工作,區塊鏈技術的出現則允許系統中的每個節點都能夠參與信息的記錄和存儲,即使系統中的部分參與節點失效或作假也不能改變區塊鏈的完整性,更不能篡改區塊鏈中的信息[27]。目前區塊鏈作為一種去中心化的核心技術,被廣泛應用于金融、政務、物聯網等領域。
2.2.1分布式存儲
區塊鏈分布式存儲是一種數據存儲的技術,它將網絡上每臺機器的磁盤空間作為分散的存儲資源形成虛擬的存儲設備,數據被分散存儲在鏈的每一個節點中,并完整地保存下來。
區塊鏈的分布式存儲過程如圖3所示,可以分為以下六個步驟:(1) 創建數據分片;(2) 加密每個分片;(3) 為每個分片生成哈希;(4) 復制每個分片;(5) 分發復制的分片;(6) 記錄事務到分類帳。

圖3 區塊鏈分布式存儲過程
區塊鏈的分布式存儲打破了傳統溯源系統數據存儲中心化的局面,使信息分布式存儲在多個節點,每個節點都保持完整的信息副本,鏈上信息對所有參與成員都是透明且可驗證的,同時增強了產業鏈各環節的信息互通性,其去中心化、透明性、可恢復性和防篡改性的特點也使得其與農產品溯源領域極為契合。
2.2.2智能合約
智能合約又稱為智能合同,是事件驅動的、有狀態的、多方識別的、運行在區塊鏈上的、能夠根據預設條件自動處理資產的合約。智能合約的最大優點是使用程序算法來代替仲裁和合同的執行[28]。
如果說區塊鏈是一個數據庫,那么智能合約就是將區塊鏈技術應用于現實的應用層。智能合約是在區塊鏈數據庫上運行的一種計算機程序,能在滿足源代碼編寫條件的情況下自動執行。智能合約為傳統農產品溯源系統標準不同、流通性不強的問題帶來了解決辦法,實現了信息的連續實時傳遞和跟蹤,且進一步增強了系統的去中心化。目前,智能合約在選舉、供應鏈優化、電子商務等場景中都得到了有效應用。
農產品溯源涉及種植、倉儲、加工、物流、銷售、查詢等多個環節,各環節之間的高效協作能夠保障農產品信息的有效溯源。本文根據農產品溯源的實際需求對區塊鏈技術在產業鏈各環節的應用進行了設計,使區塊鏈中的智能合約和分布式存儲技術能夠確保產品信息流的正常傳遞,保證了產品的流通、溯源和信息的分布式存儲。
(1) 種植(生產)環節。主要節點為農場或企業。節點需要將生產資料和產品信息錄入并上傳到區塊鏈中,創建初始區塊。在此過程中系統調用智能合約實現對節點的認證和信息上鏈,并通過數據分片的方式實現信息的分布式存儲。當產品隨著產業鏈流動進入下一環節即倉儲環節時,當前節點會向下一個節點發送交易請求,雙方利用密鑰對區塊進行驗證,并根據內嵌在區塊鏈中的智能合約進行交易過程,在全員審核通過后完成交易,倉庫便成為新的授權角色。在交易過程中,監管部門作為鏈中的節點有權對種植信息進行訪問及審查,審查合格后以私鑰方式簽名來認證種植環節合乎規范。算法偽代碼如算法1所示。
算法1智能合約中的農產品交易操作
已知節點編號為user_id,節點角色為user_name,交易編號為tran_id,時間戳為timestamp,產品信息為pro_info。
//注冊用戶并生成私鑰
user.id=user_id,user.name=user_name,;
newKeyPair() (user_id,[]byte);
//進行產品信息的錄入和區塊的生成
protected List
pro_hash=sha256(pro_info),pro_time=timestamp;
generateBlock(pro_info);
//節點驗證
if proving(user_id).equal==0 then
return false;
//區塊廣播及驗證
else public boolean broadcast(Block pro_info);
isBlockValid(Block pro_info);
AddBlockchain();
return ture;
(2) 倉儲環節。此環節的主要節點為倉庫(冷庫)。倉庫接受了來自種植環節的產品之后,獲得訪問和維護產品信息的權限,并且將該環節特定信息寫入區塊中,在轉移產品的過程中調用智能合約將變更的溯源編碼進行更新。這個過程中節點之間通過共識算法進行區塊的廣播和數據的同步,使得鏈中的其他節點也可以實現自身區塊的信息更新和對該環節區塊的訪問。
(3) 加工環節。作為消費者最關心的環節,在收到來自于上一環節的產品后,需要寫入加工信息。其中:檢驗合格信息需要有監管部門參與檢驗并通過數字簽名對產品的合格與否來進行認證,與產品信息一同寫入區塊中,同時生產資料的供應商作為節點加入到鏈中,防止產品溯源過程中產生斷鏈現象。最后的產品包裝過程中,除了必要的包裝信息外,還需要為產品生成溯源碼或二維碼,便于消費者進行產品的溯源查詢。
(4) 物流環節。主要節點為物流公司。在更新產品信息時需要提供物流信息,運輸中每個包裝上應包含產品的標識,以便于當前節點與下一節點的對接管理。
(5) 銷售環節。主要節點為超市等銷售企業。農產品經過物流環節的運輸后,會發往不同地區的銷售企業,所以區塊中的產品信息須添加當前節點的企業信息;銷售企業同樣也需要明確產品的來源信息、銷售信息等,確保產品信息的完整性,由于以上環節的代碼邏輯與生產環節較為相似,故此處不再闡述。
(6) 查詢環節。主要節點是消費者和監管部門。消費者可以通過掃描所購買產品包裝上的一維碼和二維碼對產品進行溯源,獲取產品的相關信息;在查詢過程中系統首先會對消費者的身份進行驗證,通過驗證后系統將通過溯源碼進行區塊鏈地址查詢,查詢成功后返回地址,后臺接口將該地址的區塊信息反饋給消費者,完成逆向溯源的過程。該算法偽代碼如算法2所示。
算法2智能合約中的農產品信息查詢
已知節點編號為user_id,產品批次號為tran_id,時間戳為timestamp,產品信息為pro_info。
//節點驗證
if proving(user_id).equal==0 then
return false;
//遍歷區塊
Else
mineTxList=blockStoreProvider.loadRelatedTransactions();
for
(TransactionStore.getTransactionStore:mineTxList)
If
(TransactionStore.getTransaction().getHash.equals(pro_hash))
List
//遍歷查詢輸出
For(int i=0;i TransactionOutput output=outputs.get(i); Break; return output; 基于傳統農產品溯源和區塊鏈技術各自的特點,本文設計了基于區塊鏈的農產品溯源系統模型,如圖4所示。為便于敘述,本文將基于區塊鏈的農產品溯源系統包含的產業鏈環節分為六個,分別為種植、倉儲、加工、物流、銷售、查詢環節,考慮到產業鏈可能還存在眾多分支環節,此處僅取主鏈進行分析。 圖4 基于區塊鏈的農產品溯源系統模型 從生產到銷售的流通過程中,農產品會經歷眾多環節,而產品信息傳遞的關鍵在于其環節參與節點。本文給每個參與節點設置密鑰,密鑰就像是區塊鏈錢包,上面包含其農產品的詳細信息,使得產業鏈每一環節的參與節點都能夠利用自身的密鑰對信息進行加密;在兩個環節進行產品交易時,發起者首先通過自身密鑰進行節點認證,認證通過后開始整個交易流程,此時兩節點需要利用非對稱加密技術達成一致協議,使產品所屬關系被轉移。通過共識算法保證交易的一致性,例如在某個節點進行信息的存儲后,會對全網發送一個廣播,鏈上所有節點確認廣播后,使產品信息分布式存儲于各節點的分布式賬本中,通過密碼學和共識算法的結合能夠保證信息不可篡改。通過編寫智能合約,保證農產品的每一次信息傳遞、位置變更等都會被記錄在區塊鏈上,并且真實有效。比如:當生產者將農產品交付給物流環節的過程就是一個合同,物流將農產品運送到銷售店面同樣也會有一個合同。在整個流程過程中有無數個合同要簽約,把這一系列的合同通過代碼的形式在區塊鏈上實現,就是通過智能合約來完成。通過此模型實現的產品溯源全過程信息透明且不可篡改,解決了傳統溯源的誠信問題。 若某個環節的參與節點發生了故障,系統仍然能夠正常運行,且故障節點的數據可以恢復。這些參與節點在系統中都享有數據寫入和讀取的權限,并且鏈中的區塊能夠進行數據同步,這意味著每個節點間可以共享產品信息,在保證數據真實的前提下,實現農產品信息的有效跟蹤和溯源,真正達到系統去中心化的效果。 由于區塊鏈農產品溯源系統所涉及到的參與節點眾多,并且這些節點都是特定的或是簽訂協議的組織,不同節點所享有的權限不同,因此每個節點都可以作為一個中心參與到溯源過程中,系統在運行過程中所需要的數據承載能力也較高。結合不同類型區塊鏈技術特點的分析,本文選用聯盟鏈作為區塊鏈溯源系統的底層架構支撐。 根據上述模型所設計的區塊鏈溯源系統的總體架構如圖5所示,主要分為用戶層、系統層、數據存儲層、智能合約層、數據傳輸層、物理層。其中,區塊鏈技術主要用于數據存儲層和智能合約層。 圖5 區塊鏈農產品溯源系統架構圖 物理層主要包含物聯網傳感器和感知、處理和傳輸模塊等,承擔數據自動采集與物聯網遠程控制等功能,用于將環境感知信息、產品信息等通過協議上傳到區塊中,可以通過設備中的加密技術和完整性驗證確保采集到的信息的安全性。 數據傳輸層提供網絡數據傳輸服務,包含WLAN、數據網絡、藍牙等方式。主要目的是實現區塊鏈網絡節點之間的信息交互,區塊鏈的本質是一個P2P(點對點)網絡,每一個節點既能夠接受信息,又能夠發布信息,節點之間通過維護一個共同的區塊鏈來保持通信。在區塊鏈的網絡中,每一個節點都可以創造出新的區塊,在新區塊被創造出以后會通過廣播的形式通知其他節點,而其他節點則反過來會對這個節點進行驗證,當區塊鏈網絡中超過半數的用戶驗證通過以后,這個新的區塊就會被添加到主鏈上了。 智能合約層則根據企業間的商業合同編寫,定義了一系列的事務處理流程,包括數據操作模塊、資金周轉模塊、安全預警模塊。數據操作模塊是對數據的添加、查詢等操作;資金交易模塊是自動執行企業間事先協商好的資金交易過程,例如供貨企業向進貨企業提供原料,原料到達后進貨企業檢測無誤后會自動支付供貨企業貨款;安全預警模塊是如果區塊鏈系統檢測到有非法訪問或數據異常,會自動向系統管理員發送警報。 數據存儲層中主要指對分布式數據庫的操作,系統將數據記錄到區塊主體的Merkle樹中后,會對其進行Hsah求值,形成鏈式結構,在對其進行時間戳的加蓋后,區塊便開始生效,上傳到區塊鏈中的數據經過完整性驗證后都可以供任何鏈中的節點用戶進行訪問。而節點管理是指針對于不同類型的鏈,鏈中每個節點設置的訪問權限不同,例如公有鏈中的信息可以對鏈中的所有節點公開,而聯盟鏈或私有鏈中各節點的訪問權限可能不同,權限的設置根據實際的需求來決定。數據存儲層中的存儲介質分為兩部分:普通數據庫和基于超級賬本的區塊鏈系統。非溯源數據存入區塊鏈會占用不必要的系統資源,所以此類數據會被存入各企業自己的數據庫中,而關鍵的溯源數據會上傳至區塊鏈系統中安全保存。 系統層和用戶層主要是面向用戶,而用戶分為政府、企業和公眾,不同用戶所擁有的職能和權限也不同,同時增加數據可視化的方式,提高溯源系統的實用性。 本文研究基于上述的系統架構和區塊鏈溯源模型,設計并實現了一個基于區塊鏈的農產品溯源系統,系統拓撲結構如圖6所示。該系統由區塊鏈后臺系統、溯源前臺系統兩個子系統組成,并利用組件式開發,將視頻監控、環境感知、政府管理、電商平臺等模塊融合,是一個面向政府、農戶和消費者的農產品可信溯源系統。 圖6 區塊鏈農產品溯源系統拓撲結構圖 本文是在Ubuntu操作系統環境下,采用Hyperledger Fabric 1.0底層架構和Docker、Git等工具,利用Go語言通過GoLand編譯器進行區塊鏈后臺環境的部署,區塊鏈后臺環境部署成功如圖7所示。前臺系統的Web應用是在Windows操作系統環境下,利用SSH框架、MySQL數據庫及Tomcat服務器,使用Java語言在MyEclipse編譯器中進行部署。 圖7 區塊鏈環境部署 系統查詢界面如圖8所示,消費者可以點擊企業介紹和網上商城來了解企業信息和購買農產品。另外系統還提供政府和企業兩個不同的管理入口,政府能夠對企業的資質和操作規范進行監督,企業享有內部人員和企業效益的管理權限。當消費者輸入產品包裝上的溯源碼或掃描二維碼后,即可跳轉到系統的產品信息溯源界面,獲取到該產品從種植到銷售的溯源信息,以及對應的人員信息和區塊鏈地址等,如圖9所示。 圖8 系統查詢界面 圖9 產品信息溯源界面 區塊鏈技術的去中心化、不可篡改、分布式存儲的天然特性,使其在農產品溯源系統中具有廣泛的應用前景。本文分析了傳統農產品溯源系統存在的問題,提出了基于區塊鏈的農產品溯源系統研究,對區塊鏈溯源系統模型和系統架構進行了構建和分析,利用區塊鏈數據分片的方式實現信息的分布式存儲,對智能合約進行設計使其滿足農產品產業鏈的實際需求,解決了傳統農產品溯源系統中心化嚴重導致的信息易被篡改、信息不透明、存儲安全性低等問題。在此基礎上利用HyperledgerFabric平臺實現了該區塊鏈系統,該系統與傳統的溯源系統相比,具有去中心化、數據分布式存儲的特點,且建立了新的信托機制,保障了信息的安全性及可信性,打破傳統溯源系統中的技術壁壘,為農產品溯源提供了一個不依賴于第三方的可信平臺。 由于目前區塊鏈技術還處于尚未完全成熟的階段,區塊鏈溯源系統的性能和節點達成共識的效率亟待提高。因此,如何提高區塊鏈系統的性能和共識效率是后續研究中應著重解決的問題。3.2 區塊鏈溯源模型設計

3.3 系統架構設計

4 系統實現

4.1 環境部署

4.2 功能實現


5 結 語