焦瑞金 鄭廣海
(大連交通大學(xué)軟件學(xué)院 遼寧 大連 116000)
食品溯源是指對(duì)食品的生產(chǎn)加工、物流運(yùn)輸、銷(xiāo)售使用等過(guò)程進(jìn)行追蹤記錄,使參與者都能清楚地了解到食品的流通過(guò)程,當(dāng)然這也需要食品參與各方的積極配合。近年來(lái),非洲豬瘟等食品安全事件,嚴(yán)重引發(fā)了人們的信任危機(jī)。
食品溯源的研究意義在于食品安全問(wèn)題頻發(fā)的當(dāng)下,通過(guò)設(shè)計(jì)具有明確功能和可信技術(shù)的系統(tǒng)架構(gòu),從食品根源上開(kāi)始排查可能出現(xiàn)的食品安全問(wèn)題并提供預(yù)警,極大地降低可能出現(xiàn)的規(guī)模性食品安全事件,保證公眾的健康,對(duì)整個(gè)市場(chǎng)的食品安全監(jiān)管也大有裨益。食品安全問(wèn)題可能產(chǎn)生于食品生產(chǎn)、加工、流通等各個(gè)環(huán)節(jié),長(zhǎng)久以來(lái)都沒(méi)有很好的辦法能夠減少或預(yù)防食品安全事件的發(fā)生,如何采用有效的手段來(lái)保障食品質(zhì)量成為了一個(gè)社會(huì)難題。目前國(guó)內(nèi)外針對(duì)食品安全問(wèn)題普遍采用的一些手段包括抽檢、備份待檢、社會(huì)輿論監(jiān)督、食品供應(yīng)鏈條上的企業(yè)公德心和實(shí)行食品安全責(zé)任制,但以上應(yīng)對(duì)策略的機(jī)構(gòu)及公眾參與度低,不確定性較大,缺乏即時(shí)性,往往只能在食品安全問(wèn)題發(fā)生之后才能啟動(dòng)應(yīng)急預(yù)案,進(jìn)而引發(fā)社會(huì)輿論的關(guān)注和譴責(zé),但公眾的健康已經(jīng)受到了侵害,而且事后的追責(zé)過(guò)程難度很大。
本系統(tǒng)架構(gòu)設(shè)計(jì)的目的在于從食品溯源的視角,基于區(qū)塊鏈技術(shù)和Agent技術(shù),從食品生產(chǎn)采購(gòu)源頭、運(yùn)輸、儲(chǔ)存以及使用和加工的整個(gè)過(guò)程提供實(shí)時(shí)且不可篡改的數(shù)據(jù)監(jiān)測(cè)和存儲(chǔ),從而為解決食品安全問(wèn)題,保障公眾健康提供一套具有技術(shù)保障的可行方案。傳統(tǒng)應(yīng)對(duì)食品安全的方式,如人工手動(dòng)記錄食品進(jìn)出庫(kù)的倉(cāng)儲(chǔ)記錄和采買(mǎi)信息,發(fā)生食品安全問(wèn)題之后再啟動(dòng)應(yīng)急預(yù)案,化驗(yàn)問(wèn)題食物,此時(shí)人們的健康已經(jīng)受到侵害,另外留存數(shù)據(jù)少且容易被人為改動(dòng)或破壞,加之食品安全問(wèn)題責(zé)任重大,牽扯單位部門(mén)過(guò)多,事后追責(zé)過(guò)程難度很大。針對(duì)上述食品在流通過(guò)程中數(shù)據(jù)少的問(wèn)題,可以使用區(qū)塊鏈技術(shù)完美解決,通過(guò)將食品存儲(chǔ)的倉(cāng)庫(kù)和運(yùn)輸車(chē)輛信息,甚至食品的栽培環(huán)境的相關(guān)信息都記錄在區(qū)塊鏈中,就能防止數(shù)據(jù)被篡改,及時(shí)有效地查驗(yàn)信息,方便追責(zé)。Agent可用于分布式的系統(tǒng)中,通過(guò)競(jìng)爭(zhēng)、協(xié)作等可顯示出智能化的系統(tǒng)行為?;趨^(qū)塊鏈和Agent的技術(shù)優(yōu)勢(shì),設(shè)計(jì)了一種基于區(qū)塊鏈的食品溯源多Agent系統(tǒng)架構(gòu),以解決食品安全問(wèn)題。
在我國(guó)重視食品溯源的基礎(chǔ)上,要設(shè)計(jì)實(shí)現(xiàn)基于區(qū)塊鏈技術(shù)的包含生產(chǎn)、運(yùn)輸、銷(xiāo)售到消費(fèi)者的全過(guò)程的安全可靠的新型食品溯源系統(tǒng)。打破傳統(tǒng)溯源系統(tǒng)存在的交易信息不完善、數(shù)據(jù)隱私易泄露、中心控制壁壘、無(wú)法追責(zé)等問(wèn)題,為食品安全領(lǐng)域做出貢獻(xiàn)。
區(qū)塊鏈的概念最早是在2008年中本聰[1]的《比特幣白皮書(shū)》中提出的,起源于數(shù)字貨幣比特幣。比特幣作為一種加密貨幣,只是基于比特幣的底層技術(shù)區(qū)塊鏈技術(shù)的一種應(yīng)用。“區(qū)塊鏈”是一種使用加密原語(yǔ)的分布式技術(shù),依賴于特定的成員機(jī)制和一致性協(xié)議來(lái)維護(hù)共享、不可變和透明的僅附加寄存器。
目前的食品溯源系統(tǒng)大都采用中心化的存儲(chǔ)模式來(lái)存儲(chǔ)和查詢食品的相關(guān)信息,如文獻(xiàn)[2]設(shè)計(jì)了一個(gè)完整的全生命周期食品追溯系統(tǒng),監(jiān)察食品從源頭到配送到消費(fèi)的整個(gè)過(guò)程,以保障食物安全。文獻(xiàn)[3]用科學(xué)方法分析可追溯系統(tǒng)的有效性,并建立了食品安全數(shù)據(jù)分析系統(tǒng),在一定程度上保障了食品安全。但這些方式不能保證高水平的系統(tǒng)可靠性、可擴(kuò)展性和信息準(zhǔn)確性。區(qū)塊鏈技術(shù)的出現(xiàn)為我們提供了一個(gè)新的解決方案。例如,李明佳等[4]提出一個(gè)基于區(qū)塊鏈的食品安全溯源系統(tǒng),致力于解決數(shù)據(jù)存儲(chǔ)不安全的問(wèn)題;薛騰飛等[5]提出一個(gè)基于區(qū)塊鏈的醫(yī)療數(shù)據(jù)共享模型,適用于解決各醫(yī)療機(jī)構(gòu)數(shù)據(jù)難以共享的問(wèn)題;Tsang等[6]提出了一種基于區(qū)塊鏈IoT的食品可追溯系統(tǒng),將區(qū)塊鏈、物聯(lián)網(wǎng)技術(shù)和模糊邏輯的新部署整合到一個(gè)可追溯的整體貨架期管理系統(tǒng)中,解決了易逝食品存儲(chǔ)管理的難題;Yu等[7]設(shè)計(jì)了一種基于區(qū)塊鏈和RFID的腳環(huán),采用區(qū)塊鏈技術(shù)和RFID技術(shù),具有防篡改和防拷貝功能,記錄從養(yǎng)雞到銷(xiāo)售的所有數(shù)據(jù),有利于提高食品質(zhì)量監(jiān)管和食品行業(yè)的信譽(yù)。Tian[8]構(gòu)建的基于RFID和區(qū)塊鏈技術(shù)的農(nóng)產(chǎn)品供應(yīng)鏈可追溯系統(tǒng),有效追溯供應(yīng)鏈可信信息,保障食品安全。Pal等[9]利用新興的區(qū)塊鏈技術(shù)來(lái)改善物聯(lián)網(wǎng)食品物流。Yeh等[10]利用區(qū)塊鏈技術(shù)在食品可追溯性和透明度方面的能力,建立關(guān)于感知信任的擴(kuò)展模型。結(jié)果表明,區(qū)塊鏈技術(shù)具有建立信任和影響購(gòu)買(mǎi)意愿的能力。Salah等[11]提出了一種利用Ethereum區(qū)塊鏈和智能契約有效地執(zhí)行商業(yè)交易的方法,以跟蹤整個(gè)農(nóng)業(yè)供應(yīng)鏈中的大豆,為供應(yīng)鏈生態(tài)系統(tǒng)提供了一個(gè)高水平的透明性和可跟蹤性。Liu等[12]開(kāi)發(fā)了數(shù)據(jù)采集系統(tǒng),通過(guò)基于多智能體系統(tǒng)(MAS)的蜂產(chǎn)品追溯體系結(jié)構(gòu),解決了采集數(shù)據(jù)、管理原始數(shù)據(jù)、及時(shí)準(zhǔn)確地實(shí)現(xiàn)數(shù)據(jù)交互等問(wèn)題。
本文設(shè)計(jì)將區(qū)塊鏈技術(shù)和Agent技術(shù)結(jié)合起來(lái),讓其發(fā)揮各自的優(yōu)勢(shì),增強(qiáng)了多Agent系統(tǒng)的安全性(如完整性、身份管理、事務(wù)保證和數(shù)據(jù)安全性),也使系統(tǒng)朝著更加智能化的方向發(fā)展,節(jié)約了資源消耗和人力成本。由于區(qū)塊鏈分布式存儲(chǔ)的特點(diǎn),鏈上的各節(jié)點(diǎn)可隨時(shí)加入或退出,與Agent的特性相吻合,這里設(shè)計(jì)將部分節(jié)點(diǎn)封裝成Agent,可代表食品溯源鏈參與各方的權(quán)利利益,而且各個(gè)Agent可能有不同的目標(biāo)、知識(shí)和能力,它們之間可能是合作的,也可能是競(jìng)爭(zhēng)的,可實(shí)現(xiàn)在這樣的高動(dòng)態(tài)的開(kāi)放環(huán)境中,自主達(dá)成各自的目標(biāo)。比如,食品溯源鏈上的生產(chǎn)商、經(jīng)銷(xiāo)商、消費(fèi)者之間也存在某種合作或者競(jìng)爭(zhēng)的關(guān)系,利用區(qū)塊鏈的身份認(rèn)證機(jī)制可以賦予每一個(gè)角色相應(yīng)的權(quán)限,通過(guò)創(chuàng)建多代理系統(tǒng),讓他們之間的權(quán)責(zé)更加明晰,實(shí)現(xiàn)透明化、公平化處理。多Agent系統(tǒng)中各個(gè)Agent之間是彼此聯(lián)系,又是各自獨(dú)立的。在食品溯源鏈領(lǐng)域也是如此,各個(gè)機(jī)構(gòu)之間連接緊密,需要數(shù)據(jù)共享且真實(shí)有效,同時(shí)各機(jī)構(gòu)的分工不同,可用Agent代替完成不同的功能模塊。然后部署在區(qū)塊鏈的分布式的網(wǎng)絡(luò)中,而且基于區(qū)塊鏈共識(shí)層和智能合約層的運(yùn)行機(jī)制,也可將Agent封裝進(jìn)去,完成特定的任務(wù),實(shí)現(xiàn)更加高效、透明化、不可篡改、一致性的處理。
傳統(tǒng)的食品溯源模型具備一定的現(xiàn)代化的流程,通過(guò)溯源服務(wù)中心的運(yùn)營(yíng)規(guī)范,二維碼技術(shù)或者物聯(lián)網(wǎng)智能識(shí)別技術(shù),依托網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)建立食品溯源信息服務(wù)平臺(tái)。用戶可在其平臺(tái)上進(jìn)行食品溯源信息的查詢。
這種傳統(tǒng)的食品溯源系統(tǒng)的特點(diǎn)就是有一個(gè)中心化的數(shù)據(jù)庫(kù),食品所有的信息都存儲(chǔ)在這個(gè)數(shù)據(jù)庫(kù)中。一方面,中心化數(shù)據(jù)庫(kù)中的信息有被人為篡改的風(fēng)險(xiǎn),消費(fèi)者看到的數(shù)據(jù)信息不一定是真實(shí)的,容易出現(xiàn)信任危機(jī)。另一方面,這樣中心化的溯源平臺(tái)一旦受到網(wǎng)絡(luò)黑客的攻擊,竊取到數(shù)據(jù)庫(kù)中的敏感信息,就會(huì)導(dǎo)致客戶信息的泄露,給客戶帶來(lái)安全隱患。而區(qū)塊鏈技術(shù)的分布式的存儲(chǔ)結(jié)構(gòu)形成了去中心化的數(shù)據(jù)存儲(chǔ),解決了數(shù)據(jù)易被篡改和泄露的問(wèn)題。
傳統(tǒng)溯源系統(tǒng)的用戶審查機(jī)制存在漏洞,導(dǎo)致平臺(tái)注冊(cè)用戶泛濫、虛假交易等不公平競(jìng)爭(zhēng)行為的發(fā)生難以消除。針對(duì)此問(wèn)題,設(shè)計(jì)的基于區(qū)塊鏈的食品溯源多Agent系統(tǒng)架構(gòu),可通過(guò)共識(shí)機(jī)制追溯到每一個(gè)注冊(cè)用戶,并通過(guò)共識(shí)層的共識(shí)Agent對(duì)每一筆交易進(jìn)行共識(shí)確認(rèn),確保交易的真實(shí)性,從而可以大大減少虛假交易行為的發(fā)生。
傳統(tǒng)的溯源系統(tǒng)無(wú)法看到食品從生產(chǎn)、加工、銷(xiāo)售等每一階段的情況,中間許多過(guò)程也存在各種風(fēng)險(xiǎn)和隱患,無(wú)法保證溯本求源的真實(shí)性和有效性。而基于區(qū)塊鏈和Agent的食品溯源,每一環(huán)節(jié)的信息都會(huì)被記錄在區(qū)塊鏈中,具有權(quán)限的用戶都可以查詢食品從生產(chǎn)源頭開(kāi)始的詳細(xì)信息。Agent的加入也使這一流程更加智能化與系統(tǒng)化。
食品可追溯性是指對(duì)食品及其相關(guān)信息在食物鏈的各個(gè)環(huán)節(jié)(包括生產(chǎn)、加工、配送以及銷(xiāo)售等)進(jìn)行追溯和溯源,從而對(duì)整個(gè)食品生產(chǎn)經(jīng)營(yíng)活動(dòng)進(jìn)行有效監(jiān)控。
如圖1所示,設(shè)計(jì)了食品溯源系統(tǒng)的整體架構(gòu)模型,這里把模型劃分為四大塊,分別為:區(qū)塊聯(lián)盟鏈的環(huán)境搭建及內(nèi)部機(jī)理、各大企業(yè)的Agent運(yùn)作流程、信息記錄及訂單生成、食品溯源系統(tǒng)查詢。其中涉及到的外部參與Agent描述如下:生產(chǎn)企業(yè)Agent(PE-Agent)、流通企業(yè)Agent(CE-Agent)、銷(xiāo)售企業(yè)Agent(SE-Agent)、消費(fèi)者Agent(U-Agent)和監(jiān)管部門(mén)Agent(T-Agent)。
圖1 系統(tǒng)整體架構(gòu)模型
下面分別闡述每一部分的構(gòu)成及運(yùn)作:
(1) 區(qū)塊聯(lián)盟鏈的環(huán)境搭建:通過(guò)區(qū)塊鏈超級(jí)賬本開(kāi)發(fā)平臺(tái),構(gòu)建聯(lián)盟鏈環(huán)境,Hyperledger Fabric是Linux基金會(huì)于2015年推出的開(kāi)源項(xiàng)目,旨在推廣區(qū)塊鏈數(shù)字技術(shù)和交易驗(yàn)證[13]。借助此平臺(tái)搭建的系統(tǒng)架構(gòu)外部環(huán)境包括生產(chǎn)企業(yè)、流通企業(yè)、銷(xiāo)售企業(yè)、監(jiān)管部門(mén)和消費(fèi)者五大主體。這些主體會(huì)產(chǎn)生對(duì)應(yīng)的節(jié)點(diǎn),將他們加入同一個(gè)通道中,并通過(guò)觸發(fā)在docker沙盒環(huán)境中運(yùn)行的智能合約等模塊,實(shí)現(xiàn)各自不同的功能需求。
其中智能合約層由四部分組成,分別為權(quán)限控制合約Agent(AC-Agent)、交易操作合約Agent(TO-Agent)、數(shù)據(jù)上鏈合約Agent(DC-Agent)和狀態(tài)更新合約Agent(SU-Agent)。比如,一個(gè)用戶發(fā)起一筆交易,會(huì)觸發(fā)虛擬機(jī)中的合約執(zhí)行,首先需要權(quán)限控制合約Agent來(lái)驗(yàn)證用戶的身份,驗(yàn)證成功之后,開(kāi)啟計(jì)時(shí),來(lái)記錄交易的時(shí)間期限,接著自動(dòng)觸發(fā)交易操作合約Agent,證明這筆交易準(zhǔn)備上鏈。在扣款之前需要將這筆交易發(fā)送到共識(shí)機(jī)制中,由各共識(shí)參與者去鑒別這筆交易是否是合法的。交易以生成新的區(qū)塊的形式,被發(fā)送到共識(shí)機(jī)制中,在共識(shí)機(jī)制中想要驗(yàn)證這筆交易合法的參與者也需要首先進(jìn)行身份認(rèn)證,認(rèn)證成功之后,允許對(duì)這筆交易進(jìn)行共識(shí)驗(yàn)證,由于每個(gè)參與者達(dá)成共識(shí)所做的工作量不同,也就會(huì)有不同的信用值。各方達(dá)成共識(shí),證明這筆交易是合法的之后,根據(jù)每個(gè)共識(shí)Agent所做的工作量觸發(fā)信用管理中的增加信用Agent(A-Agent),一些用戶的惡意行為會(huì)觸發(fā)減少信用Agent(D-Agent),最終每個(gè)Agent的信用值都會(huì)記錄在信用顯示列表中。隨后,完成扣款操作,若驗(yàn)證這筆交易非法,則撤銷(xiāo)這筆交易,同時(shí)自動(dòng)返還錢(qián)款。
共識(shí)機(jī)制中設(shè)計(jì)了一些參與者共識(shí)Agent[14],包括成員服務(wù)機(jī)構(gòu)也即證書(shū)頒發(fā)機(jī)構(gòu)(MS)、認(rèn)證機(jī)構(gòu)Agent(CA-Agent)、生產(chǎn)共識(shí)Agent(P-Agent)、流通共識(shí)Agent(C-Agent)、銷(xiāo)售共識(shí)Agent(S-Agent)。這些參與者共識(shí)Agent會(huì)將交易信息記錄在區(qū)塊鏈中,一經(jīng)記錄不可篡改,只能在原來(lái)的數(shù)據(jù)存儲(chǔ)基礎(chǔ)上附加修改,這時(shí)候需要數(shù)據(jù)上鏈合約Agent發(fā)揮功能。鏈上記錄完成,會(huì)實(shí)時(shí)檢查或者更新世界狀態(tài),自動(dòng)觸發(fā)狀態(tài)更新合約Agent,將智能合約中的值和狀態(tài)與鏈上的進(jìn)行同步,實(shí)現(xiàn)數(shù)據(jù)的一致性存儲(chǔ)。
(2) 各大企業(yè)的Agent運(yùn)作流程:在這個(gè)食品供應(yīng)鏈溯源系統(tǒng)架構(gòu)設(shè)計(jì)中有五大主體,每個(gè)主體都需要完成各自不同的任務(wù)。在生產(chǎn)企業(yè)中,Agent負(fù)責(zé)食品的批量生產(chǎn)以及信息記錄,并為每一個(gè)生產(chǎn)品賦予唯一的食品溯源碼。在流通企業(yè)中,Agent保證大量食品的高效正常流轉(zhuǎn)和不積壓。在銷(xiāo)售企業(yè)中,如果食品缺貨或者少貨,Agent就可以向生產(chǎn)企業(yè)和流通企業(yè)提前批量預(yù)訂食品,及時(shí)填補(bǔ)食品缺口,保證市場(chǎng)的正常運(yùn)轉(zhuǎn),滿足消費(fèi)者的需求。各個(gè)Agent任務(wù)完成后將生成的信息通過(guò)區(qū)塊鏈接口上傳到區(qū)塊鏈網(wǎng)絡(luò)中,信息一旦生成不可篡改,通過(guò)時(shí)間戳可追溯查詢。
(3) 信息記錄及訂單生成:生產(chǎn)企業(yè)負(fù)責(zé)生產(chǎn)加工人們所需的食品,完成之后食品包裝上會(huì)有唯一的食品溯源碼,存儲(chǔ)該食品的基本信息。比如,生產(chǎn)企業(yè)需要將食品的生產(chǎn)日期、包裝日期、產(chǎn)品類(lèi)型、產(chǎn)品名稱、制造商和產(chǎn)地等信息記錄在區(qū)塊鏈中,相應(yīng)地,食品也會(huì)到達(dá)流通企業(yè)、銷(xiāo)售企業(yè)、消費(fèi)者等。每流轉(zhuǎn)一處,就需要在區(qū)塊鏈中增加相應(yīng)的流轉(zhuǎn)信息和屬性信息,且這些信息只有擁有一定權(quán)限的主體才能夠記錄或者讀取。銷(xiāo)售企業(yè)也可以發(fā)布訂單需求,生產(chǎn)企業(yè)接收訂單,此時(shí)發(fā)布者可以確認(rèn)并生成訂單。訂單指定了內(nèi)容、數(shù)量、到達(dá)時(shí)間等,用于在觸發(fā)交易操作合約時(shí)匹配比較。
(4) 食品溯源系統(tǒng)查詢:消費(fèi)者Agent在購(gòu)買(mǎi)或者使用食品之后,已經(jīng)被賦予一定的身份權(quán)限,通過(guò)此身份認(rèn)證,可登錄到食品溯源系統(tǒng),輸入食品的溯源碼,可查看食品從生產(chǎn)源頭開(kāi)始的詳細(xì)信息。被許可授權(quán)的監(jiān)管部門(mén)Agent可隨時(shí)查詢鏈上存儲(chǔ)的數(shù)據(jù)信息,方便追責(zé)。
在溯源系統(tǒng)的聯(lián)盟鏈共識(shí)機(jī)制中我們采用PBFT共識(shí)算法。實(shí)用拜占庭容錯(cuò)算法(Practical Byzantine Fault Tolerance)剛開(kāi)始是在MIT的Miguel Castro和Barbara Liskov在1999年的學(xué)術(shù)論文中提出的[15],將算法復(fù)雜度由指數(shù)級(jí)降低到多項(xiàng)式級(jí),它能夠保證在至多1/3的節(jié)點(diǎn)失效的情況下達(dá)成全網(wǎng)一致的共識(shí)。PBFT算法大致的運(yùn)行流程如下,其中系統(tǒng)中有3f+1個(gè)節(jié)點(diǎn),最多可存在f個(gè)惡意的節(jié)點(diǎn):(1) 全網(wǎng)選取一個(gè)主節(jié)點(diǎn),負(fù)責(zé)生成新區(qū)塊,其他節(jié)點(diǎn)作為副節(jié)點(diǎn);(2) 客戶端向主節(jié)點(diǎn)發(fā)送事件的服務(wù)請(qǐng)求;(3) 主節(jié)點(diǎn)將請(qǐng)求廣播給其他副節(jié)點(diǎn);(4) 所有副節(jié)點(diǎn)響應(yīng)請(qǐng)求并給客戶端發(fā)回響應(yīng)結(jié)果;(5) 客戶端確認(rèn)最終結(jié)果,結(jié)果需要滿足f+1個(gè)不同的副節(jié)點(diǎn)響應(yīng)相同的結(jié)果。通過(guò)上述過(guò)程,節(jié)點(diǎn)要求記錄的交易信息被寫(xiě)入各個(gè)記賬節(jié)點(diǎn)的區(qū)塊鏈中,形成一個(gè)分布式的不可篡改、不可偽造的一致性賬本。
PBFT的優(yōu)點(diǎn)如下:(1) 共識(shí)的時(shí)間延遲大約在2~5 s,能夠滿足實(shí)時(shí)處理的要求;(2) 共識(shí)效率高,可實(shí)現(xiàn)高頻交易量的需求;(3) 非常適合聯(lián)盟鏈的應(yīng)用場(chǎng)景,因此成為目前使用最多的聯(lián)盟鏈共識(shí)算法。
現(xiàn)有的區(qū)塊鏈的共識(shí)框架能夠滿足我們對(duì)于食品溯源鏈的要求,本文設(shè)計(jì)將多代理系統(tǒng)(MAS)加入?yún)^(qū)塊鏈共識(shí)層,可以在原有基礎(chǔ)上,創(chuàng)造出更加智能化的食品溯源系統(tǒng)架構(gòu)。在MAS中,決策、交易和一般的交互作用常常被委托給多個(gè)Agent執(zhí)行,而Agent中一個(gè)通常被區(qū)別對(duì)待的特征是“信賴”。它可以直接計(jì)算,也可以委托給專(zhuān)門(mén)的機(jī)構(gòu)。在共識(shí)層,我們主要解決的也就是信任問(wèn)題。建立可信交互的一種方法是實(shí)現(xiàn)基于信譽(yù)的機(jī)制。Agent信譽(yù)通常是根據(jù)以前的行為來(lái)計(jì)算的,它可以用來(lái)推斷未來(lái)可能發(fā)生的行為。因此,當(dāng)Agent需要獲取關(guān)鍵或者相關(guān)信息時(shí),信譽(yù)會(huì)嚴(yán)重影響決策過(guò)程。此外,仍然需要保證對(duì)它進(jìn)行適當(dāng)?shù)墓芾?例如,提供一種誠(chéng)實(shí)和可驗(yàn)證的方法來(lái)計(jì)算它,確保它的歷史值是防篡改的,并提供更新的信譽(yù)值)。
一般來(lái)說(shuō),信譽(yù)可以被認(rèn)為是一個(gè)相當(dāng)可靠的指標(biāo),是信任的基石。計(jì)算信譽(yù)這種機(jī)制也可以是對(duì)良好行為的激勵(lì)。由于信譽(yù)和信任機(jī)制一直被認(rèn)為是MAS設(shè)計(jì)的關(guān)鍵因素,考慮到MAS的這種特性,我們可以將MAS嵌入到區(qū)塊鏈的共識(shí)層中。在共識(shí)層中,每個(gè)參與者都會(huì)有自己的信譽(yù)值,擁有較好信譽(yù)的參與者有機(jī)會(huì)選擇較好的交易報(bào)價(jià),并更快地完成交易,而且每完成一筆真實(shí)的交易,都將會(huì)得到一定的信譽(yù)獎(jiǎng)勵(lì)。在我們的系統(tǒng)模型中,Agent代理在概念上可以被理解為被許可的聯(lián)盟區(qū)塊鏈上的對(duì)等點(diǎn),在真實(shí)的場(chǎng)景中,可能需要管理一些敏感的數(shù)據(jù)。由于我們?cè)O(shè)計(jì)的系統(tǒng)架構(gòu)是去中心化的,即在沒(méi)有中心控制機(jī)構(gòu)的情況下達(dá)成協(xié)議的共識(shí)。鑒于此,我們將參與共識(shí)的各節(jié)點(diǎn)用Agent代理來(lái)表示并完成交互。由區(qū)塊鏈和Agent技術(shù)的特點(diǎn)可知,Agent代理節(jié)點(diǎn)可以隨時(shí)加入或退出,在Agent代理加入的時(shí)候,需要認(rèn)證代理的信譽(yù)和權(quán)限,這時(shí)候需要一個(gè)CA認(rèn)證代理來(lái)發(fā)揮作用,即將CA認(rèn)證代理作為主節(jié)點(diǎn),其他Agent代理作為副節(jié)點(diǎn),共同組成了共識(shí)層。
如圖2所示,為我們?cè)O(shè)計(jì)的共識(shí)層系統(tǒng)的邏輯架構(gòu),包含成員服務(wù)機(jī)構(gòu)(MS)、CA認(rèn)證代理和多個(gè)參與共識(shí)的Agent組成。參與共識(shí)的Agent都有自己特定的功能,并且每一個(gè)Agent通過(guò)身份認(rèn)證后都可以連接到區(qū)塊鏈的對(duì)等網(wǎng)絡(luò)上。聯(lián)網(wǎng)的Agent都擁有各自獨(dú)立的賬本:服務(wù)賬本和交易賬本,并封裝了請(qǐng)求交易Agent(R-Agent)和處理交易Agent(H-Agent)。服務(wù)賬本上不僅存儲(chǔ)本Agent自身的信息,還存儲(chǔ)本Agent有關(guān)的服務(wù)提供信息和額外的信息,比如生產(chǎn)共識(shí)Agent只負(fù)責(zé)食品的生產(chǎn)部分,它可以提供生產(chǎn)食品的相關(guān)信息,而運(yùn)送食品之類(lèi)的操作只能交給流通共識(shí)Agent來(lái)完成,生產(chǎn)共識(shí)Agent需要運(yùn)送食品,需向流通共識(shí)Agent提交一個(gè)交易請(qǐng)求,之后達(dá)成交易共識(shí)。在服務(wù)賬本上可進(jìn)行的操作如下:1) 添加一個(gè)新的服務(wù);2) 修改一個(gè)服務(wù);3) 刪除一個(gè)服務(wù);4) 搜索相關(guān)的服務(wù)。而交易賬本上存儲(chǔ)Agent社區(qū)中發(fā)生的交易信息,以及來(lái)自服務(wù)提供者代理和請(qǐng)求服務(wù)的代理之間的相關(guān)評(píng)價(jià)信息和交易雙方自身的信息,而這個(gè)評(píng)價(jià)信息可以作為之后信譽(yù)評(píng)估的考量。這個(gè)賬本可以有效跟蹤在一段時(shí)間內(nèi)發(fā)生的交易。在交易賬本上可進(jìn)行的操作如下:1) 添加一個(gè)新的交易記錄;2) 查找交易的Agent;3) 查找某一個(gè)交易詳情;4) 計(jì)算信譽(yù)值。這些代理主要負(fù)責(zé)完成各自的功能,并在共識(shí)層的Agent社區(qū)中進(jìn)行交互。他們的主要行為有:1) 請(qǐng)求CA-Agent提供認(rèn)證證書(shū);2) 通知請(qǐng)求交易Agent執(zhí)行交易請(qǐng)求;3) 通知處理交易Agent執(zhí)行交易處理;4) 服務(wù)賬本和交易賬本的讀和寫(xiě),隨時(shí)更新;5) 發(fā)送和接收消息。
圖2 共識(shí)系統(tǒng)的邏輯架構(gòu)
如果有Agent代理想要加入共識(shí)網(wǎng)絡(luò),需要先向CA代理發(fā)送請(qǐng)求加入網(wǎng)絡(luò)的認(rèn)證,CA代理通知認(rèn)證合約Agent(G-Agent)執(zhí)行認(rèn)證請(qǐng)求,認(rèn)證通過(guò)后即可加入。Agent代理加入之后便可擁有自己的服務(wù)賬本和交易賬本,可以請(qǐng)求執(zhí)行指定的服務(wù),并需要隨時(shí)記錄網(wǎng)絡(luò)中已達(dá)成共識(shí)的交易。每個(gè)Agent代理節(jié)點(diǎn)通過(guò)發(fā)出服務(wù)請(qǐng)求和執(zhí)行請(qǐng)求的任務(wù)完成后,都會(huì)有相應(yīng)的信譽(yù)獎(jiǎng)勵(lì),并且可以累加,這就提高了每個(gè)Agent代理節(jié)點(diǎn)記賬的積極性。一旦有惡意Agent代理想要修改交易數(shù)據(jù),就會(huì)影響自身的信譽(yù)值,超過(guò)一定閾值,就會(huì)被CA認(rèn)證代理驅(qū)逐出共識(shí)網(wǎng)絡(luò),維護(hù)共識(shí)層的安全穩(wěn)定。而且這種情況并不會(huì)影響整個(gè)系統(tǒng)的正常運(yùn)行,因?yàn)橹挥腥W(wǎng)大多數(shù)Agent代理達(dá)成共識(shí)之后才能將交易記錄寫(xiě)入?yún)^(qū)塊鏈中[16],保證了系統(tǒng)的安全性。
如圖3所示,為CA代理的運(yùn)行機(jī)制,其中被許可的區(qū)塊鏈上[17]的一個(gè)重要組成部分是證書(shū)頒發(fā)機(jī)構(gòu)(MS)。MS相當(dāng)于一個(gè)管理組織,它承載一個(gè)證書(shū)頒發(fā)機(jī)構(gòu)并管理所有對(duì)等點(diǎn)的網(wǎng)絡(luò)身份,維護(hù)一個(gè)基于訪問(wèn)控制列表的網(wǎng)絡(luò)活動(dòng)控制,并確保每個(gè)事務(wù)最終都可以追溯到一個(gè)注冊(cè)用戶。可看出,在當(dāng)前的設(shè)計(jì)中,我們使用一個(gè)單一的認(rèn)證機(jī)構(gòu)。為簡(jiǎn)單起見(jiàn),我們將Agent節(jié)點(diǎn)作為區(qū)塊鏈上的對(duì)等節(jié)點(diǎn)運(yùn)行,并且依賴于一個(gè)由MS托管的公共證書(shū)頒發(fā)機(jī)構(gòu)CA代理。其中CA代理有以下三個(gè)主要的作用:1) 包含標(biāo)準(zhǔn)的Agent管理系統(tǒng)的功能;2) 是連接區(qū)塊鏈網(wǎng)絡(luò)和MAS的代理;3) 為其他代理提供了一個(gè)接口(即認(rèn)證合約Agent的功能),以便與CA交互進(jìn)行注冊(cè)和身份管理。
圖3 CA代理的運(yùn)行機(jī)制
具體的行為如下:1) 觸發(fā)認(rèn)證合約Agent的功能,轉(zhuǎn)發(fā)消息給證書(shū)頒發(fā)機(jī)構(gòu),并且給普通Agent頒發(fā)證書(shū)并完成交互。2) 認(rèn)證合約Agent任務(wù)完成后,連接到區(qū)塊鏈網(wǎng)絡(luò)中,一旦一個(gè)普通Agent表現(xiàn)出了惡意的行為或者它的信譽(yù)值降低到了特定的閾值,CA-Agent中就負(fù)責(zé)通知吊銷(xiāo)證書(shū)Agent(V-Agent)進(jìn)行吊銷(xiāo)證書(shū)操作,隨后就會(huì)在證書(shū)吊銷(xiāo)列表中查看到已經(jīng)被吊銷(xiāo)證書(shū)的Agent。3) 收回相應(yīng)Agent的讀寫(xiě)交易賬本和服務(wù)賬本的權(quán)限,也即Agent證書(shū)身份失效。而且,此Agent的交易記錄和行為會(huì)被永遠(yuǎn)記錄在區(qū)塊鏈的賬本中[18],證書(shū)吊銷(xiāo)列表中的記錄不會(huì)消失,任何擁有權(quán)限的Agent都可以查看吊銷(xiāo)列表,為之后的交易做出判斷,在一定程度上防止了虛假交易行為的發(fā)生。
綜上所述,共識(shí)層的整體運(yùn)行流程如圖4所示,通過(guò)運(yùn)用PBFT共識(shí)算法,詳細(xì)描述了各Agent之間的交互作用。
圖4 共識(shí)層的運(yùn)行機(jī)制
過(guò)程如下:
1) 一個(gè)普通Agent向CA代理發(fā)送請(qǐng)求注冊(cè)獲取認(rèn)證證書(shū)的消息,以便能夠進(jìn)入Agent社區(qū),查詢并操作賬本數(shù)據(jù)。
2) CA代理收到普通Agent發(fā)來(lái)的請(qǐng)求消息后,轉(zhuǎn)發(fā)此消息給成員服務(wù)機(jī)構(gòu)MS,也即證書(shū)頒發(fā)機(jī)構(gòu)。
3) 經(jīng)MS同意后,會(huì)授予CA代理認(rèn)證證書(shū)。并將此消息廣播給各對(duì)等Agent節(jié)點(diǎn)和主節(jié)點(diǎn)。
4) CA代理被授權(quán)后,向普通Agent頒發(fā)證書(shū)。這時(shí),普通Agent就可以發(fā)布它愿意提供的服務(wù),并且尋找它想要請(qǐng)求的服務(wù)。
5) 普通Agent請(qǐng)求一個(gè)交易,并將交易提案廣播給網(wǎng)絡(luò)上的各節(jié)點(diǎn)。各節(jié)點(diǎn)需要驗(yàn)證的內(nèi)容如下:(1) 交易提案內(nèi)容完整;(2) 在過(guò)去并沒(méi)有發(fā)生過(guò)這個(gè)交易;(3) 數(shù)字簽名是有效的;(4) Agent已獲適當(dāng)?shù)氖跈?quán),并且它的證書(shū)是有效的。
6) 網(wǎng)絡(luò)上的各對(duì)等Agent節(jié)點(diǎn)、包括生產(chǎn)共識(shí)Agent、流通共識(shí)Agent,銷(xiāo)售共識(shí)Agent,它們將交易提案輸入作為被調(diào)用的智能合約的參數(shù),然后針對(duì)當(dāng)前狀態(tài)數(shù)據(jù)庫(kù)執(zhí)行智能合約,產(chǎn)生以背書(shū)響應(yīng)形式發(fā)送的結(jié)果。
7) 普通Agent節(jié)點(diǎn)驗(yàn)證各對(duì)等Agent節(jié)點(diǎn)的簽名,并將結(jié)果反饋給主節(jié)點(diǎn),但將交易事務(wù)和連同收到的響應(yīng)結(jié)果提交給主節(jié)點(diǎn)之前,需對(duì)提交的響應(yīng)結(jié)果進(jìn)行比較,確定各對(duì)等Agent節(jié)點(diǎn)的響應(yīng)結(jié)果是否相同。如果收到超過(guò)半數(shù)以上的相同的響應(yīng)結(jié)果,則向主節(jié)點(diǎn)發(fā)送調(diào)用服務(wù)的請(qǐng)求。
8) 當(dāng)主節(jié)點(diǎn)接收到請(qǐng)求時(shí),它會(huì)按時(shí)間順序?qū)?chuàng)建的交易事務(wù)塊進(jìn)行排序,然后將這些交易事務(wù)塊告知給通道上的所有對(duì)等Agent節(jié)點(diǎn),并更新總賬。
共識(shí)層采用的PBFT共識(shí)算法具有吞吐量高,交易確認(rèn)時(shí)間短的優(yōu)點(diǎn),鏈上的各對(duì)等Agent節(jié)點(diǎn)作為副節(jié)點(diǎn)可以滿足實(shí)時(shí)處理交易的需求,利用Agent的智能化的優(yōu)勢(shì),將交易處理的時(shí)間成本降至最低,方便主節(jié)點(diǎn)快速生成區(qū)塊,可以有效提升食品溯源的效率。
對(duì)設(shè)計(jì)的系統(tǒng)進(jìn)行了流程模擬研究。包括5個(gè)參與者:生產(chǎn)共識(shí)Agent、流通共識(shí)Agent、銷(xiāo)售共識(shí)Agent、消費(fèi)者共識(shí)Agent(B-Agent)和主節(jié)點(diǎn)Agent(O-Agent),其中主節(jié)點(diǎn)Agent負(fù)責(zé)生成交易區(qū)塊。這里每個(gè)Agent都有各自的能力水平和完成特定的功能。
在注冊(cè)階段完成之后,各Agent獲得自己的身份認(rèn)證證書(shū),此時(shí)可以進(jìn)行交易操作。如圖5所示,為模擬交易時(shí)序圖。生產(chǎn)共識(shí)Agent發(fā)起一筆交易,投遞產(chǎn)品給流通共識(shí)Agent,流通共識(shí)Agent收到交易請(qǐng)求后,同意交易請(qǐng)求,則雙方簽署區(qū)塊鏈上部署的交易合約,然后主節(jié)點(diǎn)Agent負(fù)責(zé)生成交易區(qū)塊,此時(shí)要想使合約生效,即證明這筆交易存在,需要主節(jié)點(diǎn)Agent將交易區(qū)塊向全網(wǎng)廣播,各Agent節(jié)點(diǎn)收到廣播信息后,需對(duì)交易區(qū)塊信息進(jìn)行驗(yàn)證,并將驗(yàn)證結(jié)果返回給主節(jié)點(diǎn)Agent,主節(jié)點(diǎn)Agent自身也會(huì)驗(yàn)證交易信息,并統(tǒng)計(jì)收到的驗(yàn)證結(jié)果,如果大部分的結(jié)果相同,則說(shuō)明交易是真實(shí)的,然后通知各節(jié)點(diǎn)交易記錄進(jìn)區(qū)塊鏈中。此時(shí),生產(chǎn)共識(shí)Agent和流通共識(shí)Agent就達(dá)成了此筆交易。交易一旦生成,不可篡改,可永久地記錄在區(qū)塊鏈中。之后,流通共識(shí)Agent需要將食品裝箱運(yùn)送,向銷(xiāo)售共識(shí)Agent發(fā)送貨物運(yùn)送請(qǐng)求,同理,雙方達(dá)成一致,且得到各參與者的共識(shí)后,交易完成,并被記錄在區(qū)塊鏈中。消費(fèi)者共識(shí)Agent購(gòu)買(mǎi)銷(xiāo)售共識(shí)Agent出售的商品,交易付款。此時(shí),由于所有的交易信息都被記錄在區(qū)塊鏈中[19],參與各方都可以查看食品流轉(zhuǎn)的詳細(xì)信息。
圖5 交易時(shí)序圖
本文設(shè)計(jì)的采用區(qū)塊鏈技術(shù)和Agent技術(shù)構(gòu)建的食品溯源模型,解決了數(shù)據(jù)中心化存儲(chǔ)、易被篡改、信息不共享的弊端。而且MAS系統(tǒng)負(fù)責(zé)自動(dòng)化和優(yōu)化參與者之間的相互作用,提高了系統(tǒng)的運(yùn)行效率。區(qū)塊鏈?zhǔn)侨ブ行幕拇鎯?chǔ)方式,可以有效避免單點(diǎn)故障的發(fā)生。且共識(shí)層有了MAS系統(tǒng)的加入,可以更加迅速地達(dá)成共識(shí),解決了信任難題。智能合約與Agent技術(shù)的結(jié)合使用,可以使系統(tǒng)更加自動(dòng)化,減少了人為錯(cuò)誤的發(fā)生,利用合約中的不可篡改的機(jī)制,建立了基于信任的協(xié)議,也加快了系統(tǒng)內(nèi)部的信息流動(dòng)和資源共享,節(jié)約了時(shí)間和資源成本。
這里將區(qū)塊鏈和MAS的優(yōu)點(diǎn)進(jìn)行結(jié)合,解決了現(xiàn)階段的一些難題,未來(lái)我們也需要驗(yàn)證智能合約實(shí)施的正確性,制定合理的合約規(guī)范等,進(jìn)一步完善該領(lǐng)域的應(yīng)用。
本文介紹了區(qū)塊鏈的概念和技術(shù)特征,并結(jié)合Agent技術(shù)設(shè)計(jì)了食品溯源系統(tǒng)架構(gòu),詳細(xì)分析了系統(tǒng)模型的工作機(jī)理,重點(diǎn)闡述了共識(shí)層的運(yùn)行機(jī)制,最后分析了模型的特點(diǎn)。該模型不僅提高了系統(tǒng)的運(yùn)行效率,優(yōu)化參與者之間的交互作用,也提高了食品溯源系統(tǒng)的透明度,解決了數(shù)據(jù)中心化存儲(chǔ)、數(shù)據(jù)隱私易泄露、信息不共享的問(wèn)題,保證消費(fèi)者能了解到食品從生產(chǎn)到使用的詳細(xì)信息,增加了公眾對(duì)于食品安全的信任度。在此基礎(chǔ)上,利用加解密技術(shù)為系統(tǒng)提供更好的安全性和隱私性,以及制定合理的智能合約的規(guī)范是下一步需要解決的問(wèn)題。