dVote - Decentralized voting application using Ethereum. Also allows you to donate Ether to your favorite candidates and view their total campaign funds, allowing transparency throughout the election.


“Every machine has to be programmed with the ballot design, and that programming is copied in by election officials on a USB stick or memory card. If someone can infect that programming, they can spread an attack to the machines and potentially tamper with a fraction of the votes without anyone detecting it.” By Matin Giles, Your Vote is in Jeopardy, MIT Technology Review.

In addition to the security issues, there are all kinds of problems in vote tallying and reporting, gerrymandering, etc. Blockchain has two special properties that could be used to help improve our current voting situation in the United States. One is immutability, the other, transparency. Every transaction, including votes, would be logged onto the blockchain and available for everyone to view. Meanwhile, vote-recording would become immutable once a block is successfully “mined” and become a permanent part of the election history.

What it does

Provides an easy way to vote for any candidate. Also provides an option to donate for the causes of your favorite candidates, and view their total funds.

How we built it

  • We used NPM for managing our dependencies. For example, we use web3.js which is a Javascript API that allows you to interact with the Blockchain, including making transactions and calls to smart contracts. This API abstracts the communication with Ethereum Clients, allowing developers to focus on the content of their application.

  • We employed the Truffle Framework which allows us to build decentralized applications on the Ethereum blockchain. It provides a suite of tools that allow us to write smart contacts with the Solidity programming language. It also enables us to test our smart contracts and deploy them to the blockchain. It also gives us a place to develop our client-side application.

  • We also use Ganache which is a local in-memory blockchain. It will give us 10 external accounts with addresses on our local Ethereum blockchain. Each account is preloaded with 100 fake ether.

  • In order to use the blockchain, we must connect to its network. We’ll have to install a special browser extension in order to use the Ethereum block chain. That’s where Metamask comes in. We’ll be able to connect to our local Ethereum blockchain with our personal account, and interact with our smart contract.

Challenges we ran into

Having to download the entire Ethereum blockchain and losing precious development time. Overall, getting a good understanding of the Ethereum architecture necessary for developing a decentralized application was a challenge since none of us had much experience with it. Handling the errors due to the rapidly changing JavaScript dependencies like web3.js.

Accomplishments that we're proud of

We're proud of the fact that our app can tackle problems in existing voting system by providing mechanisms that make:

  • voting immutable and virtually tamper-proof (duress and other forms of crime maybe still be an issue)
  • campaign contributions will be secure and transparent using Interledger payments

What we learned

Building a Full Stack Blockchain application by leveraging different technologies like Solidity, Ethereum, Truffle, Ganache, Node.js, Interledger and MetaTask, helped us learn a lot throughout this project.

What's next for dVote

  • Adding features like 'current affairs' to help the voters make an informed decision about their votes and donations
  • Improved UI/UX
Share this project: