林炯明 覃鉑強(qiáng) 王浩 莫曄 馮鑫奧
摘要:溯源系統(tǒng)一直存在查詢難度大、數(shù)據(jù)易造假等問題。區(qū)塊鏈提供了一種分布式、去中心化的計(jì)算與存儲架構(gòu),物聯(lián)網(wǎng)技術(shù)令物體間更緊密相連、信息交互更迅速,二者結(jié)合在解決問題時(shí)更具備明顯的優(yōu)勢。將介紹區(qū)塊鏈的技術(shù)與架構(gòu),基于以太坊技術(shù)設(shè)計(jì)的溯源防偽DAPP,對于實(shí)現(xiàn)步驟詳細(xì)說明。
關(guān)鍵詞:區(qū)塊鏈;以太坊;智能合約;物聯(lián)網(wǎng);溯源防偽
中圖分類號:TP319? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)16-0263-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
區(qū)塊鏈智能合約和物聯(lián)網(wǎng)技術(shù)相結(jié)合能夠?yàn)樗菰捶纻翁峁┛煽堪踩姆?wù)。智能合約是部署在區(qū)塊鏈上可執(zhí)行的代碼,可不依賴中心機(jī)構(gòu)自動化地代表各簽署執(zhí)行合約【5】。物聯(lián)網(wǎng)技術(shù)在進(jìn)行數(shù)據(jù)交互時(shí)容易出現(xiàn)信息泄露、被惡意篡改等問題,區(qū)塊鏈技術(shù)的出現(xiàn)能很好地解決這個問題,二者相結(jié)合能給信息化時(shí)代帶來革命性變化。
1 以太坊架構(gòu)組成和物聯(lián)網(wǎng)技術(shù)
1.1 以太坊整體架構(gòu)
在2013年下半年,Vitalik Buterin提出了“以太坊”的概念——一種能夠被重編程用以實(shí)現(xiàn)任意復(fù)雜計(jì)算功能的單一區(qū)塊鏈,這種新的區(qū)塊鏈包含了之前眾多區(qū)塊項(xiàng)目的大多數(shù)特征。2014年,以太坊基金會成立,Vitalik Buterin、Gavin Wood和Jeffrey Wilcke創(chuàng)建了以太坊項(xiàng)目,作為下一代區(qū)塊鏈系統(tǒng)。區(qū)塊鏈的基本數(shù)據(jù)結(jié)構(gòu)包括兩部分,即區(qū)塊內(nèi)結(jié)構(gòu)與區(qū)塊間鏈?zhǔn)浇Y(jié)構(gòu),其中每個區(qū)塊由區(qū)塊頭和區(qū)塊體兩部分組成,頭信息是區(qū)塊的元素?fù)?jù),用于驗(yàn)證區(qū)塊,并與其父區(qū)塊和子區(qū)塊建立關(guān)聯(lián)【4】。今天,以太坊作為全球最為知名的公有區(qū)塊鏈項(xiàng)目之一,同時(shí)擁有全球最大的開源社區(qū)平臺。簡單來說,以太坊是一個智能合約功能的公共區(qū)塊鏈平臺,以太坊是一個可編程的區(qū)塊鏈,形象一點(diǎn)理解,在以太坊區(qū)塊鏈上發(fā)布的不僅僅可以是轉(zhuǎn)賬金額,還可以是調(diào)用一段代碼,而這一段代碼可以由用戶自定義。因此可以想象,在以太坊區(qū)塊鏈上處理的交易邏輯不再是單一的賬單,而可能是任意的函數(shù)調(diào)用;記錄在區(qū)塊鏈賬本里的不僅僅是賬戶余額,還有函數(shù)調(diào)用后變量的新狀態(tài)。因?yàn)榇a可以任意定義,所以應(yīng)用就都可以在區(qū)塊鏈上運(yùn)行了。以太坊的整體架構(gòu)如圖1所示,分別為三層:底層服務(wù)、核心層、頂層應(yīng)用。
1.1.1 底層服務(wù)
底層服務(wù)包含P2P網(wǎng)絡(luò)服務(wù)、LevelDB數(shù)據(jù)庫、密碼學(xué)算法以及分片(Sharding)優(yōu)化等基礎(chǔ)服務(wù)。P2P網(wǎng)絡(luò)中每一個節(jié)點(diǎn)彼此對等,各個節(jié)點(diǎn)共同提供服務(wù),不存在任何特殊節(jié)點(diǎn),網(wǎng)絡(luò)中的節(jié)點(diǎn)能夠生成或?qū)徍诵聰?shù)據(jù)。而以太坊中的區(qū)塊、交易等數(shù)據(jù)最終都是被存儲在LevelDB數(shù)據(jù)庫中。密碼學(xué)算法用于保證數(shù)據(jù)的隱私性和區(qū)塊鏈的安全。分片優(yōu)化使得可以并行驗(yàn)證交易,大大加快了區(qū)塊生成速度。這些底層服務(wù)共同促使區(qū)塊鏈系統(tǒng)平穩(wěn)地運(yùn)行。
1.1.2 核心層
核心層包括區(qū)塊鏈、共識算法和以太坊虛擬機(jī)等核心元件,其以區(qū)塊鏈技術(shù)為主體,輔以以太坊特有的共識算法,并以EVM(以太坊虛擬機(jī))作為運(yùn)行智能合約的載體,該層是以太坊的核心組成部分。區(qū)塊鏈構(gòu)造的去中心化賬本需要解決的首要問題就是保證不同節(jié)點(diǎn)上的賬本數(shù)據(jù)的一致性和正確性,而共識算法正是用于解決這個問題。EVM是以太坊的一個主要創(chuàng)新,它是以太坊智能合約的運(yùn)行環(huán)境,使得以太坊能夠?qū)崿F(xiàn)更復(fù)雜的邏輯。
1.1.3 頂層應(yīng)用
這一層包括API接口、智能合約以及去中心化應(yīng)用等,以太坊的DAPP通過Web3.js與智能合約層進(jìn)行信息交換,所有的智能合約都運(yùn)行在EVM上,并會用到RPC的調(diào)用,該層是最接近用戶的一層。開發(fā)者可以根據(jù)自己的業(yè)務(wù)邏輯,實(shí)現(xiàn)自身特有的智能合約,以幫助開發(fā)者高效地執(zhí)行業(yè)務(wù)。
1.2 物聯(lián)網(wǎng)技術(shù)
物聯(lián)網(wǎng)是一個以感知技術(shù)為支撐的綜合型網(wǎng)絡(luò)系統(tǒng),旨在利用泛在網(wǎng)絡(luò)間的協(xié)同技術(shù)實(shí)現(xiàn)泛在的智慧服務(wù),所要實(shí)現(xiàn)的目標(biāo)就是構(gòu)建萬物互聯(lián)的世界【1】。物聯(lián)網(wǎng)主要分為三個層次:設(shè)備層、網(wǎng)絡(luò)層和應(yīng)用層。設(shè)備層主要為傳感器,將外界的數(shù)據(jù)信息收集,如物體識別、溫度檢測、聲波監(jiān)測等。網(wǎng)絡(luò)層即傳輸?shù)那?,簡單來講,就是通信網(wǎng)絡(luò),實(shí)現(xiàn)數(shù)據(jù)信號的接受和傳輸。應(yīng)用層需要同各個行業(yè)領(lǐng)域的需求相吻合,在運(yùn)行中,能夠促使物聯(lián)網(wǎng)智能應(yīng)用得到實(shí)踐,此時(shí)需要對媒介進(jìn)行充分的應(yīng)用【2】。而NFC是典型的物聯(lián)網(wǎng)技術(shù)之一,一種短距離的高頻無線通信技術(shù)。其采用了獨(dú)特的信號衰減技術(shù),提供了一種輕松、安全、迅速的無線通信連接方式,具有距離近、帶寬高、能耗低等特點(diǎn)。如今手機(jī)普遍內(nèi)置NFC標(biāo)簽,為以手機(jī)為介質(zhì)的溯源防偽查詢提供了極大的便利。
2 以太坊智能合約的部署與實(shí)現(xiàn)
2.1 以太坊的部署
安裝Go- ethereum以太坊客戶端,以命令行方式創(chuàng)建新的節(jié)點(diǎn)賬戶,打開命令行或power shell,運(yùn)行g(shù)eth account new創(chuàng)建新的節(jié)點(diǎn)賬戶,再運(yùn)行g(shù)eth-fast命令,即可同步以太坊公網(wǎng)數(shù)據(jù)并且完成部署。
2.2 編寫和部署智能合約
智能合約的編譯環(huán)境就是Solidity的編譯環(huán)境,而這段程序(智能合約)的執(zhí)行環(huán)境就是EVM。在以太坊中,Solidity編寫的智能合約經(jīng)過編譯后生成一串十六進(jìn)制字節(jié)碼,創(chuàng)建后進(jìn)行調(diào)用時(shí),也需要將調(diào)用函數(shù)(function)名稱和參數(shù)轉(zhuǎn)化為一串十六進(jìn)制字節(jié)碼寫進(jìn)交易中。當(dāng)用戶通過發(fā)起eth_send transaction或者eth_call創(chuàng)建或者調(diào)用智能合約時(shí),就要在交易(transaction)的data字段填入這個十六進(jìn)制碼。創(chuàng)建智能合約時(shí),EVM會將這段字節(jié)碼解析成相應(yīng)的指令符序列,存儲到一個新建的智能合約地址下。當(dāng)用戶調(diào)用這個智能合約時(shí),以太坊本身會根據(jù)交易的to字段獲取到這個智能合約的信息,EVM先根據(jù)data字段里解析的具體函數(shù)和參數(shù)生成具體的指令,再依次執(zhí)行這些指令得到執(zhí)行結(jié)果,這些操作會涉及賬戶狀態(tài)數(shù)據(jù)進(jìn)行更改。