禹 忠,郭 暢,謝永斌,薛 棟
西安郵電大學(xué) 通信與信息工程學(xué)院,西安710121
醫(yī)藥溯源是指對藥品的生產(chǎn)加工、物流運(yùn)輸、零售使用等過程進(jìn)行記錄追蹤,這個工作需要藥品供應(yīng)鏈上下游各方的廣泛參與。2018年由“有點(diǎn)甜”阿司匹林引出的21省份特大假藥案暴露了目前醫(yī)藥防偽溯源系統(tǒng)的一大弊端,即目前醫(yī)藥防偽溯源系統(tǒng)的所有數(shù)據(jù)都存在中心數(shù)據(jù)庫內(nèi),溯源認(rèn)證采用中心記賬模式,數(shù)據(jù)在上傳、存儲、查詢等一系列操作中有被篡改的可能[1]。除此之外,目前醫(yī)藥防偽溯源系統(tǒng)還有兩點(diǎn)不足:一是存儲的數(shù)據(jù)信息不完整,消費(fèi)者無法通過查詢藥品溯源碼得到藥品的物流信息及使用信息;二是數(shù)據(jù)信息的私密性無法保證,藥品流通過程中參與者與最終消費(fèi)者查詢會得到相同的信息,容易造成消費(fèi)者個人信息泄露。
區(qū)塊鏈技術(shù)的出現(xiàn)為解決目前醫(yī)藥防偽溯源系統(tǒng)存在的數(shù)據(jù)易篡改、信息不完整以及信息私密性等問題提供一個新的思路[2]。首先,區(qū)塊鏈所具有的去中心化的性質(zhì)就是它的核心優(yōu)勢[3]。再結(jié)合密碼學(xué)技術(shù),將每一個區(qū)塊通過區(qū)塊頭內(nèi)的前一個區(qū)塊的哈希值串聯(lián)成鏈,且區(qū)塊鏈上的每個節(jié)點(diǎn)都保存一份相同的賬本,保證存儲在區(qū)塊鏈上的數(shù)據(jù)很難被篡改[4];其次,藥品流通過程中的每個參與者都可以通過鏈碼功能對藥品信息進(jìn)行記錄,得到藥品從生產(chǎn)到使用的全部信息,保證數(shù)據(jù)流的可靠性與完整性[5];最后,區(qū)塊鏈中聯(lián)盟鏈具有用戶非授權(quán)不能接入的特點(diǎn),作為聯(lián)盟鏈代表的Fabric區(qū)塊鏈平臺具有基于證書認(rèn)證的賬號體系,各組織的賬號是根據(jù)PKI(公鑰基礎(chǔ)設(shè)施)規(guī)范生成的一組證書和秘鑰文件,在查詢者發(fā)起查詢請求時,F(xiàn)abric側(cè)會發(fā)起對提案消息的驗(yàn)證,包括對組織賬號、通道信息及鏈碼地址的認(rèn)證,賬號體系結(jié)合鏈碼功能可以保證數(shù)據(jù)信息的私密性[6]。
本文提出的基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)以藥品作為溯源對象,以Fabric區(qū)塊鏈平臺為基礎(chǔ)。首先,依據(jù)系統(tǒng)的功能需求將醫(yī)藥廠、經(jīng)銷商、醫(yī)院作為組織加入到Fabric網(wǎng)絡(luò)中,使用文件配置的方法完成Fabric環(huán)境的多機(jī)部署,使其具有鏈碼的運(yùn)行環(huán)境。然后開發(fā)并部署鏈碼,在終端或者客戶端將藥品的生產(chǎn)、銷售及使用信息通過各組織內(nèi)經(jīng)過認(rèn)證的用戶賬號加密后上傳到區(qū)塊鏈。最后,開發(fā)客戶端程序,消費(fèi)者經(jīng)由客戶端通過藥品溯源碼發(fā)起查詢請求,實(shí)現(xiàn)藥品溯源信息在網(wǎng)頁的查詢。
區(qū)塊鏈技術(shù)自2008年因一個名為“中本聰”的學(xué)者發(fā)表的一篇有關(guān)比特幣的文章開始出現(xiàn)至今[7],經(jīng)歷了區(qū)塊鏈1.0“可編程貨幣”、區(qū)塊鏈2.0“可編程金融”、區(qū)塊鏈3.0“可編程社會”3個發(fā)展階段[8],其應(yīng)用場景也從最初的數(shù)字貨幣擴(kuò)展到醫(yī)療、金融、教育、物流供應(yīng)鏈等更多的領(lǐng)域[9]。2018年Caro等人提出一種集成區(qū)塊鏈技術(shù)和物聯(lián)網(wǎng)的可用于農(nóng)產(chǎn)品供應(yīng)鏈管理的完全分散式可追溯系統(tǒng)AgriBlockIoT,此系統(tǒng)設(shè)計并部署一個“從農(nóng)場到餐桌”的經(jīng)典食品可追溯場景,分別使用Ethereum和Hyperledger Sawtooth兩種不同的區(qū)塊鏈平臺實(shí)現(xiàn),并根據(jù)延遲、CPU負(fù)載和網(wǎng)絡(luò)的使用情況對兩種系統(tǒng)性能進(jìn)行分析評估和比較。此系統(tǒng)將整個農(nóng)產(chǎn)品供應(yīng)鏈中物聯(lián)網(wǎng)設(shè)備產(chǎn)生的有效數(shù)據(jù)信息存儲到底層的區(qū)塊鏈中,利用區(qū)塊鏈技術(shù)保證交易記錄的容錯性、不變性、透明性和可追溯性[10]。同年Figorilli等人結(jié)合RFID傳感器技術(shù)和區(qū)塊鏈技術(shù)實(shí)現(xiàn)一個區(qū)塊鏈架構(gòu)內(nèi)的木材鏈追溯系統(tǒng),此系統(tǒng)將可追溯信息及木材質(zhì)量相關(guān)信息整合到一個在線系統(tǒng)中,利用區(qū)塊鏈技術(shù)去中心化和分布式存儲的特點(diǎn)安全存儲數(shù)據(jù)信息及交易記錄,實(shí)現(xiàn)木材從立木到最終用戶的電子溯源[11]。2019年Lin等人提出并在以太坊上開發(fā)了一種基于區(qū)塊鏈和EPC信息服務(wù)的食品安全溯源系統(tǒng),此系統(tǒng)利用區(qū)塊鏈技術(shù)可追溯、時間戳及防篡改的特點(diǎn)結(jié)合智能合約和共識機(jī)制對整個食品供應(yīng)鏈中的有效數(shù)據(jù)進(jìn)行準(zhǔn)確記錄、共享及特定追蹤,防止信息交互過程發(fā)生數(shù)據(jù)篡改和信息泄露等問題,用于有效檢測和預(yù)防食品安全問題并追究責(zé)任[12]。
相比以上對農(nóng)產(chǎn)品、木材及食品溯源的重視,醫(yī)藥產(chǎn)品的重要性也不容置疑,所以一個安全可靠的醫(yī)藥防偽溯源系統(tǒng)是必需的。2010年Huang等人提出的基于RFID的監(jiān)管可追溯系統(tǒng),其具有的電子譜系和可追溯性不僅有益于醫(yī)療管理人員和患者,而且有益于供應(yīng)鏈上的其他參與者[13]。2016年蔡勇等提出一種基于二維碼的中藥質(zhì)量可追溯系統(tǒng),此系統(tǒng)能對藥品的生產(chǎn)、加工及流通過程等外在信息和中藥內(nèi)在質(zhì)量變化進(jìn)行追溯[14]。2018年Benatia等人通過對幾種產(chǎn)品追溯工作的比較研究,提出一種基于大數(shù)據(jù)技術(shù)的數(shù)據(jù)采集、存儲、分析和可視化的數(shù)據(jù)管理系統(tǒng),可以確保不同供應(yīng)鏈參與者之間的系統(tǒng)互操作性[15]。以上關(guān)于醫(yī)藥的溯源系統(tǒng)都有自己的優(yōu)勢,但不能同時滿足數(shù)據(jù)存儲去中心化、信息全面且防篡改以及信息私密性這三個要求。而區(qū)塊鏈技術(shù)在溯源系統(tǒng)的應(yīng)用中具有獨(dú)特優(yōu)勢:(1)區(qū)塊鏈技術(shù)的去中心化和分布式存儲特性可保證數(shù)據(jù)信息的公開透明性和數(shù)據(jù)流的完整可靠性;(2)區(qū)塊鏈技術(shù)可追溯和數(shù)據(jù)防篡改的特點(diǎn)可以有效解決供應(yīng)鏈中的假冒偽劣問題;(3)區(qū)塊鏈技術(shù)數(shù)據(jù)防篡改和時間戳的特點(diǎn)可以實(shí)現(xiàn)舉證和追責(zé),解決各參與方的糾紛。結(jié)合區(qū)塊鏈的技術(shù)優(yōu)勢和目前醫(yī)藥防偽溯源系統(tǒng)的不足,本文提出了一種基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)。
此系統(tǒng)針對目前醫(yī)藥防偽溯源系統(tǒng)的不足之處有如下創(chuàng)新:(1)利用區(qū)塊鏈技術(shù)解決傳統(tǒng)醫(yī)藥溯源系統(tǒng)存在的數(shù)據(jù)存儲中心化易篡改問題,保證藥品數(shù)據(jù)的可靠性。(2)結(jié)合區(qū)塊鏈技術(shù)和鏈碼功能加入藥品的流通信息和使用信息,保證藥品數(shù)據(jù)流的完整性。(3)利用Fabric基于證書認(rèn)證的賬號體系結(jié)合鏈碼功能保證數(shù)據(jù)信息的私密性。
圖1展示的是系統(tǒng)的總體設(shè)計流程:包括Fabric網(wǎng)絡(luò)環(huán)境搭建、鏈碼開發(fā)、客戶端開發(fā)及藥品信息的上傳與查詢。其中具體流程如下:
①Fabric環(huán)境多機(jī)部署及鏈碼開發(fā):根據(jù)系統(tǒng)的功能需求部署Fabric環(huán)境,系統(tǒng)環(huán)境配置有三個組織,分別對應(yīng)醫(yī)藥廠、經(jīng)銷商和醫(yī)院三個現(xiàn)實(shí)場景,且三個組織的節(jié)點(diǎn)加入同一個通道,每個組織的節(jié)點(diǎn)上安裝不同的鏈碼以實(shí)現(xiàn)不同組織對藥品不同操作功能的需求。
②藥品信息上傳:藥品在醫(yī)藥廠被生產(chǎn)和包裝,出廠時藥品包裝上會有唯一的藥品溯源碼。在藥品流通到醫(yī)藥廠、經(jīng)銷商和醫(yī)院三個組織時,根據(jù)各組織節(jié)點(diǎn)上安裝鏈碼的功能,以藥品溯源碼為鍵,在終端或客戶端用各個組織內(nèi)經(jīng)過認(rèn)證的用戶賬號分別將藥品的生產(chǎn)信息、流通信息及使用信息上傳到Fabric區(qū)塊鏈。
③藥品溯源信息查詢:消費(fèi)者在購買或使用藥品后,使用經(jīng)過組織3認(rèn)證的用戶賬號登錄區(qū)塊鏈醫(yī)藥防偽溯源平臺,輸入藥品溯源碼,即可跳轉(zhuǎn)至藥品溯源信息顯示界面,得到藥品從生產(chǎn)到使用各個階段的溯源信息,此過程仍通過鏈碼3實(shí)現(xiàn)。
本文系統(tǒng)架構(gòu)模型包括Fabric網(wǎng)絡(luò)環(huán)境模塊、智能合約模塊和Web服務(wù)及客戶端開發(fā)模塊三個部分[16]。具體架構(gòu)設(shè)計如圖2所示。
圖1 系統(tǒng)流程圖
圖2 系統(tǒng)架構(gòu)模型
Fabric網(wǎng)絡(luò)環(huán)境模塊包括數(shù)據(jù)層和網(wǎng)絡(luò)層,它的功能是對數(shù)據(jù)采集部分采集到的藥品數(shù)據(jù)進(jìn)行存儲。其中數(shù)據(jù)層是區(qū)塊鏈的核心部分,用于將藥品流通過程中產(chǎn)生的數(shù)據(jù)加密后上傳到區(qū)塊鏈[17];網(wǎng)絡(luò)層是Fabric區(qū)塊鏈平臺信息傳輸?shù)幕A(chǔ),包括共識機(jī)制、P2P網(wǎng)絡(luò)及網(wǎng)絡(luò)中的數(shù)據(jù)驗(yàn)證機(jī)制[18];數(shù)據(jù)采集部分需要采集的數(shù)據(jù)包括藥品的生產(chǎn)信息、物流信息及使用信息,其采集數(shù)據(jù)的具體分類如圖3所示。此處顯示的藥品信息即為系統(tǒng)需要上傳和查詢所得的信息。
圖3 采集數(shù)據(jù)的具體分類
智能合約模塊指的是合約層,是系統(tǒng)的核心,封裝的是能夠?qū)崿F(xiàn)系統(tǒng)功能的智能合約[19]。Fabric上的智能合約又被人稱為鏈碼(Chaincode),是一段可以在Fabric區(qū)塊鏈平臺上進(jìn)行驗(yàn)證,存儲和執(zhí)行等操作的代碼,而且鏈碼還有與Fabric網(wǎng)絡(luò)進(jìn)行交互的功能。
Web服務(wù)及客戶端開發(fā)模塊包括應(yīng)用層和用戶層,使消費(fèi)者及藥品流通過程的各參與者與Fabric區(qū)塊鏈平臺進(jìn)行交互,為用戶提供簡潔的互動界面[20]。其中應(yīng)用層包括輸入接口和各種信息查詢?nèi)肟?;用戶層面向用戶或商家,包括藥品流通過程中各個參與者。
醫(yī)藥防偽溯源系統(tǒng)的完成需要Fabric網(wǎng)絡(luò)環(huán)境、智能合約和Web服務(wù)及客戶端開發(fā)三個模塊功能的協(xié)同實(shí)現(xiàn),下文將會詳細(xì)介紹各個模塊功能。
Fabric網(wǎng)絡(luò)環(huán)境模塊的主要功能是創(chuàng)建系統(tǒng)所需的組織節(jié)點(diǎn),具有鏈碼的運(yùn)行環(huán)境,并將藥品數(shù)據(jù)信息上傳至區(qū)塊鏈。根據(jù)圖1所示的系統(tǒng)流程圖部署Fabric環(huán)境,使用配置文件的方法創(chuàng)建組織節(jié)點(diǎn),并通過Fabric的模塊生成證書和數(shù)據(jù)文件以及系統(tǒng)和通道的創(chuàng)始塊,最后開啟orderer節(jié)點(diǎn)和peer節(jié)點(diǎn),創(chuàng)建通道并將節(jié)點(diǎn)加入通道,完成醫(yī)藥防偽溯源系統(tǒng)的Fabric網(wǎng)絡(luò)環(huán)境多機(jī)部署,以便用來實(shí)現(xiàn)藥品數(shù)據(jù)的存儲及查詢,確保數(shù)據(jù)的真實(shí)性及完整性。根據(jù)系統(tǒng)需求,其配置信息中的組織標(biāo)識符和組織ID及后續(xù)所安裝的鏈碼名字如表1所示。
表1 醫(yī)藥防偽溯源系統(tǒng)組織信息表
基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)的智能合約模塊封裝的是藥品數(shù)據(jù)存儲和查詢的鏈碼。一段完整的鏈碼包含鏈碼代碼和鏈碼管理命令兩部分。鏈碼代碼是功能業(yè)務(wù)的承載體,負(fù)責(zé)具體的業(yè)務(wù)邏輯與身份認(rèn)證。鏈碼管理命令負(fù)責(zé)鏈碼的部署,安裝,調(diào)用等工作,命令中包含操作對象的數(shù)據(jù)信息;通過整體分析,運(yùn)用在醫(yī)藥防偽溯源系統(tǒng)上的鏈碼具體結(jié)構(gòu)如圖4所示[21]。
圖4 鏈碼結(jié)構(gòu)圖
其中代碼層中的信息管理是為了與同一通道中的其他節(jié)點(diǎn)上的鏈碼進(jìn)行通信,并與客戶端傳來的命令進(jìn)行交互,使鏈碼中提供的節(jié)點(diǎn)地址被發(fā)現(xiàn)并通知;功能實(shí)現(xiàn)是根據(jù)系統(tǒng)功能需求編寫代碼實(shí)現(xiàn)藥品信息的上傳及查詢。
管理命令層包含每一個操作對象的數(shù)據(jù)信息,鏈碼名和通道名是此次操作命令需要指定的鏈碼和通道;身份證明是指驗(yàn)證此次操作的用戶身份,保證發(fā)起此次命令的用戶是經(jīng)過組織證書認(rèn)證的;關(guān)鍵溯源信息則包括此藥品從生產(chǎn)到使用的所有上傳到區(qū)塊鏈上的信息,或者是查詢所需要提交的藥品溯源碼。
4.2.1 鏈碼功能流程
Fabric的鏈碼是客戶端與Fabric網(wǎng)絡(luò)之間的橋梁,本次醫(yī)藥防偽溯源系統(tǒng)設(shè)計中的鏈碼使用Go語言開發(fā)。三個鏈碼分別安裝在不同組織的節(jié)點(diǎn)上,鏈碼的功能包括上傳藥品信息、獲取藥品信息以及獲取藥品的交易記錄。且安裝在組織3節(jié)點(diǎn)上的鏈碼還具有調(diào)用安裝在組織1和組織2節(jié)點(diǎn)上鏈碼的功能,以此來完成藥品信息的溯源。
圖5展示的是部署在組織3節(jié)點(diǎn)上的鏈碼功能流程圖。在鏈碼部署成功后的實(shí)例化過程中會用到系統(tǒng)初始化Init方法,接下來是系統(tǒng)Invoke方法,主要功能是發(fā)起交易。在本次鏈碼開發(fā)的Invoke方法下定義了功能類型functiontype、藥品名稱medicalname、藥品數(shù)據(jù)medicaldata三個參數(shù),功能類型對應(yīng)以下四種接口的存儲管理方法,針對此次系統(tǒng)設(shè)計所需要的四種功能:
(1)如果functiontype=putdata,則會使用Chaincode-StubInterface接口的PutState方法,此方法的功能是存儲數(shù)據(jù)到Fabric賬本中,負(fù)責(zé)接收并存儲從客戶端傳遞過來的藥品使用信息的相關(guān)數(shù)據(jù)。
(2)如果functiontype=getdata,則會使用Chaincode-StubInterface接口的GetState方法,此方法的功能是從Fabric賬本中獲取指定數(shù)據(jù),并將獲取的數(shù)據(jù)交給鏈碼處理,可以負(fù)責(zé)驗(yàn)證通過功能(1)存儲的數(shù)據(jù)是否存在于Fabric賬本中。
(3)如果functiontype=gethistory,則會使用Chaincode-StubInterface接口的GetHistoryForKey方法,此方法的功能是獲取指定鍵的歷史記錄,此系統(tǒng)中以某個藥品溯源碼為指定鍵進(jìn)行查詢來獲取此藥品的歷史記錄。
(4)如果functiontype=getmedicalhistory,則會使用ChaincodeStubInterface接口的GetHistoryForKey方法和調(diào)用其他鏈碼InvokeChaincode方法,前者功能與功能(3)一樣,后者的功能是調(diào)用安裝在組織1和組織2節(jié)點(diǎn)上的鏈碼,以保證通過執(zhí)行功能(4)就可以得到指定藥品從生產(chǎn)到使用的全部數(shù)據(jù)信息。
圖5 鏈碼功能流程圖
如果功能方法不是以上四種,則直接返回空值;功能(3)和功能(4)執(zhí)行后得到的鍵值數(shù)組切片要通過json.Marshal函數(shù)轉(zhuǎn)換成json數(shù)組輸出,以便后續(xù)數(shù)據(jù)在網(wǎng)頁端的顯示。
4.2.2 鏈碼執(zhí)行過程
系統(tǒng)功能的實(shí)現(xiàn)離不開鏈碼的執(zhí)行,藥品的關(guān)鍵溯源信息也需要通過鏈碼來存儲和查詢,在鏈碼安裝及實(shí)例化完成后,需要在終端或者客戶端輸入命令來調(diào)用鏈碼。圖6是鏈碼執(zhí)行的示意圖,展示了在客戶端發(fā)起藥品溯源查詢時鏈碼具體的執(zhí)行過程。
圖6 鏈碼執(zhí)行示意圖
①消費(fèi)者通過客戶端發(fā)起藥品溯源查詢請求。
②客戶端的Fabric-SDK獲取消費(fèi)者(查詢發(fā)起者)的身份認(rèn)證證書。
③客戶端與peer節(jié)點(diǎn)建立連接。
④客戶端發(fā)送交易提案給Fabric的peer節(jié)點(diǎn),背書節(jié)點(diǎn)顯示查詢流程提案開始。Fabric側(cè)發(fā)起對提案消息的驗(yàn)證,包括對組織身份、通道信息及鏈碼地址的認(rèn)證。首先驗(yàn)證通道報頭信息,其次檢查發(fā)起者的簽名信息,包括對發(fā)起者組織身份是否合法的認(rèn)證以及對簽名存在是否正確的認(rèn)證。最后驗(yàn)證鏈碼信息,包括對報頭信息及鏈碼名稱的驗(yàn)證。
⑤背書節(jié)點(diǎn)提供流程提案交易號txid,F(xiàn)abric側(cè)按交易號檢索事務(wù)并構(gòu)建新的交易模擬器,背書節(jié)點(diǎn)開始模擬提案并提供交易號txid及通道id。隨后啟動鏈碼(若鏈碼正在運(yùn)行,則不需要重新啟動),其包括執(zhí)行、設(shè)置鏈碼提議、發(fā)送執(zhí)行消息、Fabric側(cè)處理鏈碼消息及發(fā)送狀態(tài)消息事務(wù)等一系列操作。
⑥啟動的鏈碼根據(jù)交易提案查詢對應(yīng)的賬本,從緩存中獲取鏈碼所需要的數(shù)據(jù),獲取完成后通知并退出。
⑦peer節(jié)點(diǎn)退出鏈碼的調(diào)用過程,F(xiàn)abric側(cè)完成事務(wù)模擬/查詢執(zhí)行,退出查詢流程提案。區(qū)塊鏈上的節(jié)點(diǎn)返回相應(yīng)的信息,完成查詢過程。
基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)的前端界面主要包括查詢?nèi)肟诮缑婕靶畔@示界面。其中模塊開發(fā)程序的主要功能是負(fù)責(zé)處理消費(fèi)者在客戶端發(fā)送的請求,并與Fabric區(qū)塊鏈進(jìn)行交互。總體來說,Web服務(wù)及客戶端開發(fā)模塊的兩個主要功能就是在后臺進(jìn)行邏輯處理并收集數(shù)據(jù)以及在前端界面合理簡潔的顯示數(shù)據(jù)。
鏈碼部署完成之后,通過編寫客戶端演示程序來模擬一個客戶端發(fā)起交易請求,演示程序由Node.js來編寫。其中Node.js提供的http模塊主要作用就是搭建http服務(wù)端和客戶端。此次客戶端開發(fā)指定http服務(wù)啟動在3000端口,在終端輸入命令開啟瀏覽器,啟動成功之后在瀏覽器中輸入指定網(wǎng)址來進(jìn)行醫(yī)藥溯源。
以一次藥品查詢?yōu)槔?,消費(fèi)者在客戶端發(fā)起查詢請求,客戶端會根據(jù)查詢發(fā)起者的地址信息進(jìn)行服務(wù)器請求,服務(wù)器端在接收請求后會運(yùn)行Web服務(wù)代碼調(diào)用Fabric區(qū)塊鏈上的鏈碼進(jìn)行數(shù)據(jù)查詢。此時還會對登錄客戶端的用戶賬號進(jìn)行認(rèn)證,經(jīng)過認(rèn)證的具有不同的賬號的請求指令會指向不同的鏈碼地址,得到不同的查詢結(jié)果。之后服務(wù)器端會把處理得到的藥品溯源信息數(shù)據(jù)返回到客戶端,將查詢結(jié)果顯示給消費(fèi)者。
圖7展示的是醫(yī)藥信息的查詢?nèi)肟诮缑?,此時并未輸入查詢藥品的藥品溯源碼medical_id,顯示信息為“please enter the medical_id”。
圖7 藥品信息的查詢界面
本次查詢發(fā)起者的身份信息為“username:‘Admin’,mspid:‘Org3MSP’”,且發(fā)起請求所在的節(jié)點(diǎn)為peer0org3,當(dāng)添加藥品溯源碼后再次發(fā)起溯源請求,部署在組織3節(jié)點(diǎn)上的鏈碼就會啟動,進(jìn)而調(diào)用部署在前兩個組織節(jié)點(diǎn)的鏈碼,就能得到藥品從生產(chǎn)到使用的全部溯源信息。此處以藥品“香菊膠囊”為例,假設(shè)香菊膠囊的藥品溯源碼為0000001,按照圖8所示在瀏覽器發(fā)起medical_id=0000001藥品的查詢請求,就可以得到香菊膠囊的溯源信息,具體數(shù)據(jù)如圖8所示,可以看到查詢結(jié)果中的藥品溯源碼與輸入的藥品溯源碼是一致的。
本次醫(yī)藥防偽溯源系統(tǒng)設(shè)計的環(huán)境搭建部分在虛擬機(jī)vmware中完成,操作系統(tǒng)為ubuntu16.4。虛擬機(jī)設(shè)置如下:內(nèi)存為1 GB,處理器為2,硬盤為30 GB。圖9展示的是查詢命令發(fā)出后Fabric的響應(yīng)時間,以其中50次查詢結(jié)果為例。圖中橫坐標(biāo)i表示第i次查詢,縱坐標(biāo)t表示每次查詢Fabric的響應(yīng)時間,具體響應(yīng)時間處于動態(tài)變化中,與查詢命令發(fā)出時刻的網(wǎng)絡(luò)速率有關(guān),其平均響應(yīng)時間為22 ms,符合網(wǎng)絡(luò)時延要求。當(dāng)消費(fèi)者在客戶端進(jìn)行藥品溯源信息查詢時,其結(jié)果顯示界面不會出現(xiàn)卡頓或崩潰,可以獲得較好的用戶體驗(yàn)。
圖8 藥品的溯源信息顯示界面
圖9 查詢時Fabric的響應(yīng)時間
為了保證數(shù)據(jù)的隱私性,使消費(fèi)者的個人信息不被泄露,基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)可以根據(jù)查詢發(fā)起者不同的身份信息來確定此次查詢者可以調(diào)用的鏈碼,并根據(jù)鏈碼功能來獲得不同的數(shù)據(jù)信息。被組織1和組織2認(rèn)證的用戶不能得到組織3節(jié)點(diǎn)存儲的藥品使用信息,以身份信息為“username:‘Admin’,mspid:‘Org2MSP’”的被組織2認(rèn)證的查詢者為例,此節(jié)點(diǎn)發(fā)出的信息查詢只能調(diào)用部署在組織2節(jié)點(diǎn)上的鏈碼,得到的是藥品的流通信息,具體數(shù)據(jù)如圖10所示。
圖10 藥品流通信息顯示界面
基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)具有較為簡單的查詢操作,較短的時間響應(yīng),非常完整的溯源信息以及非常高的隱私性。將此系統(tǒng)與相關(guān)工作中基于其他技術(shù)的三篇有關(guān)醫(yī)藥溯源的系統(tǒng)作比較可以得出如表2所示的結(jié)果。從表2可以看出,四篇文章中所設(shè)計的系統(tǒng)都能完成基本功能,即信息可追溯,參考文獻(xiàn)[14]與本文所設(shè)計的系統(tǒng)具有更好的信息完整性。而且本文設(shè)計的基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng)借助于區(qū)塊鏈技術(shù)所具有的去中心化、基于證書認(rèn)證的賬號體系等特性,使此系統(tǒng)在存儲分散化程度及信息隱私性方面具有獨(dú)特的優(yōu)勢。
表2 系統(tǒng)性能對比表
本文從藥品的實(shí)際應(yīng)用場景出發(fā),設(shè)計了一個基于區(qū)塊鏈的醫(yī)藥溯源系統(tǒng),以藥品為溯源對象,以Fabric區(qū)塊鏈平臺為基礎(chǔ),對藥品生產(chǎn)加工、物流運(yùn)輸及零售使用等過程進(jìn)行數(shù)據(jù)記錄追蹤。通過客戶端使用藥品溯源碼進(jìn)行查詢,得到此藥品的溯源信息,且Fabric響應(yīng)時間平均為22 ms,驗(yàn)證了設(shè)計方案的可行性與有效性。區(qū)塊鏈技術(shù)與溯源技術(shù)的結(jié)合應(yīng)用,進(jìn)一步完善了醫(yī)藥防偽溯源系統(tǒng)的性能,利用區(qū)塊鏈技術(shù)去中心化、數(shù)據(jù)難以篡改及交易可追溯的特點(diǎn)保證藥品數(shù)據(jù)的可靠性,實(shí)現(xiàn)藥品的全過程可追溯,且可追溯到鏈上的每一個參與者,提高醫(yī)藥防偽溯源信息的透明度,保證消費(fèi)者能通過查詢藥品的溯源碼了解到藥品從生產(chǎn)到使用的全部信息。而且Fabric中基于證書認(rèn)證的賬號體系結(jié)合鏈碼功能可以保證數(shù)據(jù)的隱私性,使消費(fèi)者的個人信息不被泄露。另外在商業(yè)應(yīng)用中,結(jié)合區(qū)塊鏈技術(shù)的醫(yī)藥溯源系統(tǒng)可以為品牌背書,為醫(yī)藥企業(yè)增加信任值,提高醫(yī)藥企業(yè)競爭力,帶來額外收益。除了對醫(yī)藥的溯源,區(qū)塊鏈技術(shù)還可以與電子病歷信息儲存、共享慢性疾病診療、醫(yī)療欺詐與理賠方面相結(jié)合,為醫(yī)療衛(wèi)生的良好發(fā)展提供更有利的保障。