林炯明 覃鉑強 王浩 莫曄 馮鑫奧



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