周華 李嶒
摘 要:近年來,區(qū)塊鏈已成為一種新興的應(yīng)用技術(shù)手段,其憑借去中心化、不可篡改、匿名性、安全可靠等特點(diǎn),能夠有效保障數(shù)據(jù)信息安全,這也使其在公共領(lǐng)域具有巨大的應(yīng)用價(jià)值。本文對區(qū)塊鏈技術(shù)進(jìn)行了簡要的分析,并以在線投票系統(tǒng)為開發(fā)對象,利用以太坊技術(shù),探析基于區(qū)塊鏈的投票系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。通過區(qū)塊鏈技術(shù)的運(yùn)用,可實(shí)現(xiàn)匿名、安全投票,進(jìn)而在有效避免欺詐行為的同時(shí),也能使投票結(jié)果得以公開、透明。
關(guān)鍵詞:區(qū)塊鏈;投票系統(tǒng);系統(tǒng)設(shè)計(jì);智能合約
中圖分類號(hào):TP309;TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-9052(2020)07-0088-02
基金項(xiàng)目:2019年安徽高校自然科學(xué)研究項(xiàng)目“基于以太坊的身份認(rèn)證系統(tǒng)研究與實(shí)現(xiàn)”階段性成果之一(KJ2019A1172)
在現(xiàn)有的貨幣體系中,比特幣是一個(gè)典型的成功案例,而比特幣之所以能夠取得成功,其關(guān)鍵在于其底層技術(shù)的區(qū)塊鏈,這也使人們對區(qū)塊鏈變得越來越重視。在數(shù)據(jù)庫技術(shù)方案中,通過區(qū)塊鏈可使其實(shí)現(xiàn)去信任化、去中心化。區(qū)塊鏈具備集體維護(hù)、不可篡改、匿名以及安全可靠等主要特點(diǎn),通過對區(qū)塊鏈進(jìn)行分類,以其參與方式來看,可將其劃分成三類:第一類是聯(lián)盟區(qū)塊鏈,第二類是公開區(qū)塊鏈,第三類是私有區(qū)塊鏈。對于聯(lián)盟區(qū)塊鏈來說,其規(guī)則是聯(lián)盟進(jìn)行制定的,而且只有聯(lián)盟成員能夠參與到區(qū)塊鏈中。對于公開區(qū)塊鏈來說,能夠省略用戶的注冊與授權(quán)環(huán)節(jié),使用戶能夠隨時(shí)訪問該區(qū)塊鏈。對于私有區(qū)塊鏈而言,其往往屬于私有組織的內(nèi)部,通常是由私有組織自行建立的。區(qū)塊鏈技術(shù)的出現(xiàn),能夠有效解決現(xiàn)有投票系統(tǒng)中存在的安全性較差問題,將其運(yùn)用于投票系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)中,這樣能夠使投票結(jié)果變得公開、透明的同時(shí),還能有效防止信息篡改或欺詐行為的出現(xiàn)。
一、區(qū)塊鏈的技術(shù)分析
區(qū)塊鏈中的鏈?zhǔn)浇Y(jié)構(gòu)是區(qū)塊所組成的,在各個(gè)區(qū)塊中均是由其頭部與區(qū)塊體所組成。其中,上一區(qū)塊中的哈希散列被包含在下一區(qū)塊頭部之中,除了哈希散列以外,還具有相應(yīng)的隨機(jī)數(shù)、Merkle樹根節(jié)點(diǎn)信息和時(shí)間戳信息,其中,隨機(jī)數(shù)屬于挖礦機(jī)制,該隨機(jī)數(shù)直接決定了節(jié)點(diǎn)對區(qū)塊記賬權(quán)的獲得方式。而在區(qū)塊中的區(qū)塊體部分,則能夠?qū)灰讛?shù)量及詳情進(jìn)行記錄,其記錄方式為Merkle方式,從而確保各筆交易之間的完整性。以應(yīng)用范圍來對區(qū)塊鏈進(jìn)行分析,其架構(gòu)中包括1.0、2.0與3.0的區(qū)塊鏈,數(shù)字貨幣采用比特幣來進(jìn)行表示,即1.0區(qū)塊鏈,該區(qū)塊鏈的密碼學(xué)貨幣在應(yīng)用領(lǐng)域上涉及轉(zhuǎn)賬、匯款等,并以虛擬貨幣的形式來實(shí)現(xiàn),其靈活性較好,不過只能在部分場景中進(jìn)行應(yīng)用[1]。而2.0區(qū)塊鏈則是在1.0區(qū)塊的基礎(chǔ)逐漸形成的,其以智能合約為其核心概念,在市場中,區(qū)塊鏈相當(dāng)于一個(gè)具備編程功能的信用基礎(chǔ)設(shè)施,并且其應(yīng)用范圍足以對一個(gè)去中心化的市場進(jìn)行支撐。而對于3.0區(qū)塊鏈而言,其已經(jīng)超越了以往的經(jīng)濟(jì)、貨幣及市場的一種應(yīng)用形勢,通過該區(qū)塊鏈可對人力資產(chǎn)及物理資源進(jìn)行高效分配,從而使各個(gè)行業(yè)的應(yīng)用在3.0區(qū)塊鏈的支持下得到廣泛應(yīng)用。在2.0區(qū)塊鏈中,智能合約相當(dāng)于計(jì)算機(jī)協(xié)議,其與程序內(nèi)的ifthen語句較為類似,在達(dá)到預(yù)定條件時(shí),能夠?qū)霞s內(nèi)的條款進(jìn)行自動(dòng)觸發(fā)執(zhí)行,通過智能合約的部署,可具備自我驗(yàn)證與執(zhí)行功能,并且在此過程中不會(huì)受到人為干預(yù)的影響。在區(qū)塊鏈技術(shù)中,以太坊屬于一種圖靈完備且具有開放性的平臺(tái),其通過以太坊腳本來提供豐富API,能夠?qū)幊陶Z言進(jìn)行構(gòu)建與發(fā)布應(yīng)用,計(jì)算機(jī)用戶能通過該平臺(tái)來實(shí)現(xiàn)對所需智能合約的編寫。本文主要分析了通過以太坊技術(shù)的運(yùn)用來實(shí)現(xiàn)對投票系統(tǒng)的設(shè)計(jì)。
二、基于區(qū)塊鏈的投票系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
在基于區(qū)塊鏈的投票系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)中,通過Ubuntu 16.04.3 LTS系統(tǒng)來對相應(yīng)的開發(fā)環(huán)境進(jìn)行搭建,以此實(shí)現(xiàn)對以太坊平臺(tái)的運(yùn)用。
(一)Node.js
在對網(wǎng)絡(luò)應(yīng)用進(jìn)行搭建時(shí),為了使其更易于搭建,同時(shí)考慮到其響應(yīng)速度與擴(kuò)展性,本文采用Node.js來實(shí)現(xiàn),Node.js是ChromeV8引警中的一種JavaScript運(yùn)行環(huán)境,在對其進(jìn)行安裝時(shí),還要對npm,即開源庫進(jìn)行自動(dòng)安裝,以實(shí)現(xiàn)對開源庫中代碼的共享和復(fù)用。在安裝Node.js時(shí),其主要包括兩種安裝方式,分別是通過apt命令來進(jìn)行安裝和通過Github來對Node.js源碼進(jìn)行下載編譯后進(jìn)行安裝。本文主要是采用第二種方法來實(shí)現(xiàn)對Node.js的安裝。
(二)以太坊平臺(tái)
在以太坊技術(shù)平臺(tái)中,通過運(yùn)行平臺(tái)中的DApp程序能夠支持ETH(以太幣),在以太坊平臺(tái)中具有兩個(gè)類型的網(wǎng)絡(luò),分別是TestNet測試網(wǎng)絡(luò)與生產(chǎn)環(huán)境網(wǎng)絡(luò),其中生產(chǎn)網(wǎng)絡(luò)能夠在網(wǎng)絡(luò)環(huán)境中對智能合約進(jìn)行布署,所有人均可對網(wǎng)絡(luò)環(huán)境中的智能合約進(jìn)行調(diào)用,不過作為調(diào)用的代價(jià),則需對以太幣進(jìn)行消耗。不過,該網(wǎng)絡(luò)的運(yùn)行速度比較慢,在測試、開發(fā)過程中不適宜采用該網(wǎng)絡(luò)[2]。而對于TestNet測試網(wǎng)絡(luò)來說,其主要有Rinkeby與Ropsten等,在以太坊開發(fā)中將測試網(wǎng)作為其專門的網(wǎng)絡(luò)環(huán)境,在測試網(wǎng)絡(luò)中對智能合約進(jìn)行執(zhí)行同樣需要一定的以太幣,不過,相對于生產(chǎn)網(wǎng)絡(luò)來說,測試網(wǎng)絡(luò)中所消耗的以太幣是并不具備價(jià)值的,而且其和生產(chǎn)網(wǎng)絡(luò)一樣在運(yùn)行速度上較慢,節(jié)點(diǎn)同步時(shí)間消耗較長。除了上述兩種網(wǎng)絡(luò),還有一種是私有網(wǎng)絡(luò),該私有網(wǎng)絡(luò)是通過以太坊客戶端來進(jìn)行建立的,由于私有網(wǎng)絡(luò)中只有很少的節(jié)點(diǎn),這使其有較快的運(yùn)行速度,而對于用戶而言,也可根據(jù)實(shí)際需求來對以太坊平臺(tái)進(jìn)行任意的創(chuàng)建和銷毀,從而使智能合約在開發(fā)與測試過程中變得更加便利。
在以太坊客戶端,其Geth的實(shí)現(xiàn)是采用Go語言來進(jìn)行編寫的,當(dāng)然也可通過C++語言來進(jìn)行編寫,對于pyethereum則是采用python語言來進(jìn)行編寫,ethereumj則是采用java語言來進(jìn)行編寫。在以太坊中,更適宜采用Geth客戶端,Geth客戶端的應(yīng)用范圍也是最廣的,通過Geth客戶端來對私有網(wǎng)絡(luò)進(jìn)行生成,然后對以太幣進(jìn)行快速獲取,通過dev命令能夠?qū)﹂_發(fā)者模式進(jìn)行啟用,以便于對POA共識(shí)進(jìn)行使用。在本地中部署以太坊私有網(wǎng)絡(luò),而對智能合約的執(zhí)行只能通過內(nèi)部節(jié)點(diǎn)來實(shí)現(xiàn)。除了上述以太坊網(wǎng)絡(luò)的建立方法以外,還可對Ganache進(jìn)行使用,其作為一種本地節(jié)點(diǎn)工具,能夠在區(qū)塊鏈中定制對應(yīng)的智能合約,但其與Geth不同的是,其只是對以太坊環(huán)境進(jìn)行本地模擬,在使用Ganache時(shí)會(huì)對10個(gè)測試賬戶進(jìn)行自動(dòng)化創(chuàng)建,并且這些測試賬戶均擁有100個(gè)以太幣。Ganache的工作模式包括命令行與圖形化兩種,其中可采用“sudo npm installg gangache cli”命令來安裝命令工具,而對于圖形化工具則可進(jìn)行下載安裝。在開發(fā)測試過程中,Ganache的便捷性更好,因此在本文中便是采用Ganache工作模式來建立以太坊網(wǎng)絡(luò)的。
(三)Truffle
在以太坊中,Truffle作為以太坊網(wǎng)絡(luò)中用于對編程語言進(jìn)行開發(fā)的一種框架,其包含了二進(jìn)制管理、編譯智能合約等功能,通過Truffle能夠使DApp的部署、發(fā)布與測試變得更加方便。在對truffle進(jìn)行安裝完畢后,便可生成項(xiàng)目文件,在此過程中需要對“truffle unbox Ballot”命令進(jìn)行運(yùn)行,以便于對項(xiàng)目的目錄結(jié)構(gòu)進(jìn)行創(chuàng)建。智能合約被存儲(chǔ)于contracts文件夾內(nèi),以便于更好地部署智能合約,并對比較特殊的智能合約進(jìn)行跟蹤。在DApp前端頁面文件中則被存儲(chǔ)于src文件夾之中,在測試智能合約時(shí)所采用的用例則被存儲(chǔ)于test文件夾內(nèi)[3]。
(四)智能合約
在編寫智能合約時(shí),可借助于以太坊中的編程語言來實(shí)現(xiàn),編程語言主要有四種,一種是Solidity,另一種是Serpent,還有兩種是LLL與Mutan,在本文中對投票系統(tǒng)的智能合約進(jìn)行編寫時(shí)則是通過Solidity語言來實(shí)現(xiàn)的。在編寫智能合約完畢后,還要確保對程序代碼進(jìn)行編譯,以便于支持太坊真擬機(jī)的運(yùn)行。在編譯過程中,需要應(yīng)用到“truffle compile”命令,在編譯完畢后可發(fā)現(xiàn)一個(gè)新出現(xiàn)的Build文件,通過對編譯后的智能合約在區(qū)塊鏈中進(jìn)行布署,便可在Ganache中看到區(qū)塊鏈中的新增區(qū)塊[4]。
(五)頁面的交互性設(shè)計(jì)
用戶在對智能合約進(jìn)行調(diào)用時(shí)需要應(yīng)用到Web.js,對界面UI進(jìn)行編寫,以便于用戶能夠和智能合約進(jìn)行交互。在以太坊中,Web3.js相當(dāng)于其所提供的Javascript庫,在Web3.js中能夠?qū)SON RPCAPI進(jìn)行封裝,并且其所具備的Javascript對象及函數(shù)能夠?qū)崿F(xiàn)用戶和區(qū)塊鏈之間的交互,例如,對網(wǎng)絡(luò)狀態(tài)進(jìn)行查看、對交譯進(jìn)行發(fā)送、對智能合約進(jìn)行調(diào)用、對交易與區(qū)塊進(jìn)行查看等,尤其是以API在智能合約交互中最為關(guān)鍵。在src文件夾下還包含有DApp應(yīng)用的前端代碼。
三、基于區(qū)塊鏈投票系統(tǒng)的驗(yàn)證
在運(yùn)行以太坊平臺(tái)中的DApp應(yīng)用時(shí)需要對以太幣進(jìn)行消耗,因此其專門程序需要具備賬戶管理功能,以便于對以太幣進(jìn)行轉(zhuǎn)賬和存儲(chǔ)。對于一般的瀏覽器而言,其自身是不具備錢包功能的,在對DApp應(yīng)用進(jìn)行運(yùn)行時(shí),可采用以太坊平臺(tái)中的Mist這一專用瀏鑒器,或是將Chrome瀏鑒器中對MetaMask插件進(jìn)行安裝后來使用,該插件是以太坊中的錢包插件。在本文中應(yīng)用第二種方法來進(jìn)行賬戶管理,通過對npm run dev進(jìn)行運(yùn)行,便于用戶能夠通過Chrome瀏覽器在DApp應(yīng)用上進(jìn)行訪問與投票,經(jīng)過驗(yàn)證結(jié)果表明,將區(qū)塊鏈技術(shù)應(yīng)用到投票系統(tǒng)的設(shè)計(jì)中,能夠有效確保投票結(jié)果的公正性和準(zhǔn)確性,而且能夠有效防止投票結(jié)果被篡改。
四、結(jié)語
總而言之,我國目前對區(qū)塊鏈技術(shù)的應(yīng)用尚處于初期階段,但其技術(shù)優(yōu)勢卻是顯而易見的,將其應(yīng)用到投票系統(tǒng)中,能夠更好地保障投票結(jié)果的權(quán)威性、公正性和準(zhǔn)確性,并且有效避免了人為因素的干預(yù),由此也說明,區(qū)塊鏈技術(shù)的應(yīng)用潛力還有很大的挖掘空間。
參考文獻(xiàn):
[1]黨京,孫弋.基于區(qū)塊鏈的電子投票系統(tǒng)關(guān)鍵技術(shù)的實(shí)現(xiàn)[J].軟件,2018,39(11):140-144.
[2]張昕偉,等.基于區(qū)塊鏈的電子投票選舉系統(tǒng)研究分析[J].電子技術(shù)應(yīng)用,2017,43(11):132-135.
[3]馬昂,等.區(qū)塊鏈技術(shù)基礎(chǔ)及應(yīng)用研究綜述[J].信息安全研究,2017,3(11):968-980.
[4]董友康,等.基于聯(lián)盟區(qū)塊鏈的董事會(huì)電子投票系統(tǒng)[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2017,3(12):17-23.
(責(zé)任編輯:林麗華)