Using the Blockchain to Vote

Theoretical and Practical Considerations

UCT Computer Science Honours Thesis


The main idea behind using the Blockchain to vote is to leverage the decentralised nature of the technology to minimize or if possible eliminate the role of the central authority in the voting process which in turn will likely reduce the current electoral fraud present in many elections.

From a theoretical viewpoint we focused on Zero-Knowledge proofs, which seem to provide the solution to achieving anonymity in the Blockchain (critical for voters privacy) whilst maintaining the security afforded by the Blockchain necessary for the voting use case.

Practically we focused on the development of Smart Contracts: Computer protocols encoded onto the Blockchain used to facilitate, verify, or enforce the negotiation or performance of a contract.


Blockchain is a complete, irrevocable and public transaction ledger that is replicated across a distributed network of nodes. The essence of our idea is to represent votes as transactions within the Blockchain.

  1. Blockchain is complete: This means that every transaction that has ever occurred within the system is kept in the ‘Blockchain’.
  2. Blockchain is irrevocable (permanent): Once a transaction is made and recorded in the ledger it can never be deleted or altered.
  3. Blockchain is public: Every transaction that ever occurs is public and can be seen by everyone.
  4. Blockchain is distributed: The transaction ledger (list of all the transactions that have occurred in the system) is distributed across a network (see figure 1).

The above Blockchain properties are desirable as they ensure our transactions (votes) cannot be manipulated, deleted or fabricated in any fashion.

Smart Contracts

Smart contracts form the core of any interaction with the blockchain, and are the mechanism by which the internet of value is controlled.

However, this system of value completely collapses as soon as any kind of bug that allows users to manipulate the values (effectively the value) of the system; be it the values defining the balances of participants or the record of votes in an election, if these values can be changed the system has no value. Additionally if any such manipulation is possible the system is no longer ‘trustless’.

A large portion of the project is spent on working out techniques to help developers avoid bugs, via best practices as well as exploring common mistakes, and established Blockchain design patterns.

Zero-Knowledge Proofs

So far we have seen that the distributed nature of the Blockchain is desirable for removing our dependency on the integrity of a central authority. However the public nature of transactions within the Blockchain brings about a new problem: voter secrecy.

Since we are representing our votes as transactions, and all Blockchain transactions are inherently public, we now technically violate the privacy of every voter through making their vote public.

Zero-Knowledge proofs allow us to verify the validity of transactions (votes), without learning anything about the actual transactions themselves (who voted for who). Hence solving our previously mentioned privacy issue whilst maintaining the security afforded by the Blockchain.

More specifically, we examine Zero-Knowledge proof variants called Zk-Snarks (Zero-Knowledge Succinct non-Interactive Arguments of Knowledge) which possess properties making them ideal for use within the Blockchain.


The outcome of a voting process brings widespread political and financial ramifications and consequently it is of great importance that the process be facilitated in the fairest possible manner absent of any possible corruption or manipulation.

Unfortunately past electronic voting systems have shown numerous vulnerabilities and thus there is significant motivation to develop a Blockchain based electronic voting system; which would significantly enhance the democratic process by no longer depending on a central authority to:

Ensure the correctness of the voting tally And the privacy of voters.