decred / politeia

ISC License
110 stars 75 forks source link

[d/www/gui] Add multiple choice proposals #664

Closed marcopeereboom closed 4 years ago

marcopeereboom commented 5 years ago

We need the ability to vote on multiple-choice proposals. These proposals need to offer the user the ability to choose an option and an explicit "against" vote. E.g. 1 Send marco 100DCR 2 Send marco 1000DCR 3 Screw marco

We must have a NO condition (typically the last bit). Bits must be sequential (like 0b1110 is a valid mask and 0b1010 is not). Not voting is an abstain.

We have similar code for this in dcrd and ideas/code can be lifted from here: https://github.com/decred/dcrd/blob/master/blockchain/votebits_test.go https://github.com/decred/dcrd/blob/master/blockchain/thresholdstate.go#L329 https://github.com/decred/dcrd/blob/master/blockchain/votebits.go#L96

raedah commented 5 years ago

For multiple choice votes use https://en.wikipedia.org/wiki/Instant-runoff_voting which allows voters to rank their choices in order of preference so that the https://en.wikipedia.org/wiki/Spoiler_effect can be avoided. Video explanation here https://www.youtube.com/watch?v=3Y3jE3B8HsE

xaur commented 5 years ago

Multiple choice voting is broad spectrum of use cases.

For a special subset of budget voting cases we can have a strictly ordered set of choices, e.g. "Give Marco (0, 10, 100, 1000) DCR". Vote for a choice also votes for all "smaller" choices. The biggest choice to break quorum wins.

This is different from IRV in that the ordering is the same for all voters. At a quick 1 minute glance at Wikipedia this eliminates the spoiler effect entirely, unlike IRV which only reduces it. When it doesn't make sense to fund a proposal by less than X amount of money, the choice after zero must be the minimum amount that makes sense, e.g. "Give Marco (0, 1000, 1500, 2000) DCR".

Other cases where it's impossible to define a strict order a vulnerable to voter fragmentation (disorganization) that must be minimized by researching voting models like linked instant-runoff voting.

Multiple choice voting allows us to implement a second phase of RPF-like process (#558).

degeri commented 5 years ago

Agree with @raedah on Instant runoff voting. But like bee said we can also have special types of votes when it comes to budgeting.

So two types of multiple choice questions.

  1. Who do we give DCR to ?

Marco Degeri Bee

  1. How much DCR should be given to xyz ?

Send 10 DCR Send 100 DCR Send 500 DCR Send 1000 DCR.

lukebp commented 5 years ago

The method for calculating vote results that was introduced in #819 will need to be updated once support for multiple voting options is added.

xaur commented 5 years ago

Interesting possible issue with multiple choice votes was highlighted by @RichardRed0x in April Journal:

AE token holders will vote for 0, 5, 10, 15 or 20% of the block rewards to go to this foundation - as long as more than 50% of AE votes for a share greater than 0%, the percentage will be set using a weighted average of the votes for options greater than 0%. This will leave some AE holders who don’t want the block reward funding with a difficult choice of whether to vote for 0% and hope to be in the majority (and otherwise be ignored) or to vote for 5% to lower the weighted average in the case that the proposal is approved.

marcopeereboom commented 5 years ago

We are not going to do multiple multiple-choice votes. You guys are nuts, the amount of code and corner cases is endless. This is getting pretty meta.

lukebp commented 4 years ago

This has been closed by the addition of runoff votes in #1054.