李玉偉,張京京,張 航,李守曉,王繁珍,劉同海
(天津農(nóng)學(xué)院計(jì)算機(jī)與信息工程學(xué)院,天津300380)
在畜牧動(dòng)物之中,牦牛因蛋白質(zhì)含量高、肉質(zhì)好、天然放牧無公害等特性成為青海畜牧產(chǎn)業(yè)發(fā)展的重點(diǎn)對象。青海省是中國牦牛的主要產(chǎn)區(qū)之一,數(shù)量占全世界牦牛的30%以上[1],屬于牦牛養(yǎng)殖規(guī)模較大的省份,同時(shí)青海牦牛在青海高原食草家畜中的數(shù)量位居第一,其產(chǎn)值更是占據(jù)青海省畜牧業(yè)總產(chǎn)值的四分之一,在經(jīng)濟(jì)發(fā)展、歷史發(fā)展、人文發(fā)展等方面都起著重要的推動(dòng)作用[2]。雖然牦牛及其副產(chǎn)品占據(jù)著廣大的市場,但也存在著嚴(yán)重的產(chǎn)品溯源信息安全問題,這些問題不僅給牦牛產(chǎn)業(yè)帶來嚴(yán)重的損失,還會(huì)造成消費(fèi)者的信任缺失,降低消費(fèi)者購買欲望,從而損害牧場和國家的利益。傳統(tǒng)溯源系統(tǒng)存在的問題主要有:(1)信息孤島:在牦牛溯源體系中,每個(gè)溯源環(huán)節(jié)的節(jié)點(diǎn)都存在著自己的數(shù)據(jù)庫和操作系統(tǒng),并且節(jié)點(diǎn)的信息系統(tǒng)都是相對封閉的,這就造成了信息孤島問題。這些問題不僅僅存在于部門外部,在內(nèi)部也存在著,例如不同溯源環(huán)節(jié)的管理員管理不同的數(shù)據(jù)信息,需要考慮將共享數(shù)據(jù)和涉密數(shù)據(jù)分開管理,從而增加了溯源環(huán)節(jié)之間信息交互的難度。(2)信息失真:有些企業(yè)為了追求數(shù)據(jù)信息的美觀,故意將數(shù)據(jù)信息夸張或者削弱,然后根據(jù)個(gè)人的選擇將修改后的信息人為添加到溯源界面,改變了原有溯源信息的真實(shí)性,造成信息失真。(3)中心化嚴(yán)重:在傳統(tǒng)牦牛溯源體系中,溯源環(huán)節(jié)所產(chǎn)生的所有數(shù)據(jù)信息都會(huì)被集中存放,一旦中心節(jié)點(diǎn)數(shù)據(jù)發(fā)生安全問題,就會(huì)導(dǎo)致整個(gè)溯源系統(tǒng)的癱瘓。此外,中心化對傳輸效率也有著極大地限制,2個(gè)節(jié)點(diǎn)之間須通過中心節(jié)點(diǎn)才能發(fā)生交流,嚴(yán)重限制了數(shù)據(jù)的傳輸效率。(4)數(shù)據(jù)來源真實(shí)性:在牦牛的養(yǎng)殖溯源階段,存在著防偽溯源市場覆蓋率低、數(shù)據(jù)采集自動(dòng)化程度低等問題,在溯源過程中不可避免地存在一些人為操作,如果想建立起一套完整的全自動(dòng)化采集、上傳數(shù)據(jù)的系統(tǒng),需要龐大的資金鏈投入,但一些小型企業(yè)無法承受這些開支,這就導(dǎo)致數(shù)據(jù)信息錄入時(shí)對人工的依賴性強(qiáng),容易發(fā)生數(shù)據(jù)的篡改,從而無法保障數(shù)據(jù)來源的真實(shí)性。
區(qū)塊鏈作為底層架構(gòu),提供了一個(gè)分布式賬本用于跨網(wǎng)絡(luò)參與節(jié)點(diǎn)存儲(chǔ)、傳輸和查看安全P2P交易[3],結(jié)合密碼學(xué)、共識(shí)機(jī)制、時(shí)間戳等技術(shù)可實(shí)現(xiàn)網(wǎng)絡(luò)的去中心化,其完整性和不變性能夠大大提高溯源過程中的效率、可靠性和透明度[4-6]。近年來,區(qū)塊鏈技術(shù)越來越多的應(yīng)用在農(nóng)業(yè)、醫(yī)藥、生鮮等領(lǐng)域,在本系統(tǒng)中使用區(qū)塊鏈技術(shù)能夠建立牦牛養(yǎng)殖階段溯源鏈上多個(gè)角色之間的信任、解決數(shù)據(jù)失真及信息不對稱等問題,為參與網(wǎng)絡(luò)的多個(gè)用戶提供安全可靠的信息溯源平臺(tái)[7]。
在牦牛養(yǎng)殖階段,參與溯源活動(dòng)的主體主要是:牧場、加工企業(yè)、消費(fèi)者、政府監(jiān)管部門,這些參與網(wǎng)絡(luò)的用戶并不都是直接相關(guān)聯(lián)的,目前大多是以牧場為核心,通過整合上下游企業(yè)部門進(jìn)行統(tǒng)一管理。在此階段牦牛的溯源分為4個(gè)主要環(huán)節(jié)(見圖1):養(yǎng)殖、飼喂、稱重、環(huán)境監(jiān)測,從數(shù)據(jù)采集到追溯的具體細(xì)化過程來看又可以分為:牦牛出生體況檢查、養(yǎng)殖過程中的體重?cái)?shù)據(jù)變化、牦牛的防疫、養(yǎng)殖方式、牧草的種類等級信息、周邊溫濕度和光照等環(huán)境監(jiān)測、成熟后出欄數(shù)據(jù),再到最終的銷售等環(huán)節(jié)。對牦牛養(yǎng)殖階段溯源首先要保證數(shù)據(jù)來源的真實(shí)性,需要使用物聯(lián)網(wǎng)傳感器設(shè)備、小氣象站和攝像頭對數(shù)據(jù)進(jìn)行自動(dòng)獲取和上傳,同時(shí)向政府、牧場、企業(yè)、消費(fèi)者提供查詢API接口,實(shí)現(xiàn)溯源的監(jiān)管。
圖1 牦牛養(yǎng)殖溯源流程Fig.1 Traceability process of yak breeding
1.2.1 數(shù)據(jù)存儲(chǔ)機(jī)制 區(qū)塊鏈溯源系統(tǒng)中的存儲(chǔ)方式是將溯源產(chǎn)品在各節(jié)點(diǎn)產(chǎn)生的溯源數(shù)據(jù)直接寫入?yún)^(qū)塊鏈賬本中,但隨著參與網(wǎng)絡(luò)的用戶數(shù)量的增加,產(chǎn)生的溯源數(shù)據(jù)也成倍增長,區(qū)塊鏈存儲(chǔ)壓力隨之增大。此外,區(qū)塊鏈中所有節(jié)點(diǎn)賬本中存儲(chǔ)的數(shù)據(jù)都是一致的,對于處于競爭狀態(tài)的企業(yè)來說無法獲得有效的競爭數(shù)據(jù)。針對這些不足,本文設(shè)計(jì)了一種“區(qū)塊鏈+關(guān)系型數(shù)據(jù)庫”雙重存儲(chǔ)的存儲(chǔ)模式,通過將牦牛養(yǎng)殖鏈上各環(huán)節(jié)產(chǎn)生的溯源信息經(jīng)過智能合約進(jìn)行驗(yàn)證,最終將溯源信息和區(qū)塊鏈位置信息一同存入關(guān)系型數(shù)據(jù)庫中。通過這種存儲(chǔ)方式可以有效提高數(shù)據(jù)存儲(chǔ)的運(yùn)行效率,同時(shí)也保障了隱私數(shù)據(jù)的安全問題。部分?jǐn)?shù)據(jù)具體的存儲(chǔ)格式分別見表1與表2。
表1 本地?cái)?shù)據(jù)庫溯源字段Table 1 Local database traceability fields
表2 區(qū)塊鏈溯源信息數(shù)據(jù)結(jié)構(gòu)Table 2 Data structure of blockchain traceability information
1.2.2 Channel分割 Channel是區(qū)塊鏈網(wǎng)絡(luò)中成員進(jìn)行通信的一種主要通信機(jī)制,一個(gè)區(qū)塊鏈網(wǎng)絡(luò)可以存在多個(gè)Channel。一般情況下區(qū)塊鏈網(wǎng)絡(luò)中包含多個(gè)通道,每個(gè)通道又包含不同的peer節(jié)點(diǎn),參與網(wǎng)絡(luò)的每個(gè)peer節(jié)點(diǎn)都有一份可參與共享的賬本,這些節(jié)點(diǎn)獨(dú)立且平等的存儲(chǔ)著相同的信息,這就造成了數(shù)據(jù)的重復(fù)上傳及存儲(chǔ)。為實(shí)現(xiàn)數(shù)據(jù)的有效存儲(chǔ),需要對區(qū)塊鏈溯源系統(tǒng)中的通道進(jìn)行單獨(dú)設(shè)計(jì)。當(dāng)某一通道中存儲(chǔ)的數(shù)據(jù)量過大時(shí),可以拆分為多個(gè)通道,并給每個(gè)節(jié)點(diǎn)設(shè)置存儲(chǔ)上限值,其中每個(gè)通道分別存儲(chǔ)不同的數(shù)據(jù)信息,從而分擔(dān)peer節(jié)點(diǎn)的存儲(chǔ)壓力。拆分的本質(zhì)是在數(shù)據(jù)總量不變的情況下,縮小通道體積和減少數(shù)據(jù)的冗余。具體拆分如圖2所示。
圖2 Channel拆分設(shè)計(jì)圖Fig.2 Channel split design
1.2.3 智能合約 智能合約的業(yè)務(wù)邏輯有許多編程功能、預(yù)定義規(guī)則、條件(合同條款)等,由對等方之間的相互協(xié)議定義,以讀取、執(zhí)行和更新分類賬的當(dāng)前狀態(tài),當(dāng)滿足或觸發(fā)條件時(shí),執(zhí)行鏈碼自動(dòng)執(zhí)行特定交易[8-9]。目前,畜牧產(chǎn)品安全是一個(gè)主要的應(yīng)用領(lǐng)域,鏈碼的部署和實(shí)施可以有效處理、訪問、共享和存儲(chǔ)牦牛溯源關(guān)鍵數(shù)據(jù)、訪問控制及供應(yīng)鏈中牦??勺匪菪缘葐栴}。牦牛溯源鏈碼的主要特征之一是支持非受信任利益相關(guān)者之間的數(shù)字簽名批準(zhǔn),以根據(jù)約定條件執(zhí)行交易,使用樹狀結(jié)構(gòu)中創(chuàng)建的哈希函數(shù)對大型數(shù)據(jù)集進(jìn)行安全、高效的驗(yàn)證[10]。鏈碼支持可擴(kuò)展性和互操作性,以增強(qiáng)各利益相關(guān)者之間的協(xié)作,從而實(shí)現(xiàn)牦牛養(yǎng)殖信息的溯源。在不同利益相關(guān)者之間執(zhí)行多項(xiàng)交易時(shí),使用鏈碼取代第三方解決方案可以降低運(yùn)營和基礎(chǔ)設(shè)施成本[11-12]。
如圖3所示,基于區(qū)塊鏈的牦牛養(yǎng)殖溯源系統(tǒng)架構(gòu)由圖中4層組成,下面將詳細(xì)描述此架構(gòu)圖的具體含義和架構(gòu)流程。
圖3 區(qū)塊鏈溯源系統(tǒng)架構(gòu)圖Fig.3 Block chain traceability system structure
圖4 Fabric交易流程Fig. 4 Fabric transaction process
數(shù)據(jù)接入層:利用智能設(shè)備通過獲取牛的耳標(biāo)號來確定具體的牦牛個(gè)體,然后利用傳感器等智能設(shè)備獲取牦牛生長過程中的數(shù)據(jù)以及牧場周圍環(huán)境數(shù)據(jù),并上傳至溯源數(shù)據(jù)倉庫。
數(shù)據(jù)存儲(chǔ)層:將物聯(lián)網(wǎng)智能設(shè)備所采集的數(shù)據(jù)和人工錄入的數(shù)據(jù)存儲(chǔ)至溯源數(shù)據(jù)倉庫,通過區(qū)塊鏈基礎(chǔ)層將數(shù)據(jù)寫入?yún)^(qū)塊鏈賬本,以備查詢使用。
區(qū)塊鏈基礎(chǔ)層:本系統(tǒng)采用的是Hyperledger Fabric聯(lián)盟鏈開源框架,框架提供的證書認(rèn)證、加密算法、智能合約運(yùn)行環(huán)境、共識(shí)算法等為牦牛溯源系統(tǒng)提供了區(qū)塊鏈基礎(chǔ)服務(wù)。
查詢應(yīng)用層:在系統(tǒng)的前端界面進(jìn)行牧場或牦牛的溯源查詢,會(huì)調(diào)用存儲(chǔ)在區(qū)塊鏈賬本中的數(shù)據(jù)生成1個(gè)二維碼,以供消費(fèi)者、牧場人員、政府監(jiān)管部門共同監(jiān)管、查詢。
基于區(qū)塊鏈的青海牦牛養(yǎng)殖溯源系統(tǒng)通過物聯(lián)網(wǎng)智能設(shè)備和人工錄入的方式將牦牛養(yǎng)殖過程中獲取到的數(shù)據(jù)存入到區(qū)塊鏈系統(tǒng)的賬本中,再將數(shù)據(jù)通過區(qū)塊鏈基礎(chǔ)層的區(qū)塊鏈服務(wù)傳輸?shù)讲樵儜?yīng)用層展示出來,實(shí)現(xiàn)了溯源系統(tǒng)與區(qū)塊鏈技術(shù)的完美結(jié)合,保障了數(shù)據(jù)信息的真實(shí)性、透明性和安全性。
交易的基本事務(wù)流程如下:
(1)客戶端提出交易請求,通過可用SDK構(gòu)建事務(wù)請求并調(diào)用鏈碼函數(shù)生成新的交易提案,鏈碼函數(shù)將依次對分布式賬本的狀態(tài)執(zhí)行讀/寫操作。通過調(diào)用CA服務(wù)創(chuàng)建唯一簽名和身份證書,通過鏈碼規(guī)定客戶端要把請求發(fā)送到具體對等方,接著客戶端將其同時(shí)發(fā)送給一個(gè)或多個(gè)背書節(jié)點(diǎn)。
(2)當(dāng)背書節(jié)點(diǎn)接收請求后,會(huì)使用MSP驗(yàn)證簽名并確定請求是否被授權(quán)進(jìn)行合理操作,背書節(jié)點(diǎn)把收到的請求提案當(dāng)作輸入執(zhí)行交易,并驗(yàn)證背書簽名與提案是否一致,判斷指定的背書是否被執(zhí)行。若背書通過,則將獲得的結(jié)果及讀寫合集作為輸出發(fā)送給Orderer 節(jié)點(diǎn),使背書節(jié)點(diǎn)模擬執(zhí)行鏈碼,將結(jié)果傳回SDK并反饋給客戶端,此時(shí)賬本信息還未更新[13]。
(3)Orderer節(jié)點(diǎn)對交易進(jìn)行廣播和達(dá)成共識(shí),并對交易排序,按照區(qū)塊生成的規(guī)則將交易分塊分布,然后將生成的新區(qū)塊提交給Committer節(jié)點(diǎn):Fabric中的訂購服務(wù)建立區(qū)塊鏈中所有交易的總訂單,確保所有交易在對等方達(dá)成共識(shí),訂購服務(wù)通常由多個(gè)節(jié)點(diǎn)組成,以實(shí)現(xiàn)可擴(kuò)展性??蛻舳讼蛴嗁彿?wù)廣播交易信息,事務(wù)將包含讀寫集合、認(rèn)可對等簽名和通道標(biāo)識(shí)。訂購服務(wù)不需要檢查交易內(nèi)容來執(zhí)行其操作,它從不同的客戶端接收不同通道的事務(wù)并將它們排序。
(4)生成的區(qū)塊被發(fā)布到Channel中的節(jié)點(diǎn)后,先驗(yàn)證區(qū)塊中交易執(zhí)行背書時(shí)的數(shù)據(jù)是否發(fā)生變化,然后檢查賬本的讀寫集合是否有效,將檢查后的交易數(shù)據(jù)提交到狀態(tài)數(shù)據(jù)庫中實(shí)現(xiàn)信息的更新。
2.3.1 平臺(tái)選擇 區(qū)塊鏈網(wǎng)絡(luò)中分為公有鏈、私有鏈和聯(lián)盟鏈[14]。公有鏈的自由程度在這3個(gè)區(qū)塊鏈類型中最高,參與網(wǎng)絡(luò)的所有節(jié)點(diǎn)可隨意加入和離開網(wǎng)絡(luò),且每個(gè)節(jié)點(diǎn)可以直接參加鏈上數(shù)據(jù)的讀寫;私有鏈不僅不對外開放、代碼不開源,還會(huì)限制區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)的讀寫操作,必須開放權(quán)限才可使用;聯(lián)盟鏈一般是指幾個(gè)參與聯(lián)盟的節(jié)點(diǎn)組成的網(wǎng)絡(luò)結(jié)構(gòu),通過授權(quán)后可在網(wǎng)絡(luò)中加入新的節(jié)點(diǎn),其核心代碼對外開放,讀寫權(quán)限由等級控制,可以理解成是由參與區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn)組成的利益聯(lián)盟[15]。
3種區(qū)塊鏈類別對比情況見表3。如表3所示,通過分析公有鏈、私有鏈和聯(lián)盟鏈的參與者、中心化程度、交易速度、交易成本、共識(shí)算法選用、應(yīng)用場景等幾個(gè)類別的區(qū)別,可知雖然聯(lián)盟鏈的交易速度和去中心化程度不是最高,但從參與者和共識(shí)算法的角度來看,聯(lián)盟鏈最適合在牦牛養(yǎng)殖溯源體系中使用,故本系統(tǒng)采用聯(lián)盟鏈中具有代表性的Hyperledger Fabric開源區(qū)塊鏈網(wǎng)絡(luò)。Hyperledger Fabric是一個(gè)聯(lián)盟鏈的開發(fā)框架,具有擴(kuò)展性強(qiáng)、系統(tǒng)的運(yùn)行不需要token支持等特點(diǎn),且還支持在多個(gè)節(jié)點(diǎn)上一致地執(zhí)行用標(biāo)準(zhǔn)編程語言編寫的分布式應(yīng)用程序,這使得Fabric成為第一個(gè)用于許可區(qū)塊鏈的分布式操作系統(tǒng)[16-19]。Hyperledger Fabric允許組織共享區(qū)塊鏈基礎(chǔ)配置的同時(shí)還能夠保持組織的私密性,有效實(shí)現(xiàn)了數(shù)據(jù)的共享和數(shù)據(jù)隱私同步進(jìn)行。本系統(tǒng)在Hyperledger Fabric開源框架的基礎(chǔ)上進(jìn)行設(shè)計(jì)研究,旨在使用開放標(biāo)準(zhǔn)創(chuàng)建一個(gè)可公開訪問的數(shù)據(jù),并允許進(jìn)行分析以監(jiān)測牦牛養(yǎng)殖狀況和牧場環(huán)境情況,再搭配Hyperledger Explorer的區(qū)塊鏈可視化界面完成基于區(qū)塊鏈的牦牛溯源平臺(tái)管理系統(tǒng)的搭建,可以有效提高系統(tǒng)的可靠性、靈活性、可擴(kuò)展性和機(jī)密性。
表3 三種區(qū)塊鏈類別對比表Table 3 Comparison of three blockchain categories
2.3.2 系統(tǒng)實(shí)現(xiàn)過程
2.3.2.1 數(shù)據(jù)庫 數(shù)據(jù)庫部分采用狀態(tài)型數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫相結(jié)合的方式。在Fabric網(wǎng)絡(luò)中,狀態(tài)型數(shù)據(jù)庫分為LevelDB和CouchDB,LevelDB數(shù)據(jù)庫存在于節(jié)點(diǎn)的內(nèi)部,屬于本地?cái)?shù)據(jù)庫,CouchDB 數(shù)據(jù)庫存在于節(jié)點(diǎn)的外部,屬于備選狀態(tài)數(shù)據(jù)庫。歷史數(shù)據(jù)默認(rèn)存儲(chǔ)在LevelDB數(shù)據(jù)庫中,考慮到牦牛養(yǎng)殖溯源過程中調(diào)用智能合約產(chǎn)生的事務(wù)繁多,且CouchDB可以滿足LevelDB不支持的許多用例的鏈碼,因此為方便鏈碼的部署,將CouchDB修改為Fabric的默認(rèn)數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫使用MYSQL數(shù)據(jù)庫,在確定牦牛養(yǎng)殖階段溯源所需數(shù)據(jù)信息后,建立相關(guān)的數(shù)據(jù)庫,從而實(shí)現(xiàn)對各階段數(shù)據(jù)信息的記錄。其中還可以通過對MYSQL數(shù)據(jù)庫的查詢來驗(yàn)證狀態(tài)數(shù)據(jù)庫是否發(fā)生異常。在牦牛養(yǎng)殖溯源過程中,為了方便用戶的使用和維護(hù)數(shù)據(jù)的安全,數(shù)據(jù)存儲(chǔ)時(shí)應(yīng)采用MYSQL數(shù)據(jù)庫與狀態(tài)型數(shù)據(jù)庫相結(jié)合的存儲(chǔ)方式。
2.3.2.2 服務(wù)器端 Fabric網(wǎng)絡(luò)需要在Linux環(huán)境下運(yùn)行,因此使用虛擬機(jī)運(yùn)行程序。虛擬機(jī)使用的是64位的Centos7系統(tǒng),此系統(tǒng)由Red Hat Linux提供,屬于企業(yè)級Linux系統(tǒng),適用于區(qū)塊鏈聯(lián)盟鏈。虛擬機(jī)內(nèi)存為2GB、硬盤為40GB、Fabric版本為1.4.4,在區(qū)塊鏈中設(shè)置了2個(gè)組織(SimpleOrg1和SimpleOrg2) 、4個(gè)節(jié)點(diǎn)和1個(gè)Orderer排序節(jié)點(diǎn),并在Docker容器環(huán)境下運(yùn)行。
在本系統(tǒng)的區(qū)塊鏈網(wǎng)絡(luò)中使用Fabric CA發(fā)布的證書作為憑證,以保障參與網(wǎng)絡(luò)的用戶的身份安全,通過SHA-256算法和非對稱加密技術(shù)驗(yàn)證身份的有效性。當(dāng)參與網(wǎng)絡(luò)的用戶需要對系統(tǒng)進(jìn)行操作時(shí),網(wǎng)絡(luò)先對用戶的身份進(jìn)行驗(yàn)證,再對數(shù)據(jù)信息通過執(zhí)行智能合約進(jìn)行驗(yàn)證,保障了各節(jié)點(diǎn)之間交易的安全性。此外在系統(tǒng)中還設(shè)定了用戶的權(quán)限,根據(jù)權(quán)限不同調(diào)用的智能合約內(nèi)容也不同,保障了操作時(shí)溯源信息的安全性。Fabric中目前包含3種共識(shí)機(jī)制,分別是Solo、Kafka和PBFT。為了簡化系統(tǒng)模式,在實(shí)驗(yàn)測試階段使用Solo算法。
智能合約是由開發(fā)者制訂的協(xié)議,部署在Docker中由系統(tǒng)程序自動(dòng)執(zhí)行,人為無法操作,保證了客觀公正無法修改。一旦智能合約在區(qū)塊鏈網(wǎng)絡(luò)中部署成功,就會(huì)自動(dòng)獲取用戶的唯一地址,智能合約定義了整個(gè)通道的操作參數(shù)并執(zhí)行區(qū)塊鏈中事務(wù)的調(diào)用[20-21],當(dāng)對數(shù)據(jù)進(jìn)行上鏈時(shí),區(qū)塊鏈就會(huì)自動(dòng)調(diào)用智能合約并觸發(fā)相應(yīng)功能。智能合約分為模塊設(shè)計(jì)和功能設(shè)計(jì),模塊設(shè)計(jì)主要包括各參與網(wǎng)絡(luò)的不同權(quán)限用戶的鏈碼信息,根據(jù)系統(tǒng)應(yīng)用的實(shí)際環(huán)境和所需牦牛溯源信息進(jìn)行分模塊。在牦牛養(yǎng)殖溯源系統(tǒng)中,主要設(shè)計(jì)了以下智能合約的功能:智能合約初始化init()和invoke()調(diào)用函數(shù)模塊部分代碼;將上傳至鏈碼的數(shù)據(jù)信息寫入?yún)^(qū)塊鏈賬本; createBlockInfo():傳入牦牛編號、牦牛體重、等信息參數(shù); queryChainCodeByNo():牦牛數(shù)據(jù)信息查詢。圖5為部分智能合約功能。
圖5 部分智能合約代碼Fig. 5 Some codes of smart contract
2.3.2.3 客戶端 前端網(wǎng)站基于目前流行的TCP/IP協(xié)議,使用Java、Html5等作為開發(fā)語言,使用Spring Boot、jQuery、Ajax等技術(shù)進(jìn)行開發(fā),使用具有便捷、小巧、依賴性低等特點(diǎn)的DOT開源JavaScript模板引擎,通過API接口實(shí)現(xiàn)系統(tǒng)的具體功能。在前端對牦牛養(yǎng)殖信息進(jìn)行操作時(shí),服務(wù)器會(huì)對數(shù)據(jù)進(jìn)行預(yù)處理并轉(zhuǎn)化為json格式對數(shù)據(jù)進(jìn)行上鏈,然后通過智能合約的校驗(yàn)功能和共識(shí)機(jī)制的共識(shí)功能,最終完成數(shù)據(jù)的上鏈。
通過對青海省某牧場中的牦牛養(yǎng)殖鏈進(jìn)行實(shí)地調(diào)研,該牧場中上下游的完整參與主體包括:牧場、企業(yè)、小氣象站、政府監(jiān)管部門。其中從養(yǎng)殖到售賣涉及到的環(huán)節(jié)有多個(gè),每個(gè)環(huán)節(jié)和企業(yè)都有詳細(xì)的交易記錄,但各環(huán)節(jié)之間存在數(shù)據(jù)難以交互的問題,無法形成一條完整的信息鏈,從而導(dǎo)致交易效率低、數(shù)據(jù)不透明等。經(jīng)過分析與討論,采用本文設(shè)計(jì)的牦牛養(yǎng)殖溯源系統(tǒng)對牦牛養(yǎng)殖鏈進(jìn)行管理與優(yōu)化。
系統(tǒng)管理界面如圖6所示,用戶登錄至后臺(tái)管理界面后,根據(jù)用戶權(quán)限的不同查看的用戶界面也不相同。后臺(tái)管理界面的信息溯源分為牧場信息溯源和牦牛信息溯源,牧場信息溯源需要填寫牧場編號,然后點(diǎn)擊查詢后會(huì)自動(dòng)生成包含牧場溯源信息的二維碼;牦牛信息溯源需要填寫牦牛耳標(biāo)號,然后點(diǎn)擊查詢后會(huì)自動(dòng)生成包含牦牛溯源信息的二維碼。使用手機(jī)掃碼工具就可以對界面中的二維碼進(jìn)行掃描,完成溯源信息的查詢。
圖6 產(chǎn)品溯源界面Fig. 6 Product traceability interface
登錄可視化區(qū)塊鏈瀏覽器界面后,Hyperledger Explorer的主頁面板將顯示瀏覽器信息的最新狀態(tài)。由圖7所示,導(dǎo)航選項(xiàng)卡包括:DASHBOARD、NETWORK、BLOCKS、TRANSACTIONS、CHAINCODES和CHANNELS。用戶可以通過區(qū)塊鏈瀏覽器查看上鏈后的所有交易信息及區(qū)塊信息,每個(gè)面板都反映了每個(gè)選定通道的歷史、指標(biāo)和最新活動(dòng)。當(dāng)產(chǎn)品出現(xiàn)問題時(shí),監(jiān)管部門和牧場通過區(qū)塊鏈網(wǎng)絡(luò)和產(chǎn)品編碼信息可以快速定位到出現(xiàn)問題的環(huán)節(jié),及時(shí)發(fā)現(xiàn)并解決問題。在圖8中,用戶可以從提供的鏈接中直接訪問區(qū)塊詳細(xì)信息以及后臺(tái)管理界面所添加的具體交易信息,從而提高了數(shù)據(jù)的透明度、增加了消費(fèi)者的信任度,有利于牧場和企業(yè)的穩(wěn)定發(fā)展。
圖7 信息監(jiān)控界面Fig. 7 Information monitoring interface
圖8 區(qū)塊信息查詢界面Fig. 8 Block information query interface
與傳統(tǒng)的溯源體系相比,與區(qū)塊鏈技術(shù)相結(jié)合的牦牛養(yǎng)殖溯源系統(tǒng)具有去中心化的特征,統(tǒng)一了各節(jié)點(diǎn)之間數(shù)據(jù)上鏈的標(biāo)準(zhǔn),保障了各環(huán)節(jié)的快速交互,從而解決了溯源環(huán)節(jié)之間的信息孤島、信息失真、中心化嚴(yán)重等問題。此外在區(qū)塊鏈網(wǎng)絡(luò)中每個(gè)參與網(wǎng)絡(luò)的節(jié)點(diǎn)都是平等的,通過查看節(jié)點(diǎn)的賬本就可以對網(wǎng)絡(luò)中上鏈的數(shù)據(jù)進(jìn)行監(jiān)督,且鏈上數(shù)據(jù)具有時(shí)間戳、不可篡改,從而保障了溯源數(shù)據(jù)的真實(shí)性。建立包含區(qū)塊鏈技術(shù)的牦牛養(yǎng)殖溯源系統(tǒng),一定程度上保障了養(yǎng)殖鏈中的各參與者相互協(xié)作和相互監(jiān)督,實(shí)現(xiàn)了牦牛養(yǎng)殖過程中資源利用的最大化。
本文首先分析了目前牦牛溯源存在的具體問題,對牦牛養(yǎng)殖溯源系統(tǒng)的溯源流程和關(guān)鍵技術(shù)模型進(jìn)行分析,為改進(jìn)傳統(tǒng)溯源系統(tǒng)中存在的問題,使用區(qū)塊鏈和關(guān)系型數(shù)據(jù)庫相結(jié)合的存儲(chǔ)機(jī)制,設(shè)計(jì)了適用于牦牛養(yǎng)殖階段的智能合約和通道分割機(jī)制,為實(shí)現(xiàn)養(yǎng)殖階段中的數(shù)據(jù)安全提供了保障,減少了存儲(chǔ)的壓力,并縮小了通道體積和減少了數(shù)據(jù)的冗余。其次通過對區(qū)塊鏈平臺(tái)進(jìn)行對比,提出并選定使用Hyperledger Fabric對牦牛養(yǎng)殖溯源系統(tǒng)進(jìn)行實(shí)際開發(fā)。最后,結(jié)合具體的實(shí)驗(yàn)應(yīng)用成果,分析了系統(tǒng)的優(yōu)勢之處。本文提出的可追溯解決方案減少了對中心化數(shù)據(jù)庫和中介機(jī)構(gòu)的需求,解決了傳統(tǒng)溯源中信息孤島、信息失真、中心化嚴(yán)重、數(shù)據(jù)來源真實(shí)性、自動(dòng)化程度低等問題,保證了牦牛養(yǎng)殖階段溯源數(shù)據(jù)的完整性、透明性和安全性,從而降低了牦牛養(yǎng)殖階段以及后續(xù)階段數(shù)據(jù)信息存在的風(fēng)險(xiǎn)。