<p>You can use <a href="http://www.coinprism.com" rel="nofollow">colored coins</a> to do voting on the Blockchain.</p>

<p>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.</p>

<p>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.</p>

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

<p>The votes are secret because nobody can tell which address belongs to which voter.</p>

<p><a href="http://www.coinprism.com" rel="nofollow">Coinprism</a> is a web wallet that lets you issue, send and receive your own colored coins. It's quite simple to use.</p>

<p>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.</p>

<p>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.</p>

CC BY-SA 3.0
2014-05-27T14:22:44.020Z
"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?
Nate Eldredge
CC BY-SA 3.0
2014-05-28T08:31:26.773Z
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.
Giulio Prisco
CC BY-SA 3.0
2014-05-28T13:32:36.647Z
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
CC BY-SA 3.0
2014-05-28T17:17:51.517Z
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.
Giulio Prisco
CC BY-SA 3.0
2014-05-28T20:57:50.237Z
Ok, then this can easily be solved. I've updated my answer.
Flavien
CC BY-SA 3.0
2014-05-30T06:50:18.150Z
How about a combination of colored coins and the Darkcoin protocol darkcoin.io (if a combination is doable)? Colored coins entitle to vote, and the anonymization of payments to the target addresses ensure that individual votes are secret.
Giulio Prisco
CC BY-SA 3.0
2015-02-14T18:30:57.417Z
This still doesn't solve anonymity. You have no way of implementing a box that can simultaneously (a) can verify that the voter is listed on the voter rolls while (b) not knowing who the voter is.
Michael Matthew Toomim
CC BY-SA 4.0
2019-03-28T08:42:14.130Z
Flavien, I'm looking to do this exact same thing you described above but meeting with the approved voter in person isn't possible, is there another way around this?
trying_hal9000
CC BY-SA 3.0
2014-05-27T10:12:58.347Z
2014-05-28T21:00:24.370Z
2014-05-28T21:00:24.370Z
Flavien
<p>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.</p>

CC BY-SA 3.0
2015-02-14T18:31:29.947Z
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.
Michael Matthew Toomim
CC BY-SA 3.0
2014-06-07T15:27:21.580Z
2014-06-07T15:27:21.580Z
user9415
<p>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.</p>

CC BY-SA 3.0
2014-05-27T09:21:18.403Z
How can be both the votes secret and be visible who voted?
Mathias711
CC BY-SA 3.0
2014-05-27T09:23:37.490Z
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
CC BY-SA 3.0
2014-05-27T09:27:44.967Z
Perhaps with one target address per voter? If the target is hit twice both votes are voided.
Giulio Prisco
CC BY-SA 3.0
2014-05-27T09:32:40.547Z
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
CC BY-SA 3.0
2015-07-16T20:11:17.283Z
Is anyone working on a implementation of this?
ihtkwot
<voting>
Blockchain-based polling/voting systems
Giulio Prisco
# Blockchain-based polling/voting systems

(Asked by: username_0 on 2014-05-27)

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.

**Tags:** voting

> **Comments:**
> **username_1**: How can be both the votes secret and be visible who voted?  
> **username_1**: 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  
> **username_0**: Perhaps with one target address per voter? If the target is hit twice both votes are voided.  
> **username_1**: 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.  
> **username_2**: Is anyone working on a implementation of this?  

---

## 2 answers

### Answer by username_3 on 2014-05-27. Score: 5

You can use [colored coins](http://www.coinprism.com) 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](http://www.coinprism.com) 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.

> **Comments:**
> **username_4**: "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?  
> **username_0**: I agree with username_4'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.  
> **username_3**: 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.  
> **username_0**: username_3, 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.  
> **username_3**: Ok, then this can easily be solved. I've updated my answer.  
> **username_0**: How about a combination of colored coins and the Darkcoin protocol darkcoin.io (if a combination is doable)? Colored coins entitle to vote, and the anonymization of payments to the target addresses ensure that individual votes are secret.  
> **username_5**: This still doesn't solve anonymity. You have no way of implementing a box that can simultaneously (a) can verify that the voter is listed on the voter rolls while (b) not knowing who the voter is.  
> **username_6**: username_3, I'm looking to do this exact same thing you described above but meeting with the approved voter in person isn't possible, is there another way around this?  

---

### Answer by username_7 on 2014-06-07. Score: 1

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.

> **Comments:**
> **username_5**: 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.  

---

