Experiments with alternative democracies
XDemocracy is a Ethereum/Solidity based research project to implement a new kind of democracy using blockchain technology. It's merely a research project, to try new things and see how they turn out, so please take this into account before you start criticizing. This project is supposed to be a fun way to research various implementations of democatic processes using blockchain. It does not pretend to replace or revolutionize current political systems, nor does it attempt to be profitable.
How does XDemocracy work
In version 1 of XDemocracy you have to 'pay' with ether to vote for a specific proposal. This seems very undemocratic, this would allow the rich to dominate the country not? Well no, not exactly, because the total value stored in the proposal from both sides (positive and negative) goes to the losing party. This way the winners have to buy the proposal from the losers. The aim of XD 1.0 is to find a balance between money and resources on one hand and political power on the other hand. This approach has some unique advantages:
- it should be unaffected by large numbers of bots voting, so everyone can vote as long as they pay
- it should distribute both power and economic resources more efficiently
Of course, there are all sorts of theoretical and practical problems eh? But what the heck, sometimes you just have to do something and start something to get anywhere. This is just an attempt is just to explore whats's possible and how it works out.
The democratic process of XD starts with a so-called proposal. Anyone can send a proposal using the proposal() method. The 1st parameter of this method should be the document ID. This is a string containing a reference to a document or internet resource containing the details regarding this proposal. After the proposal has been submitted, the issuer gets a proposal ID to refer to this specific item.
People can now inquiry about the proposal using the describe() function, which returns all relevant details. It's also possible to vote in favor or against the proposal. To vote, one must pay a certain amount of ether to the positive side (1) or the negative side (2) of the proposal.
After 24 hours (hardcoded for now) the proposal can be closed (by anyone for now). On closing the result will be determined. If the positive side contains more ether than the negative side the proposal will be considered 'accepted' and the opposing voters can claim their share.
To vote, people can use the vote() function. The full signature is: vote( proposalID, side ) - were side = 1 means in favor and side = 2 means against. Along with their vote, people can send ether for their side. One can only vote once (for now).
After 24 hrs (for now) the proposal can be closed using the finalize function (finalize()), once again, everyone can use this function right now. The finalizer will close the proposal, rejecting any more votes.
Using the sell() functions the people that lost the vote can obtain their ether. They get ALL the ether stored in the proposal, not just the value on either side but ALL of it. Each voter will receive an equal share of the total value contained in the proposal.
Try it out
I will put this contract on test net soon, for now just copy the contents of the .sol file and run it locally using remix IDE:
Or use a local Mist instance. Have fun.
As I said, no this is not a bullet proof replacement for todays political system, it's just a thought experiment and I like to discuss it with you, just file some issues (if you have questions or improvements or requests or whatever) and let's talk.