周华 李嶒
摘 要:近年来,区块链已成为一种新兴的应用技术手段,其凭借去中心化、不可篡改、匿名性、安全可靠等特点,能够有效保障数据信息安全,这也使其在公共领域具有巨大的应用价值。本文对区块链技术进行了简要的分析,并以在线投票系统为开发对象,利用以太坊技术,探析基于区块链的投票系统的设计与实现。通过区块链技术的运用,可实现匿名、安全投票,进而在有效避免欺诈行为的同时,也能使投票结果得以公开、透明。
关键词:区块链;投票系统;系统设计;智能合约
中图分类号:TP309;TP311.13 文献标识码:A 文章编号:2095-9052(2020)07-0088-02
基金项目:2019年安徽高校自然科学研究项目“基于以太坊的身份认证系统研究与实现”阶段性成果之一(KJ2019A1172)
在现有的货币体系中,比特币是一个典型的成功案例,而比特币之所以能够取得成功,其关键在于其底层技术的区块链,这也使人们对区块链变得越来越重视。在数据库技术方案中,通过区块链可使其实现去信任化、去中心化。区块链具备集体维护、不可篡改、匿名以及安全可靠等主要特点,通过对区块链进行分类,以其参与方式来看,可将其划分成三类:第一类是联盟区块链,第二类是公开区块链,第三类是私有区块链。对于联盟区块链来说,其规则是联盟进行制定的,而且只有联盟成员能够参与到区块链中。对于公开区块链来说,能够省略用户的注册与授权环节,使用户能够随时访问该区块链。对于私有区块链而言,其往往属于私有组织的内部,通常是由私有组织自行建立的。区块链技术的出现,能够有效解决现有投票系统中存在的安全性较差问题,将其运用于投票系统的设计与实现中,这样能够使投票结果变得公开、透明的同时,还能有效防止信息篡改或欺诈行为的出现。
一、区块链的技术分析
区块链中的链式结构是区块所组成的,在各个区块中均是由其头部与区块体所组成。其中,上一区块中的哈希散列被包含在下一区块头部之中,除了哈希散列以外,还具有相应的随机数、Merkle树根节点信息和时间戳信息,其中,随机数属于挖矿机制,该随机数直接决定了节点对区块记账权的获得方式。而在区块中的区块体部分,则能够对交易数量及详情进行记录,其记录方式为Merkle方式,从而确保各笔交易之间的完整性。以应用范围来对区块链进行分析,其架构中包括1.0、2.0与3.0的区块链,数字货币采用比特币来进行表示,即1.0区块链,该区块链的密码学货币在应用领域上涉及转账、汇款等,并以虚拟货币的形式来实现,其灵活性较好,不过只能在部分场景中进行应用[1]。而2.0区块链则是在1.0区块的基础逐渐形成的,其以智能合约为其核心概念,在市场中,区块链相当于一个具备编程功能的信用基础设施,并且其应用范围足以对一个去中心化的市场进行支撑。而对于3.0区块链而言,其已经超越了以往的经济、货币及市场的一种应用形势,通过该区块链可对人力资产及物理资源进行高效分配,从而使各个行业的应用在3.0区块链的支持下得到广泛应用。在2.0区块链中,智能合约相当于计算机协议,其与程序内的ifthen语句较为类似,在达到预定条件时,能够对合约内的条款进行自动触发执行,通过智能合约的部署,可具备自我验证与执行功能,并且在此过程中不会受到人為干预的影响。在区块链技术中,以太坊属于一种图灵完备且具有开放性的平台,其通过以太坊脚本来提供丰富API,能够对编程语言进行构建与发布应用,计算机用户能通过该平台来实现对所需智能合约的编写。本文主要分析了通过以太坊技术的运用来实现对投票系统的设计。
二、基于区块链的投票系统设计与实现
在基于区块链的投票系统设计与实现中,通过Ubuntu 16.04.3 LTS系统来对相应的开发环境进行搭建,以此实现对以太坊平台的运用。
(一)Node.js
在对网络应用进行搭建时,为了使其更易于搭建,同时考虑到其响应速度与扩展性,本文采用Node.js来实现,Node.js是ChromeV8引警中的一种JavaScript运行环境,在对其进行安装时,还要对npm,即开源库进行自动安装,以实现对开源库中代码的共享和复用。在安装Node.js时,其主要包括两种安装方式,分别是通过apt命令来进行安装和通过Github来对Node.js源码进行下载编译后进行安装。本文主要是采用第二种方法来实现对Node.js的安装。
(二)以太坊平台
在以太坊技术平台中,通过运行平台中的DApp程序能够支持ETH(以太币),在以太坊平台中具有两个类型的网络,分别是TestNet测试网络与生产环境网络,其中生产网络能够在网络环境中对智能合约进行布署,所有人均可对网络环境中的智能合约进行调用,不过作为调用的代价,则需对以太币进行消耗。不过,该网络的运行速度比较慢,在测试、开发过程中不适宜采用该网络[2]。而对于TestNet测试网络来说,其主要有Rinkeby与Ropsten等,在以太坊开发中将测试网作为其专门的网络环境,在测试网络中对智能合约进行执行同样需要一定的以太币,不过,相对于生产网络来说,测试网络中所消耗的以太币是并不具备价值的,而且其和生产网络一样在运行速度上较慢,节点同步时间消耗较长。除了上述两种网络,还有一种是私有网络,该私有网络是通过以太坊客户端来进行建立的,由于私有网络中只有很少的节点,这使其有较快的运行速度,而对于用户而言,也可根据实际需求来对以太坊平台进行任意的创建和销毁,从而使智能合约在开发与测试过程中变得更加便利。
在以太坊客户端,其Geth的实现是采用Go语言来进行编写的,当然也可通过C++语言来进行编写,对于pyethereum则是采用python语言来进行编写,ethereumj则是采用java语言来进行编写。在以太坊中,更适宜采用Geth客户端,Geth客户端的应用范围也是最广的,通过Geth客户端来对私有网络进行生成,然后对以太币进行快速获取,通过dev命令能够对开发者模式进行启用,以便于对POA共识进行使用。在本地中部署以太坊私有网络,而对智能合约的执行只能通过内部节点来实现。除了上述以太坊网络的建立方法以外,还可对Ganache进行使用,其作为一种本地节点工具,能够在区块链中定制对应的智能合约,但其与Geth不同的是,其只是对以太坊环境进行本地模拟,在使用Ganache时会对10个测试账户进行自动化创建,并且这些测试账户均拥有100个以太币。Ganache的工作模式包括命令行与图形化两种,其中可采用“sudo npm installg gangache cli”命令来安装命令工具,而对于图形化工具则可进行下载安装。在开发测试过程中,Ganache的便捷性更好,因此在本文中便是采用Ganache工作模式来建立以太坊网络的。
(三)Truffle
在以太坊中,Truffle作为以太坊网络中用于对编程语言进行开发的一种框架,其包含了二进制管理、编译智能合约等功能,通过Truffle能够使DApp的部署、发布与测试变得更加方便。在对truffle进行安装完毕后,便可生成项目文件,在此过程中需要对“truffle unbox Ballot”命令进行运行,以便于对项目的目录结构进行创建。智能合约被存储于contracts文件夹内,以便于更好地部署智能合约,并对比较特殊的智能合约进行跟踪。在DApp前端页面文件中则被存储于src文件夹之中,在测试智能合约时所采用的用例则被存储于test文件夹内[3]。
(四)智能合约
在编写智能合约时,可借助于以太坊中的编程语言来实现,编程语言主要有四种,一种是Solidity,另一种是Serpent,还有两种是LLL与Mutan,在本文中对投票系统的智能合约进行编写时则是通过Solidity语言来实现的。在编写智能合约完毕后,还要确保对程序代码进行编译,以便于支持太坊真拟机的运行。在编译过程中,需要应用到“truffle compile”命令,在编译完毕后可发现一个新出现的Build文件,通过对编译后的智能合约在区块链中进行布署,便可在Ganache中看到区块链中的新增区块[4]。
(五)页面的交互性设计
用戶在对智能合约进行调用时需要应用到Web.js,对界面UI进行编写,以便于用户能够和智能合约进行交互。在以太坊中,Web3.js相当于其所提供的Javascript库,在Web3.js中能够对JSON RPCAPI进行封装,并且其所具备的Javascript对象及函数能够实现用户和区块链之间的交互,例如,对网络状态进行查看、对交译进行发送、对智能合约进行调用、对交易与区块进行查看等,尤其是以API在智能合约交互中最为关键。在src文件夹下还包含有DApp应用的前端代码。
三、基于区块链投票系统的验证
在运行以太坊平台中的DApp应用时需要对以太币进行消耗,因此其专门程序需要具备账户管理功能,以便于对以太币进行转账和存储。对于一般的浏览器而言,其自身是不具备钱包功能的,在对DApp应用进行运行时,可采用以太坊平台中的Mist这一专用浏鉴器,或是将Chrome浏鉴器中对MetaMask插件进行安装后来使用,该插件是以太坊中的钱包插件。在本文中应用第二种方法来进行账户管理,通过对npm run dev进行运行,便于用户能够通过Chrome浏览器在DApp应用上进行访问与投票,经过验证结果表明,将区块链技术应用到投票系统的设计中,能够有效确保投票结果的公正性和准确性,而且能够有效防止投票结果被篡改。
四、结语
总而言之,我国目前对区块链技术的应用尚处于初期阶段,但其技术优势却是显而易见的,将其应用到投票系统中,能够更好地保障投票结果的权威性、公正性和准确性,并且有效避免了人为因素的干预,由此也说明,区块链技术的应用潜力还有很大的挖掘空间。
参考文献:
[1]党京,孙弋.基于区块链的电子投票系统关键技术的实现[J].软件,2018,39(11):140-144.
[2]张昕伟,等.基于区块链的电子投票选举系统研究分析[J].电子技术应用,2017,43(11):132-135.
[3]马昂,等.区块链技术基础及应用研究综述[J].信息安全研究,2017,3(11):968-980.
[4]董友康,等.基于联盟区块链的董事会电子投票系统[J].网络与信息安全学报,2017,3(12):17-23.
(责任编辑:林丽华)