蘇晨 陳梅 趙靜雅 高震宇
摘要:在大規(guī)模物聯(lián)網(wǎng)設備接入的環(huán)境下,當前的C/S物聯(lián)網(wǎng)架構(gòu)存在可靠性、安全性、隱私性等方面的問題。區(qū)塊鏈技術(shù)作為一種新興的分布式賬本技術(shù),具有安全、可靠、匿名等特點,適用于物聯(lián)網(wǎng)。文章提出了一種基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng),該系統(tǒng)選擇Ethereum作為區(qū)塊鏈平臺,通過智能合約配置和控制物聯(lián)網(wǎng)設備,并使用RSA公鑰密碼系統(tǒng)管理密鑰。
關(guān)鍵詞:區(qū)塊鏈;智能物聯(lián)網(wǎng);智能合約;網(wǎng)絡信息安全
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)14-0028-03
1引言
隨著信息社會的發(fā)展,物聯(lián)網(wǎng)(也稱為“互聯(lián)設備集合網(wǎng)絡”)也在快速發(fā)展,物聯(lián)網(wǎng)設備數(shù)據(jù)在未來幾年內(nèi)也將出現(xiàn)爆發(fā)式增長,這些數(shù)據(jù)增長大多來自消費者設備,意味著物聯(lián)網(wǎng)數(shù)據(jù)需要更高的安全性及可靠性為其保駕護航,當前的物聯(lián)網(wǎng)最突出的幾個問題就是過于中心化及不能自制,使各個物聯(lián)網(wǎng)上的設備不能充分發(fā)揮其自主能動性,還有一個突出的問題是安全性,如果到了智能互聯(lián)的時代出現(xiàn)安全問題,將會造成巨大的災難。而區(qū)塊鏈的高安全性、高可靠性、匿名性正適合物聯(lián)網(wǎng)將來成長的需求。區(qū)塊鏈的新興觀點逐漸進入人們的視線。顧名思義,區(qū)塊鏈就是一個智能的點對點網(wǎng)絡,用于在分布式數(shù)據(jù)庫中識別、分播和記錄信息。
區(qū)塊鏈的主要應用是比特幣。隨著比特幣的盛行,許多其他類似數(shù)字貨幣也隨之出現(xiàn),然而這些貨幣也是建立在區(qū)塊鏈技術(shù)之上的。此刻已不只是數(shù)字錢幣范疇獨有區(qū)塊鏈了,很多其他的范疇也在引入?yún)^(qū)塊鏈。雖然比特幣技術(shù)十分成功,但它其中的局限性也十分明顯,比如區(qū)塊產(chǎn)生時間大概為10分鐘,這將會極大限制單位時間內(nèi)交易完成數(shù)量。也就是說,當要追蹤需要驗證的未生成交易,并且提供腳本信息時,這不能夠使用循環(huán),將會使未生成交易的生成時間變長。因此12秒的生成時間對于以太坊開發(fā)者運行智能合約是非常必要的。換言之,開發(fā)者可以在一個以太坊框架之上對區(qū)塊鏈應用進行開發(fā),開發(fā)者和使用者可以假想它沒有許可證不能被修改,甚至可以說整個交易在以太坊平臺上都是透明的,本文可以認為以太坊是一個巨大的分享式計算機系統(tǒng)。
同時,隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,數(shù)量龐大、種類繁多、分布廣泛的物聯(lián)網(wǎng)設備不斷連接到物聯(lián)網(wǎng)絡。目前大規(guī)模、多種類、廣分布的物聯(lián)網(wǎng)設備的同步和更新對現(xiàn)有的基于服務器-物聯(lián)網(wǎng)的物聯(lián)網(wǎng)設備,將提出更高的性能方面要求。同時,如果物聯(lián)網(wǎng)中心服務器受到攻擊,那么所有依賴于其服務的物聯(lián)網(wǎng)設備也將會受到安全威脅。所以,基于服務器-客戶端的物聯(lián)網(wǎng)系統(tǒng)已不再能滿足日益壯大的物聯(lián)網(wǎng)網(wǎng)絡。本文提出了一種基于區(qū)塊鏈的智能物聯(lián)網(wǎng)系統(tǒng),構(gòu)建了一個安全可信的分布式物聯(lián)網(wǎng)網(wǎng)絡。
區(qū)塊鏈作為比特幣的核心技術(shù)也引起了人們的廣泛關(guān)注,雖然區(qū)塊鏈技術(shù)起源于比特幣,但其應用場景并不局限于區(qū)塊鏈。還很多場景應用,比如金融領(lǐng)域、物聯(lián)網(wǎng)領(lǐng)域、社會科學領(lǐng)域等。以太坊平臺的出現(xiàn)使區(qū)塊鏈技術(shù)得到空前發(fā)展,作為區(qū)塊鏈技術(shù)2.0的代表,以太坊支持用戶拓展開發(fā)其他應用。所以把區(qū)塊鏈的相關(guān)技術(shù)引用到物聯(lián)網(wǎng)體系中去,把RSA公鑰系統(tǒng)引進密碼系統(tǒng),公鑰存在于以太坊網(wǎng)上,私鑰存在于各個設備之中。通過智能合約,可以重設當前設備的許多參數(shù),并將修改記錄保存在以太坊鏈上,以便后續(xù)查詢。為了證明這一設想的可行性,構(gòu)建出一些賬戶節(jié)點,每一個賬戶代表一個設備。依此,希望后續(xù)可以搭建一個完整的智能物聯(lián)網(wǎng)系統(tǒng),連接更多可用設備。
2系統(tǒng)搭建
本設計要完成的目標是在Linux平臺搭建私有鏈,創(chuàng)建私有網(wǎng)絡,建立集點結(jié)群,安裝truffle框架,安裝remix本地編譯器,利用本地編譯器編譯調(diào)試智能合約,安裝geth客戶端,利用geth客戶端完成簡單合約的編譯、部署、調(diào)用,再使用Etherum-wallet客戶端完成整個合約的編譯、部署、調(diào)用,并得出仿真結(jié)果。
2.1 Geth客戶端的原理及特性
Geth是以太坊的官方客戶端,它是Go-Ethereum開源項目的簡稱,是一個簡略的命令行工具,在此提供了許多的選項和命令。它主要是使用Go語言進行編寫的,是目前用戶數(shù)最多、使用最廣泛的客戶端。應用Geth,需先啟動以太坊節(jié)點,建立新用戶、新賬戶,在主賬戶下可以建立副賬戶、建立節(jié)點集群、成功搭建私有鏈網(wǎng)絡,并啟動私有鏈網(wǎng)絡進行挖礦,獲得以太幣。
2.2 節(jié)點集群的搭建及網(wǎng)絡測試
如上所述,現(xiàn)已知的搭建以太坊私有鏈網(wǎng)絡的方法目前主要是運用Geth客戶端進行搭建,在安裝Geth客戶端前需要安裝Go環(huán)境,安裝Ethereum,安裝Solc編譯器,安裝命令行如下所示:
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository –y ppa:ethereum/ethereum
sudo add-apt-repository –y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
執(zhí)行完以上命令后,可以啟動以太坊客戶端,此中主要有g(shù)eth、evm、bootnode、disasm、ethtest、rlpdump,輸入geth,則以太坊就可以啟動了。
但在搭建以太坊私鏈節(jié)點前,必須先建立創(chuàng)世區(qū)塊,之所以要先建立創(chuàng)世區(qū)塊,是因為只要在同一個網(wǎng)絡內(nèi),創(chuàng)世區(qū)塊文件一定是相同的,且創(chuàng)世區(qū)塊的json文件,文件內(nèi)容如圖1所示,具體參數(shù)的意義可見表1所示。
接下來,用geth命令創(chuàng)建創(chuàng)世區(qū)塊,命令行輸入如下:253BDD9C-134C-42E8-A3C6-BDB324C66E0A
由圖2可以看出創(chuàng)世區(qū)塊的文件內(nèi)容已被寫入data0文件夾中,數(shù)據(jù)存儲路徑為/usr/local/privatechain/data0/geth/chaindata。
由圖3和表2可知私鏈數(shù)據(jù)存在data0中,網(wǎng)絡監(jiān)聽端口為61910(默認為30303),HTTP-RPC服務器監(jiān)聽端口為8200(默認為8545),設置所需調(diào)用HTTP-RPC接口,在默認基礎上加了db,其次還設置了當前區(qū)塊鏈的網(wǎng)絡ID為1108。
由啟動頁的最后一行可知geth包括了一些方法,此中admin主要包括與管理節(jié)點有關(guān)的方法,eth包括和操作區(qū)塊鏈有關(guān)方法,miner包括挖礦啟動&終止方法,net包括檢查P2P網(wǎng)絡狀況方法,personal包括管理賬戶方法,txpool包括檢查交易內(nèi)存池的方法,web3包括以上且還包含單位換算方法。
命令eth.accounts可以檢查當前存在賬戶及賬戶地址,personal.newAccount()可新增賬戶,增加賬戶的時可設置賬戶密碼,eth.getBalance(eth.accounts[0])可查看eth.accounts[0]內(nèi)的賬戶余額,為之后查看賬戶及余額方便,還可自己添加查看方法,這里添加了function checkAllBalances(),具體函數(shù)如圖4,還可通過命令eth.coinbase查看主賬戶,也可通過miner.setEtherbase(eth.accounts[1])重新設置主賬戶為eth.accounts[1],通過命令web3.fromWei(eth.getBalance(eth.accounts[0]),ether)可將賬戶余額的單位換成ether,通過命令eth.blockNumber可獲取當前區(qū)塊數(shù)。
實施節(jié)點內(nèi)轉(zhuǎn)賬需要提前解鎖賬戶,解鎖賬戶后,可通過命令eth.sendTransaction({from: eth.accounts[0],to: eth.accounts[2],value: amount}),其中 amount= web3. toWei(5,ether),也就是轉(zhuǎn)賬5ether,通過txpool. status可以查看當前待處理交易,由圖5可知當前可驗證交易為一條,需要主賬戶啟動挖礦使得交易生效,挖礦命令為miner. start(1),若想要結(jié)束使用miner. stop(),當前需要驗證交易,故設置為挖到一個區(qū)塊則停止,命令為:miner.start(1); admin.sleepBlocks(1); miner.stop(),其結(jié)果如圖5所示,通過查看eth. accounts[2]的余額可知交易生效,您還可以通過查看其事務哈希值獲取事務詳細信息,命令為:eth.getTransaction(交易區(qū)塊哈希),也可通過交易區(qū)塊號查看交易詳情,命令為:eth.getBlock(區(qū)塊號)。
網(wǎng)絡監(jiān)聽端口需要改變,HTTP-RPC服務器監(jiān)聽端口需要改變,網(wǎng)絡ID不能變(如果想連接節(jié)點一)。
可通過admin.addPeer(節(jié)點哈希)在節(jié)點一的console命令下添加節(jié)點,節(jié)點哈??蓮墓?jié)點二中獲得,也可在節(jié)點二下輸入命令admin.node.info獲得,添加節(jié)點成功后可通過admin.peers查看節(jié)點連接具體信息。同時還可通過輸入net.peerCount得到節(jié)點數(shù)。以同樣方法添加節(jié)點三,如圖6。再次輸入admin.peers可看到三節(jié)點連接信息。
3智能合約在鏈上的編譯、部署、調(diào)用
3.1智能合約的編譯
Geth中也可完成智能合約的編譯,但因Geth是命令行編譯,許多操作包括邊編譯、邊改錯的操作無法同時進行,非常不方便,因此以太坊的官網(wǎng)推薦使用remix編譯器,當然也可以選擇其他編譯器,這里主要推薦官方編譯器,為方便在鏈上直接進行編譯,本文下載安裝了本地編譯器,優(yōu)點是本地編譯器在網(wǎng)絡不穩(wěn)定情況下,也不會出現(xiàn)大問題,且許多存儲修改結(jié)果都可在本地找到。命令行打開本地remix,右選compile,勾選auto在編寫的時也會自動編譯,編譯結(jié)果在右下顯示,錯誤和警示都有。environment可以選擇web3,輸入http://localost:8200可以連接本地私有鏈,這里的RPC接口與之前設置私鏈節(jié)點的接口一樣,也可連接模擬私鏈環(huán)境進行測試,接口為8545,因此可以輸入http://localhost:8545。這里的模擬私網(wǎng)有賬號10個,還有相應的密鑰,可以部署相應的合約在其進行測試。
3.2智能合約的部署
當智能合約編譯不出錯的情況下,還需將智能合約部署在所搭建的私有鏈上,在這里選擇官方推薦的ethereum-wallet,在使用ethereum-wallet時,需要配置附屬環(huán)境,打開Meteor,使App運行在3000接口上。通過命令行打開Ethereum-wallet,在etherum-wallet上的所有操作信息都會顯示在下面,可按出錯提示尋找解決辦法。
編譯無錯的合約放在左下框中,選擇部署主賬戶,保證該賬戶中有足夠的以太幣部署合約(因部署合約會消耗以太幣),接下來在右下選擇部署合約的主函數(shù),填入需預設的構(gòu)造參數(shù),接下來點擊部署,若要使得部署合約生效,需要再次進行挖礦,合約部署成功后可進行合約調(diào)用,結(jié)果如圖7所示。
合約部署成功后,可在首頁查看部署消息,對合約的操作記錄都會存在鏈上,部署合約記錄。同時點擊首頁的contract,可看到曾部署過的所有合約,同樣也可查看合約Token。
3.3智能合約的調(diào)用
在成功部署合約后,開始進行合約的調(diào)用,本合約模擬家居用電情況監(jiān)測,每一個賬戶代表一件家電,監(jiān)測家電使用情況,家電把用電量通過P2P的形式傳到以太坊網(wǎng)中,合約收到所有家電的用電量情況。253BDD9C-134C-42E8-A3C6-BDB324C66E0A
若要查看各個賬戶發(fā)送情況,可看到各賬戶左上角有合約調(diào)用記錄。若要細看,只需點開各個賬戶查看。
打開合約調(diào)用界面,在沒收到兩賬戶的電量使用情況下,沒調(diào)用Check Target Reached方法前,目標完成情況是NO。
調(diào)用Check Target Reached方法,結(jié)束調(diào)用后,查看目標完成情況,變?yōu)閅ES,此時只需把這一結(jié)果輸出到電器中做觸發(fā)電平,啟動節(jié)能模式,即可使電器轉(zhuǎn)換為節(jié)能模式。
4結(jié)語
本文主要介紹了如何搭建以太坊私鏈網(wǎng)以及搭建原理,并在此基礎上在私鏈上部署所需的智能合約。除此之外,還講述了智能合約怎樣編譯,智能合約怎樣部署在以太網(wǎng)私鏈上,在智能合約成功部署后,講解了智能合約的調(diào)用,成功完成了實驗的仿真,實現(xiàn)了對家電的用電量的監(jiān)測,當其用電量達到一定值時,各電器轉(zhuǎn)而變成節(jié)能模式。
參考文獻:
[1] Xu L D,He W,Li S C.Internet of Things in industries:a survey[J].IEEE Transactions on Industrial Informatics,2014,10(4):2233-2243.
[2] Al-Fuqaha A,Guizani M,Mohammadi M,et al.Internet of Things:a survey on enabling technologies,protocols,and applications[J].IEEE Communications Surveys & Tutorials,2015,17(4):2347-2376.
[3] Singh J,Pasquier T,Bacon J,et al.Twenty security considerations for cloud-supported Internet of Things[J].IEEE Internet of Things Journal,2016,3(3):269-284.
[4] Ferrer E C.The Blockchain:a New Framework for Robotic Swarm Systems[EB/OL].(2016-08-02).[2021-11-20].https://xueshu.baidu.com/usercenter/paper/show?paperid=1w0c0rt093 690840t72n0ej0ex033896.
[5] Sharples M,Domingue J.The blockchain and kudos:a distributed system for educational record,reputation and reward[C]//Adaptive and Adaptable Learning,2016.
收稿日期:2021-12-30
基金項目:北京電子科技職業(yè)學院科技一般項目(基金號:2021Z031-KXY)
作者簡介:蘇晨(1973—),女,山東萊蕪人,講師,碩士,主要研究方向為網(wǎng)絡技術(shù)、計算機應用、視頻圖像處理等。253BDD9C-134C-42E8-A3C6-BDB324C66E0A