PublicVotes: Ethereum-based Voting Application

As part of my research for Reposium, I have started working on a simple voting application built with Meteor that utilizes the Ethereum Blockchain to create a provably fair and transparent voting system. This is one of a few applications I want to create as part of my research (decentralized decision making or liquid democracy is most likely next). Before explaining the underlying structure of this application, let me explain which problems this application solves and which it doesn’t.

What this is and isn’t

How it works

There are basically 2 processes that make up the system. The first is the poll creation, the second is actual voting.

Poll Creation

A poll consists of the following information:

  • Title (required): Mostly a question that indicates what the users are voting about. Maxlength: 48 chars.
  • Description (not required): A more comprehensive description that explains to the users what the vote is exactly about. Maxlength: 145 chars.
  • Options (min 2 required): The actual voting options for your poll. Minimum is 2, max is 10 options. Maxlength: 20 chars.


  • Public Poll: The user can choose if the poll should be public or not. If the poll is private, only people with the link can participate in the vote.
  • Multioption (coming soon): Makes it possible for users to choose more than 1 poll option.
  • Vote Limit: Limits the number of people that can participate in the poll. (not required).
  • Time Limit: A timelimit for the poll. Right now this is a requirement as the account will eventually run out of Ether. But once we have setup a faucet I will remove the timelimit.

Once the creator has entered this information, he/she is required to send a specified amount (0.2 Ether to be exact) of Ether to an address. All of the accounts are generated on the client, thanks to silentcicero’s ethereumjs library. This account is then stored in a local MongoDB collection and will be used for all future votes.

Once the Ether have been received at the specified address, the poll is ready to go live and be deployed onto the Ethereum Blockchain. This is the smart contract that is deployed onto the Blockchain: . Once the contract has been mined, the poll will go live and people can start voting.

Casting a Vote

After voting, the user is redirected to /voted where there are statistics about the poll and the people who have voted. The table at the bottom of the page has been purely generated through filters that get the event logs of the Ethereum Blockchain.

Where to go from here

It would be very interesting to work on a sybil-attack resistant system, but it seems that so far there is no viable solution to the problem at hand that offers both security and ease of use.

Overall though, I will work on more improvements over the coming weeks and also on a follow-up application that will take this voting application to the next level (mostly based on Liquid Democracy concepts).

UPDATE 07/11/2015: I have created an analysis about the feasibility of Ethereum-based voting. Check it out here:

Co-Founder @iotatoken

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store