Voting is a fundamental part of democratic systems; it gives individuals in a community the faculty to voice their opinion. In recent years, voter turnout has diminished while concerns regarding integrity, security, and accessibility of current voting systems have escalated. E-voting was introduced to address those concerns; however, it is not cost-effective and still requires full supervision by a central authority. The blockchain is an emerging, decentralized, and distributed technology that promises to enhance different aspects of many industries. Expanding e-voting into blockchain technology could be the solution to alleviate the present concerns in e-voting. In this paper, we propose a blockchain-based voting system, named BroncoVote, that preserves voter privacy and increases accessibility, while keeping the voting system transparent, secure, and cost-effective. BroncoVote implements a university-scaled voting framework that utilizes Ethereum’s blockchain and smart contracts to achieve voter administration and auditable voting records. In addition, BroncoVote utilizes a few cryptographic techniques, including homomorphic encryption, to promote voter privacy. Our implementation was deployed on Ethereum’s Testnet to demonstrate usability, scalability, and efficiency.
Ubuntu 16.xx or higher (make sure to update your OS)
- Open a terminal (make sure you have permissions to download and install packages)
- Run these commands to install git, nodejs, npm, and truffle framework
sudo apt-get install git
sudo apt install nodejs
sudo apt-get install npm
sudo apt-get install build-essential
sudo npm install -g truffle
Go to the directory you want to download the app into:
git clone https://github.com/pmarella2/BroncoVotes.git BroncoVotes
Alternatively you can click here
- Change into BroncoVotes directory
cd BroncoVotes
- Open two new terminals in the project directory (so you should have three different terminals in the BroncoVotes directory)
- In terminal 3, run the nodejs component of BroncoVotes
cd app/javascripts
node node.js
- In terminal 2, run the virtual memory blockchain (testrpc/ganache-cli)
./node_modules/.bin/ganache-cli
- In terminal 1, we will compile the voting smart contracts and deploy them onto the virtual memory blockchain
truffle migrate
- In terminal 1 again, we will host the voting DApp
npm run dev
- You can now interact with the DApp by navigating to localhost:8080 in your browser of choice
Open an issue if there are any problems with compiling and running the DApp
I want to thank NSF and the ISPM research lab for providing the grant and resources to conduct this research project. I would also like to extend my thanks to Mahesh Murthy and Truffle team for providing the structure/tools for smart contract and web DApp development.