DemocracyEarth / ubi

Universal Basic Income token.
225 stars 38 forks source link

Quadratic Voting for governance #52

Closed auryn-macmillan closed 3 years ago

auryn-macmillan commented 3 years ago

I assume that since Sybil resistance is baked in, the UBI project would prefer to use a democratic governance model (e.g. 1p1v or quadratic voting (QV)), rather than a plutocratic governance model (e.g. token weighted voting).

For a UBI system, QV with the UBI token used as voice credits seems optimal. UBI tokens spent on voting could be either:

  1. Burned, putting deflationary pressure on the token supply.
  2. Reallocated to public goods for the benefit of UBI token's ecosystem.

I'm not aware of any DAO frameworks that have implemented QV, yet. I'd suggest that one way to start might be to set up a Gnosis Safe multi-sig controlled by a geographically diverse set of known humans who agree to sign in accordance with a Snapshot instance with a QV template. Post launch, one focus that the DAO might take is to build a QV system that can eliminate the need for/dependence on the multi-sig signers, with the eventual goal of removing them.

I imagine the initial snapshot template working something like this:

  1. burn() should have an optional parameter to add some extra data, the snapshot proposal hash (e.g. QmfYNxnWf62q988H7c8UzDnsp8XaNwBjjf1JXVSyyngkcf)
  2. To get "voice credits" for a proposal, humans burn some amount of UBI tokens, including the appropriate proposal hash.
  3. To vote, users sign a message via the snapshot interface

Note: burning could be replaced with a transfer to some public goods fund allocation mechanism, like an instance of clr.fund, for example.

santisiri commented 3 years ago

This is a great initiative @auryn-macmillan and I think most of us agree with this!

We actually did a Quadratic Voting Gitcoin grant last year and it led to two projects using QV. You can see the grant action detailed here: https://github.com/DemocracyEarth/dao/issues/1

First award went for @moose-code that did a clean implementation that takes some of the square root computation off-chain (QV can be gas expensive): https://github.com/wildcards-world/DemocracyDAOv1

Second place went for @keviinfoes that adapted MolochDAO code for QV in our fork here: https://github.com/DemocracyEarth/dao

Right now I'm looking at the updated Moloch v2 contracts and see what we can do with them. Likely I'll use code from both these projects.

santisiri commented 3 years ago

Been working on a MolochDAO adaptation that burns tokens to post proposals & implements quadratic voting.

But ongoing work with projects like snapshot.page that allow gasless proposals and voitng (a return to off-chain governance that builds on top of the Snapshot event) convinced me that it's probably best to begin there.

Right now I'm stuck at tests for the DAO as the smart contract is aiming to connect with the token that must be burnt after a submitProposal. https://github.com/DemocracyEarth/ubi/tree/dao

santisiri commented 3 years ago

I imagine the initial snapshot template working something like this: burn() should have an optional parameter to add some extra data, the snapshot proposal hash (e.g. QmfYNxnWf62q988H7c8UzDnsp8XaNwBjjf1JXVSyyngkcf) To get "voice credits" for a proposal, humans burn some amount of UBI tokens, including the appropriate proposal hash. To vote, users sign a message via the snapshot interface

@auryn-macmillan: are you familiar with https://snapshot.page and how it works?

auryn-macmillan commented 3 years ago

@auryn-macmillan: are you familiar with https://snapshot.page and how it works?

I am! And I agree that off-chain voting is probably a better route to go.

We're actually working on an Snapshot-based solution for the Gnosis DAO currently. It essentially uses Reality.eth to ensure the off-chain result is executed on-chain. The repo is currently private, but will be opensourced soon. In the mean time, the high-level overview is:

auryn-macmillan commented 3 years ago

Been working on a MolochDAO adaptation that burns tokens to post proposals & implements quadratic voting.

It looks like the quadratic voting in this case uses the square root of share balance as each user's vote weight. While I think that will work just fine, my understanding is that it works better if the voting is consumptive, and best if the consumption benefits all holders (ether by burning or by relocating to public goods).

Assuming we went the snapshot route detailed in the above comment, then we could create a snapshot strategy where each user's vote weight is the square root of the UBI tokens that they have burned / allocated to public goods in order to vote on that proposal.

To a certain extent, this might negate the benefit of offchain voting. But a burn() call or a transfer() call will be significantly cheaper than voting in a DAO (in most cases that I'm aware of).

santisiri commented 3 years ago

Considering we can use the soon to be launched ProofOfHumanity interface.. we created a simple ERC20 token that simply gives 1 vote to each valid identity and emits snapshots. Code is here: https://github.com/DemocracyEarth/ubi/blob/master/contracts/Democracy.sol — I would be interesting to link this with a consumptive mechanism as the one you describe.

Keen on learning more about Reality.eth.. would be interesting to test it out. Kleros is launching a smart contract as well that could be used for enforcement of actions: https://blog.kleros.io/introducing-kleros-governor/

clesaege commented 3 years ago

We can start with 1 registered = 1 vote with a snapshot vote with decisions being implemented by the governor. We could then use a burn model for quadratic voting (I don't think just looking at balances would be an efficient quadratic voting as it needs to cost users for the economics to work, otherwise it just favors the richest), maybe with a token wrapped on L2.

santisiri commented 3 years ago

We have implemented UBIVote.sol that uses QV combined with Proof of Humanity.

auryn-macmillan commented 3 years ago

Amazing!