-
Notifications
You must be signed in to change notification settings - Fork 217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Governance Planning Epic #3185
Comments
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
Here is my expectation about how ballots would come to exist and what things voters or other observers would be able to verify. I'm going to give a specific example in terms of managing parameters for a contract. Other elections will also be supported, but this seems to be the case where we need to understand how to verify connections between the parts.
ContractGovernor will have a public method to get from the question name (unique within the ContractGovernor) to a a ballotKit for a question created by a ContractGovernor has Voters got their voting facet via an invitation, so they're sure they're connected to the Registrar that's responsible for this vote. They get a notifier from the registrar to find out about new questions. They can use the question name from the notifier to get a ballotKit. After they fill out a ballot, they submit it by sending it to their registrar, whcih they know and trust. |
doesn't handle Quorum requirements see: #3185
doesn't handle Quorum requirements see: #3185
* feat: ballot counter for two-outcome elections doesn't handle Quorum requirements see: #3185 * refactor: switch to CHOOSE_N. update functions to arrow functions * refactor: cleanup after moving code into vats * refactor: move submitVote() to a facet for the voter. * chore: update release versions in package.json * refactor: move voterFacet to be inside creatorFacet * chore: review cleanups: default:1, sharedFacet 1st, top-level await * refactor: review prompted: tie handling, types, quorum, ballot types Add types flesh out different ballot types a tiny bit moved quorum counting inside binaryBallotCounter More assertions dropped externally visible countVotes(), getQuestionPositions() dependency updates Made tie result be a default or undefined * chore: cleanups simplify ballotCounter creating ballots resolve tally promise earlier typos * chore: very minor cleanups: single assert for list; combine cases
Governance
We'd like to build a governance system that supports voting on the Agoric chain. We may need several different combinations of voting features, so the pieces should be pluggable and reusable.
Scenarios
committee binary vote (binary choice, single winner, by vote count)
staked Majority Vote (binary choice, single winner, by weight)
stakeholder slate vote (multiple choice, single winner)
stakeholder elect a board (multiple choice, multiple winner)
Issues
L
Presuming a deadline, can the vote close early for urgent questions if the quorum is met?L
If we elect members of a committee who have the ability to vote, more questions ariseL
We've talked about some votes being subject to a veto. This raises more issuesLet's put off issues marked
L
for Later.For the rest, we'll drive the answers by working on the scenarios in the order listed above.
Provisional Answers
We can have a library of routines that know how to execute some updates. An individual vote can take some terms that determine what it will automatically do when the vote closes (or when the vote concludes with a Yes outcome.) We can make this more sophisticated over time, and make it pluggable/upgradable in some future revision.
We want to connect some voting to ownership of staked tokens, but without requiring that the stake be dedicated to a single vote. We don't currently have a representation in Javascript of the amount staked. That data is accessible in the cosmos code we use to drive home.bank, so we could use that info to issue voteable certificates. The certificates would identify the associated delegationAddress, the amount of stake, and how long the stake is tied up. The lock-up period could be set to the unbonding period for now, and support more sophisticated lock-ups later.
The vote contract would track the vote by the voter's address in the certificate. Voters could vote again to change position or if they had added to their stake. The contract would refuse the ballot if the staking period wasn't as far out as the closing time. (Unless we have some ("urgent") votes that can end as soon as sufficient positive votes are received.)
For multiple choice, with a single outcome, Instant-Runoff (IRV) will be implemented first, and for multiple winners (like voting for members of a committee) Single Transferable Vote (STV). Other methods of counting have their proponents, sometimes very vocally.
Sometimes it makes sense to have a quorum. For electing rep's you usually don't, since you want to seat someone. For other questions, you might decide that if not enough people can be bothered to vote, then it wasn't important to make the change. The quorum needs to be pluggable in case we discover over time that it's hard to get people to vote. Many organizations ignore the quorum prescribed by their by-laws in order to be able to make progress, in the face of low participation.
Tasks (Updated 2021-12-15)
install-on-chain.js
withClaimRegistrar
Misc
Design sketch for ParameterController
How much legibility initially?
Legibility will be important for public votes that will directly cause changes, but aren't necessary in some of the early scenarios. We don't want to preclude legibility. Committee members don't need the same level of legibility support as public votes. Advisory votes don't require it either.
The text was updated successfully, but these errors were encountered: