Replies: 2 comments
-
this is a really great spec. memorializing some of our discussion yesterday, structurally, to get around this gas issue we likely either need to:
|
Beta Was this translation helpful? Give feedback.
0 replies
-
we've come up with a spec for gas-efficent voting which can be found here: https://gist.github.com/0xekez/e4d3ff76bf76f052af1a8768231831aa |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
How does ranked choice voting work?
in order of preference.
with the fewest first-preference votes is eliminated, and for whomever ranked that choice first, their second-choice votes are promoted to first-choice.
Then if there is a candidate with the first-preference majority, this procedure will be repeated until a winner is found (or none is found).
How shall we implement this?
After some deliberation, I think it makes the most sense to introduce a new proposal module for this change. Introducing ranked choice as a new voting strategy in the existing multiple choice proposal module will require changing the existing vote data structures and passing / rejection logic in a way that will introduce too much unnecessary confusion. The multiple choice module has also already been audited so it is preferred to not make major changes and there is little cost to introducing a new proposal module.
Proposed Design: Implement a new ranked choice proposal module
How will ranked preferences be indicated to the module?
How will we keep track of the vote counts for each rank?
How will is_passed and is_rejected change? Will we be able to declare proposal status early?
Will there be a quorum?
How will is_passed work?
a. If the proposal is expired:
Find the option with the least first-preference votes and eliminate this option (e.g. flag it as such). For all ballots which have marked this option as first preference, elevate their second preferences to first. OPEN QUESTION HERE: HOW DO WE DO THIS EFFICIENTLY? CAN WE STORE THIS DATA IN SOME WAY SUCH THAT WE DON'T HAVE TO LOAD ALL BALLOTS? Repeat step 1.
b. If the proposal is not expired:
If there is no majority winner in the first round, we cannot make a conclusion until more votes are cast.
How will is_rejected work?
Note: the passing and rejection logic is obviously complicated will require very careful consideration of all edge cases.
Beta Was this translation helpful? Give feedback.
All reactions