The project video is available at
The web site is hosted at

This the bitcoin transaction containing the minted Election tokens:

What is the Bitcoin Voting Booth

The Bitcoin Voting Booth implements an election using smart contracts on the Bitcoin protocol. At every point in our task we endeavor to make e-voting on a public blockchain fair, confidential, secure and publicly verifiable in order to make the results trustworthy.

What did we learn

The project achieved three major accomplishments.

  1. Implemented and executed smart contracts on bitcoin to perform an election. Bitcoin|Computer allows the smart contracts to be developed using javascript and deployed to bitcoin.
  2. Performed a cost analysis on competing bitcoin chains. "Store of value" chains were quite expensive. BitcoinSV which is built for usage, allows for very large blocks and many transactions. An election should be held on a blockchain built to scale with small fees.
  3. Researched how privacy and confidentiality can be performed on a public blockchain. Bitcoin can be extended with confidential e-voting using Blind Signatures and bit commitment. See the paper "E-voting System Based on the Bitcoin Protocol and Blind Signatures" (

We also spent some time to consider ways to make voting an easier experience for voters.

How the project was built

We implemented the smart contracts using Bitcoin|Computer ( and developed the web site with React javascript on BitcoinSV testnet. We obtained proforma invoices for mining fees on mainnet.

Challenges we faced

Building the smart contracts was a learning experience, as well as learning about how to perform confidential (private) transactions using bit commitments and Blind Signatures.

What is next for the Bitcoin Voting Booth

We plan to continue developing the voting smart contracts and improving the user interface. We will take a deep dive into the cryptographic foundations of Blind Signatures and implement the full privacy enhancement on a public blockchain.

These are the valuable characteristics for e-voting that are possible on the bitcoin protocol with Blind Signatures. "Completeness: An eligible voter is always accepted by the administrator and all valid votes are counted correctly. Robustness/Soundness: Dishonest voters and other participants cannot disturb/disrupt an election.
Anonymity/Privacy: All votes must be secret; and neither voting authorities nor anyone else can link a vote to the voter who has cast a vote.
Unreusability: A voter cannot vote more than once.
Fairness: Early results should not be obtained, as they could influence the remaining voters.
Eligibility: Only legitimate voters can vote.
Individual verifiability: A voter can verify that his/her vote was really counted.
Universal verifiability: Anybody can verify that the published outcome really is the sum of all votes."

As seen in an overview of the proposed future implementation the protocol involves the following steps: 1) Voter presents credentials to an election authority. The voting " envelope" is signed by the authority. 2) A bit commitment is committed to the blockchain ledger 3) User casts vote anonymously. This can be an e-vote or at a precinct on the day of the election. 4) Vote counter verifies signature of election authority on the bit commitment and counts the vote. The final vote tabulation could be published in a merkle tree.

Project slides

Built With

Share this project: