更全的杂志信息网

基于区块链的投票系统的设计与实现

更新时间:2016-07-05

0 引言

随着比特币等数字货币的成功,其底层技术区块链引起了人们的重视,区块链技术是一种去中心化、去信任化的分布式数据库技术方案[1-2],它还具有安全可靠、不可篡改、集体维护、匿名等特点。按照参与方式分类区块链可以分为公开区块链、联盟区块链和私有区块链,其中公开链又被称为非许可链,用户无需注册,无需授权就可进行访问,如比特币、以太坊等;联盟链又被称为许可链,限于联盟内部成员的参与,由联盟制定规则,如银行联盟链R3;私有链限于在私有组织内部使用,如企业内部区块链。

在公共投票领域虽然已经有网络电子投票系统的存在,但现有的电子投票系统都是基于中心的,而且容易受到网络攻击,存在篡改等各种风险,区块链的出现无疑为新的电子投票系统的出现提供了基础,基于区块链的投票系统可以排除人为操纵的可能,其去中心化、分布式的网络结构适用于投票选举系统,投票中心不需要专门维护和管理整理投票系统和网络,保证了网络的透明性,也防止了恶意投票或篡改欺诈、欺骗选票的作弊行为[3],其匿名性特点可以隐藏投票者个人信息,保护个人隐私。投票者还可以对自己的投票情况进行验证、追踪。已经有些创业公司及政府在进行尝试如Follow My Vote,Blockchain Voting Machine等。

1 区块链技术

区块链的结构如图1所示[4],由区块构成的链式结构,区块分为区块头部和区块体2部分,每个当前区块的头部都包含有上一个区块的哈希散列及用于实现挖矿机制(区块链中决定哪个节点获得一个区块记账权的方式)的随机数,以及时间戳,Merkle树根节点等信息。区块体中记录了交易的数量和详情,采用Merkle树的方式进行记录,以保证每笔交易的完整性及确定性。

图1 区块链的链接

按照区块链的应用范围和发展划分,区块链架构可以分为区块链1.0、区块链2.0、区块链3.0。区块链1.0是以比特币为代表的数字货币应用,是与转账、汇款和数字化支付相关的密码学货币应用,主要围绕支持虚拟货币的实现,虽然有一定的灵活性但是在其他场景的应用显得非常局限。随着人们对区块链技术的重视,区块链2.0随之出现,它主要是智能合约应用,把区块链作为一个可编程的分布式信用基础设施,区块链技术的应用范围扩展到支撑一个去中心化的市场,如股票、债券、期货、抵押、知识产权、房产等。区块链3.0则是超越货币、经济和市场的区块链应用,可用于实现全球范围内物理资源和人力资产的分配,支持广义资产及行业应用,特别是在政府、科学、健康、科学、文化和艺术领域的应用。

从表2可以看出:在知识导入和体验上,浙教版以数学问题直接进入,但缺少知识体验过程,而美GMH版没有知识导入,是让学生在解决瓷砖问题的过程中,通过平方运算思考平方根与平方数的关系,从而引入开平方和平方根.在知识应用上,浙教版先以例1帮助学生巩固开平方和平方根的概念以及开平方与平方的互逆关系,再以例2强化学生对平方根、算术平方根、负平方根的区别(见图3);而美GMH版则直接以例题来介绍正负平方根和平方根,以及平方根在解方程中的应用(见图4).相比之下,浙教版的例题安排更合理,有利于学生对不同知识点的区分.另外,两版教材均以文字、符号来表征平方根的概念,且都没有知识拓展.

在区块链2.0中一个很重要的概念是智能合约,智能合约是一种计算机协议,类似于普通应用程序中的if - then语句,当预先设定的条件达到时,自动触发合约执行相应条款。一旦部署就能实现自我执行和自我验证,而且不受人为的干预。它的出现可以追溯到1994年,几乎与互联网同时出现,但因为缺乏可信的执行环境一直没有被应用到实际中,直到区块链技术的出现为它的实现提供了基础。区块链2.0中最具代表性的平台以太坊实现了区块链与智能合约的完美结合,为智能合约提供可信的执行环境。以太坊是一个图灵完备的开放的区块链技术平台,提供了丰富的API及构建和发布应用的编程语言——以太坊脚本,用户可以在以太坊上编写需要的智能合约,通过智能合约实现强大的功能,实现去中心化的应用程序(Decentralized App,DApp),本文也是基于以太坊设计了投票系统。

燕麦可谓谷物家族中的“明星”。如果你只冲食过速食燕麦片的话,就白费了它一身的营养和黏稠有嚼劲的好口感。

2 基于区块链的投票系统的实现

本文在Ubuntu 16.04.3 LTS操作系统下搭建了以太坊开发环境,也可以在MAC,Windows操作系统下搭建开发环境,但不建议在windows环境下进行以太坊的开发。

2.1 Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用于方便地搭建各种响应速度快、易于扩展的网络应用。它也是truffle框架的安装环境,在安装node.js 的同时,将自动安装npm,npm是世界上最大的开源库,可以让 JavaScript 开发者在共享代码、复用代码以及更新共享的代码上更加方便。Node.js的安装有2种方式,一种是使用apt命令:sudo apt-get install nodejs安装,但该方法一般不能获得最新版本的Node.js;另外一种是下载或在 Github 上获取 Node.js 源码,然后重新编译安装,因为要对源码重新编译,因此耗费的时间可能多一点,但该方法可以获得最新版或指定的软件版本,建议使用此方法,具体如下:

tar -zxvf node-v8.9.3.tar.gz

cd node v8.9.3

水行政管理亮点纷呈。政策法规建设取得重大突破。新修订的西藏自治区关于水法、水土保持法实施办法,首次明确水电站征收水资源费,涉水工程实行规划同意书制度,水土保持工作纳入政府目标考核体系。最严格水资源管理制度在雪域大地生根落户,地(市)用水总量红线已经划定正待审批。工业采矿、矿泉水生产、水电站等重点项目水资源论证形成常态化。水行政执法力度不断加大,违法开采地下水企业自备井依法封填,违法采砂活动及时得到整顿,依法办理取水许可的意识明显增强。

智能合约的编写需要使用以太坊编程语言,以太坊有4种专用的编程语言:Solidity,Serpent,LLL,Mutan,其中Solidity类似于Javascript,是目前最流行也是官方推荐的高级语言,Serpent的设计类似于Python。本文采用Solidity编写投票系统智能合约,代码可以参考Solidity相关文档。

sudo make

sudo make install

2.2 以太坊网络

还有一种快速建立以太坊网络的方式是使用Ganache, 它是一个专门为开发智能合约定制的区块链本地节点工具,不同于使用geth建立真正的以太坊环境,它是在本地使用内存模拟的一个以太坊环境,在启动时会自动创建10个存有100个以太币的测试账户。Ganache提供了图形化和命令行2种工作方式,图形化工具可以直接通过下载安装使用,如图2所示。命令工具可以通过sudo npm install -g ganache-cli命令安装(在早先版本中ganache-cli 被称为testrpc)。对于开发测试来说,使用Ganache更方便快捷,本文就使用此种方式。

var Ballot = artifacts.require("Ballot");

npm install -g truffle

再有一种是通过以太坊客户端建立私有网络,因为私有网络节点相对较少、速度较快,用户可以随时创建、销毁一个以太坊网络,方便智能合约开发和测试。以太坊客户端包括用Go语言编写实现的Geth,用C++语言编写实现的Eth,python语言编写实现的pyethereum,java语言编写实现的ethereumj,其中Geth是以太坊官方推荐并且使用最广泛的客户端。使用Geth创建私有网络,可以通过挖矿快速获取以太币,使用dev命令启用开发者网络(模式),开发者网络会使用POA共识,默认预分配一个开发者账户并且会自动开启挖矿。以太坊私有网络部署在本地,只有内部节点才能调用和执行智能合约。

记:“四个全面“中,全面依法治国是很重要的一点;但现在,有法不依、执法不严的情况时有发生。您认为全面依法治国还存在哪些困境?该如何破局?

以太坊应用程序DApp的运行需要以太坊网络及以太币(ETH)的支持。以太坊官方提供了2种网络:生产环境网络和测试网络 TestNet。以太坊生产网络是产生真正有价值的以太币的全球化网络,部署在生产环境上的智能合约,任何人任何应用都可以调用,但都会消耗真实的以太币,目前一个以太币的价格已经达到900多美元,而且该网络速度慢,不适合开发、调试和测试。测试网TestNet包括Ropsten,Rinkeby等,它是专门为以太坊的开发、测试准备的全球化部署的以太坊网络,在它上面执行合约也要消耗以太币,但测试网络上的以太币没有任何真实的价值,同样该网络速度慢,需要较长时间的节点同步,目前以太币的获取也不容易。

图2 Ganache

2.3 truffle项目

Truffle是以太坊中最受欢迎的Solidity编程语言开发框架,内置智能合约编译、链接、部署和二进制文件的管理,可以让用户快速进行DApp的测试、部署与发布,安装方式如下:

第一,企业审计人员要有良好的道德素养,在各类干扰正常工作的行为下要坚持自己的职业道德,不接受任何形式的贿赂,按照相关要求规范操作。

通过上述两种手段,伊朗的石油出口量大幅降低。在2012年开始的美国对伊朗制裁过程中,伊朗石油出口量由每天250万桶降低到80万桶,对伊朗经济造成巨大打击。数据显示,2017年,中国从伊朗进口的石油约占伊朗石油出口总量的1/3,约占中国原油进口总量的11%。美国对伊朗实行制裁以来,中国已开始减少伊朗的石油进口量。虽然近日美国宣布豁免8个国家进口伊朗石油180天,其中,中国的进口量为36万桶/日,但该项豁免是暂时的,美国的目标是将伊朗石油出口量降至零。面对美对伊制裁的步步紧逼,我国石油企业的贸易渠道将不得不进行重新布局。

安装好truffle后就可以创建项目了[5],首先新建项目文件目录,然后在目录中使用truffle unbox Ballot命令创建项目Ballot,项目目录结构图3所示。

图3 项目目录结构

其中,contracts文件夹用来存放智能合约文件,migrations文件夹用来处理智能合约的部署,该文件夹中的文件是跟踪变化的特殊智能合约,src文件夹存放DApp前端页面文件,test文件夹存放智能合约测试用例,truffle.js 是truffle 配置文件。

2.4 智能合约

sudo ./configure

智能合约编写好后还需要把Solidity程序代码编译为以太坊虚拟机(Ethereum Virtual Machine,EVM)字节码才能运行。EVM是以太坊中智能合约的运行环境,类似JVM,它是一个隔离的环境,外部无法接触到在EVM内部运行的代码,它的主要工作是执行智能合约的字节码,而EVM运行在以太坊节点上,当把合约部署到以太坊网络上之后,合约就可以在以太坊网络中运行了。编译智能合约用命令truffle compile,完成后可以看到工作目录中新增了一个build文件夹。

编译之后就可以部署到区块链上。在migrations文件夹下已经有一个1_initial_migration.js部署脚本,用来部署Migrations.sol合约。Migrations.sol合约用来确保不会部署相同的合约。新建一个脚本2_deploy_ballot.js来部署编写的投票智能合约,代码如下

近现代社会以来,高等教育最主要的基本特征是根据学科进行分类,根据社会的职业分工进行专业的设置,然后对专业的人才进行培养,然而高校对于专业及职业划分的标准、结构和社会上需要的标准和结构是具有一定差异性的,高校作为培养人才的场所,其自身具备自己的教学理念以及实现自身价值方向的追求,在对于人才的培养阶段具有自己的一套逻辑和方案,所以会出现高校教育培养的人才与社会经济发展需要的人才不完全一致的可能性,两者之间的差异会在更深层次上,影响到医学教育管理常见问题的产生。

女性农民工作为城市里基层劳动人民,工作辛苦且身心疲惫,这就需要经常参与到体育锻炼中,能够让身心得到放松,有效化解工作带来的压力。政府在鼓励女性农民工在参与体育锻炼的同时,要考虑其他因素,比如人口结构、地理位置、运动资源等等,可以有效把这几个方面的因素结合起来,为女性农民工提供集休闲和娱乐为一体的体育项目和体育活动,以更好地缓解工作上的压力和紧张。

module.exports = function(deployer) {

deployer.deploy(Ballot);

};

启动ganache以太坊网络,运行命令truffle migrate完成智能合约的部署,在Ganache里可以看到区块链状态的变化,产生了4个新区块。

2.5 交互式页面

本文中使用web3.js完成用户调用合约,编写界面UI,实现智能合约与用户的交互,整个以太坊智能合约的部署和调用流程如图4所示。Web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态、查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。DApp应用的前端代码在src文件夹下。

图4 合约部署与调用

2.6 投票DApp

以太坊DApp在运行过程中需要消耗以太币,所以需要有专门的程序如钱包对账户管理,提供以太币存储、转账等功能。而一般浏览器并不提供钱包功能,运行DApp可以使用以太坊专用浏览器Mist,也可以采用在谷歌Chrome浏览器中安装MetaMask插件的方式,MetaMask 是一个轻量级的以太坊插件钱包,使用起来非常方便。本文采用后者,通过运行npm run dev启动网站服务器,访问投票DApp,最终投票系统效果如图5所示,该投票系统通过区块链技术保证了投票的公开透明、防篡改,也验证了区块链所具有的技术优势。

图5 区块链投票

3 结论

本文基于区块链改进现行的电子投票系统,进行了有意义的尝试,但是在公共社会投票领域的应用还有需要探索的地方,如上市公司的董事会选举,股东可以根据拥有的股份数量进行投票,拥有的股票越多,拥有的选举权就越大,需要设计股份加权的投票系统。区块链技术在我国的发展虽然刚刚处于起步阶段,但已经引起了政府、企业、科研、高校等部门的重视,2016年中国人民银行召开了数字货币研讨会,提出要发行数字货币,同年成立了中国分布式总账基础协议联盟及金融区块链合作联盟,金融领域纷纷涉足区块链,国务院将区块链写入到了《“十三五”国家信息化规划》中, 加快研究和发展区块链技术,打造自主技术体系,可以说未来的发展值得期待。

参考文献

[1] 何蒲,于戈,张岩峰,等.区块链技术与应用前瞻综述[J].计算机科学, 2017, 44(4):1-7.

[2] SWAN Melanie.Blockchain Thinking:The Brain as a Decentralized Autonomous Corporation[J].IEEE Technology & Society Magazine,2015,34(4):41-52.

[3] 张昕伟,张华,郭肖旺,等.基于区块链的电子投票选举系统研究分析[J].电子技术应用,2017,43(11):132-135.

[4] 邹均,张海宁,唐屹,等.区块链技术指南[M].北京:机械工业出版社,2016.

[5]TRUFFLE.ETHEREUM PET SHOP[EB/OL].[2018-01-20].http://truffleframework.com/tutorials/pet-shop.

贾民政
《北京工业职业技术学院学报》2018年第2期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号