In a blockchain-based polling/voting system, what is the best way to ensure that nobody votes more than once, and what is the best way to keep votes secret (if that's a requirement)? The info available in the blockchain should be 1) who voted and 2) how many votes for each option.

  • How can be both the votes secret and be visible who voted?
    – Mathias711
    Commented May 27, 2014 at 9:21
  • I think it's hard to accomplish to vote just once, because you are anonymous if you just look at the blockchain. Therefor you can open a new address, deposit bitcoin on it, and vote once more
    – Mathias711
    Commented May 27, 2014 at 9:23
  • Perhaps with one target address per voter? If the target is hit twice both votes are voided. Commented May 27, 2014 at 9:27
  • So you want to create 10.000 addresses if there are 10.000 voters? Then you can maybe do something like yes if the last number in the sending address is even, and no if odd. And if it's not public which addresses are used in the system, then no-one can void your vote. Unless 'they' track your wallet, and see you sending 1 satoshi to an address and conclude it's for voting. Then you can only count the first vote or something. Like sealing vote-paper on a real vote.
    – Mathias711
    Commented May 27, 2014 at 9:32
  • Is anyone working on a implementation of this?
    – ihtkwot
    Commented Jul 16, 2015 at 20:11

2 Answers 2


You can use colored coins to do voting on the Blockchain.

You can start by creating "Vote coins", and issue as many of them as you have registered voters. Then you ask the voters to generate a Bitcoin address, and that they give it to you.

You then send 1 "vote coin" to each of those addresses. You designate two or more addresses, one for each candidate/proposition. Finally the voters have to send the vote coin to the address representing the proposition they want to vote for.

When the vote is closed, you simply look at the "vote coin" balance in each of the two addresses.

The votes are secret because nobody can tell which address belongs to which voter.

Coinprism is a web wallet that lets you issue, send and receive your own colored coins. It's quite simple to use.

For secrecy, the voters could go to the voting office, the officials verify that the voter is allowed to vote, the voter writes down his address on a piece of paper, and slide it into a sealed box. At the end of that registration process, the voting office has a box with 100 pieces of papers with each an address. They can then send the "vote coins" to those 100 addresses, without knowing which belongs to whom.

Of course, this is just an illustration, it's possible to achieve the same without requiring people to travel using the equivalent process implemented as open source software.

  • 1
    "nobody can tell which address belongs to which voter": The person who issued the vote coins knows which address belonged to each voter, don't they? Commented May 27, 2014 at 14:22
  • I agree with Nate's objection, the proposed solution doesn't seem to address secrecy. If more than one person knows a secret, it isn't a secret anymore. Commented May 28, 2014 at 8:31
  • Well, blockchain or not, it's physically impossible to hold a vote where all voters are 100% anonymous, and where a person can't vote more than once. It's either one or the other. If you want to limit one person per vote, there has to be some kind of central authority verifying identities.
    – Flavien
    Commented May 28, 2014 at 13:32
  • Flavien, secrecy is a requirement, but anonymity isn't. I think the flaw in your proposed solution is that the issuing agency knows who voted for what. If the issuing agency just knows who has voted and can invalidate double votes, then the problem is solved. Current voting systems do keep track of who has voted and ensure that there are no double votes, but respect the secrecy of individual votes. Commented May 28, 2014 at 17:17
  • Ok, then this can easily be solved. I've updated my answer.
    – Flavien
    Commented May 28, 2014 at 20:57

as for making votes secret, we can use coinjoin. Groups of 1000 people mix their votes together. You can prove that a person made one of the votes in the pool of 1000, but you cannot prove which vote was theirs.

  • Except that anyone within the group of 1000 can see who everyone else in the group of 1000 voted for. Coinjoin protects anonymity OUTSIDE the group but not inside. Commented Feb 14, 2015 at 18:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.