Skip to content

Instantly share code, notes, and snippets.

@EggPool
Last active August 20, 2019 15:47
Show Gist options
  • Save EggPool/12b6302b8b15b5cb18eb5b99b7a83aae to your computer and use it in GitHub Desktop.
Save EggPool/12b6302b8b15b5cb18eb5b99b7a83aae to your computer and use it in GitHub Desktop.

EggdraSyl - August 2019
MIT Licence

Preamble

These are semi organized notes about a useable voting mechanism that could be used for governance purpose in the context of blockchains.
This may borrow ideas and concept from game theory, prediction markets and futarchy.
I'm not an expert in these fields, so this could be nuts or already known under other names.
I'm trying to stick with the "Real world principle" of Bismuth, and do things in a pragmatic rather than theorical way.

Why voting is hard to do well

The difficulty is two fold:

A - What is "1" vote?

Blockchains usually are non KYC and anonymous or pseudonymous. One user can have many addresses.
You never can map one vote to one user. Even if you could, voters could be bribed.

Is a vote one address?
One coin?
One IP?
One hash unit?

B - Will I vote for the best common interest?

In a blockchain context, you can have several classes of people with different objectives.
For Bismuth for instance, a PoW utility token, you can think of:

  • The miners
  • The holders
  • The dApps developpers
  • The core team

Each of these classes can have a different egoistic goal when speaking of chain governance.
Just as a quick illustration, miners could like higher fees or block rewards, holders want less dilution and more marketing, dapps developers want low fees and fast blocks, core team wants the token to go mainstream, be used in the real world and secure.

Game theory shows that this can lead to votes that are counter productive for the chain as a whole (see "tragedy of the commons", this is somehow related).

Ethereum case - Carbonvote

In order to decide about the "ice age" issue, eth owners can vote on a motion to delay it.

How does it work?

  • Every address can vote, address balance = vote weight
  • 0 eth sent, but consumes gas
  • You can change your vote anytime, or move eth to change your vote weight
  • The current, real time state of the vote is public, see http://carbonvote.com/

Issues I can see with the ETH voting protocol

  • Nothing at stake. You don't directly win or loose anything by voting (just some gas)
  • exchanges have a huge voting power
  • The holders are by definition the one getting the most votes, so the issue is likely to be in favor of the holders group, and are potentially detrimental to others and the coin in general.
  • Since the votes are public, it allows for any kind of psychological manipulation by influence groups. You can pretend to vote for the other group, so they are not incitated to vote: they are winning! Then swap your votes at the very last time. Can play mind games.
  • you don't vote "your best", you just vote enough so your group wins.
  • You can bribe big balances who don't care to vote for your group, they have nothing to loose, so why not take the bribe and vote?
  • many users could also be bribed to vote against their interest. they get paid to vote by you, they lose nothing.

In the case of Bismuth, could mean exchanges - including cryptopia inactive wallet - could vote and impose their decision.

An alternate voting protocol

Now comes a vicious idea.
The goal is to have voters put their money where their mouth is.

With the protocol I'm about to describe,

  • You only vote for something you really want to happen
  • You do take risks, you have to show your motivation. Your vote is not an empty word, the coin team is not the only one wetting the shirt.
  • Every category has a similar weight and cost to vote. Big balances are not over-represented.
  • You help finance the project you voted for
  • There is no bribe advantage
  • If you loose, you can still be happy
  • There is no possible mind games nor manipulation until the vote is over.
  • The voters involvment is known in real time
  • The issue of the vote is secret until it's over.

The protocol

Let just describe the public interface of the protocol, I'll dig into the technical side in an additional document.

  • You vote by sending $BIS + data to the vote address.
    amount you send is public, data (your vote) is encrypted and private.
  • The $BIS you send are your voting weight.

Options:

  • You can issue several voting transactions, so you can raise your weight during the voting period.
  • you can invert a transaction vote (but not cancel it) should you change your mind.

Once the voting period is over:

  • votes are revealed (more in the tech doc on how this is done).
  • If you don't reveal your vote, it can't be counted, and you don't get your money back.
  • loosers get their $BIS back (less tx fees)
  • winners won, their $BIS go into a common fund to finance the proposal they voted for.

Pros

  • No need to bribe people, you would have to bribe them more than by voting yourself.
  • No mind games, the issue is totally opaque until the end. Even the coin team does not have access to the results before votes are revealed
  • You take risks, and only vote for what you really want, because if this happens, you loose your vote $BIS.
  • There is no incentive in voting for the other side, since if it wins, you lose your tokens
  • involvment (total amount of $BIS) is known in real time.
  • You know what the minimum proposal budget will be (at worse, 50.01% of the votes)
  • Every group has the same voting cost/power. Holders do not have more power than miner because they have a higher balance. What everyone bets for is what they risk, should they win. If the miners group wants to overrule the holders, they don't need to have as much balance as the holders, they just need to vote as much as them.
    The amount you vote reflects your belief and involvment in the proposal you vote for, and what you are ready to pay to see it succeed.

Conclusion

I believe this kind of "blind auction" does avoid the pitfalls of the more common voting and governance mechanisms seen up to date.
This protocol protects the project global interest, by allowing everyone to be represented in a fair manner and forces voters to vote for what they really want long term, not for what would give them the most short term advantage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment