Skip to content

Voting model

Egor Lysenko edited this page Jan 14, 2021 · 3 revisions

Voting model

Options and opinions

Each proposal defines a list of options. Voter must provide a single opinion for each option during the voting for a proposal.

Opinion is recorded as a number within [0, number of opinions).

For example, let's consider an example proposal that has 3 options and the following opinion scales {0, 2, 3, 4, 5} to represent {strongly disagree, disagree, neutral, agree and strongly agree}.

A vote {0, 2, 4} from a voter has the following meaning: I strongly disagree (scale=0) with option 0, I'm neutral (scale=3) about option 1, I strongly agree (scale=5) with option 2.

If we also assume that voter had a weight=100.0, then he added the following agreement to a counter of each option: 0 * 100.0 / 5 = 0 for option 0, 3 * 100.0 / 5 = 60 for option 1, 5 * 100.0 / 5 = 100 for option 2.

That being said, the opinion scale defines an exact measure of agreement which voter may choose.

Delegations

Within a governable contract, voters can get delegations from other voters.

For every delegation and every proposal, the governance contract assumes that delegator contributes his weight to a vote of a voter he delegated to, unless delegator places his own vote for the proposal.

Voting tally

The following proposal's parameters define requirements for the proposal to get approved:

  • Minimum voting turnout (min. votes)
  • Minimum voting agreement
  • Minimum voting end time
  • Maximum voting end time

Minimum voting turnout is a minimum ratio of voted voters weight/total voters weight to perform the voting tally. Maximum voting end time is the earliest possible time to perform the voting tally. Minimum voting agreement is the minimum value of agreement counter/voted voters weight for an option to possibly win. Maximum voting end time is the time after which proposal will be finalized regardless of its turnout. If turnout is below minimum, proposal gets rejected.

If no option received an agreement ratio higher than Minimum voting agreement, then proposal gets rejected. Otherwise, an option with maximum agreement wins the election.

Check out proposal states for additional details.

Example

In the example, there's a proposal #450 with the following options: {"black", "dark-gray", "gray", "light-gray", "white", "bright white"}

Let's assume that there's 5 opinion scales {0, 1, 2, 3, 4} to represent {strongly disagree, disagree, neutral, agree and strongly agree}

If a voter has an intention to vote for proposal rejection, then he has to vote {0, 0, 0, 0, 0, 0}, which means "I strongly disagree with the whole proposal":

gov.vote(delegatedTo, 450, [0, 0, 0, 0, 0], {from: voter});

If a voter has an intention to support the "light-gray" option, then he may vote {1, 2, 3, 4, 3, 2}, which expresses a maximum support for the "light-gray" option, support for "gray" and "white", neutrality for "dark-gray" and "bright white", disagreement for "black".

The chosen choices should represent voter's position as accurately as possible, which means that the choices shouldn't be binary (i.e. a maximum support for just one option, and zero support for all other options), unless it's exactly what voter means to express.

If voters will scatter their support among many options, then none of them will receive a support above a minimum. Thus, votes shouldn't be binary.

Clone this wiki locally