Skip to content
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

Add new consensus governance voting mechanism specifying % of total stake needing to vote yes #4309

Closed
tjanez opened this issue Oct 15, 2021 · 3 comments · Fixed by #4428
Closed
Labels
c:breaking/consensus Category: breaking consensus changes c:governance Category: governance service

Comments

@tjanez
Copy link
Member

tjanez commented Oct 15, 2021

SUMMARY

Currently, there are two parameters controling consensus governance voting:

  • quorum (uint8: [0,100]) specifies the minimum percentage of voting power that needs to be cast on a proposal for the result to be valid.
  • threshold (uint8: [0,100]) specifies the minimum percentage of VoteYes votes in order for a proposal to be accepted.

Consider replacing both of those parameters with a single parameter (i.e. a new threshold) that would specify % of total stake (i.e. voting power) that needs to cast VoteYes votes in order for a proposal to be accepted.

ISSUE TYPE
  • Feature Idea
@tjanez tjanez added c:breaking/consensus Category: breaking consensus changes c:governance Category: governance service labels Oct 15, 2021
@kostko kostko added this to Planned in Core Future via automation Oct 20, 2021
@kostko kostko removed this from Planned in Core Future Nov 28, 2021
@Yawning
Copy link
Contributor

Yawning commented Jan 3, 2022

While I am ok with some fine tuning being possible, I would be extremely reluctant to allow the new parameter to be set to anything less than 2f + 1 of the total voting power available.

@kostko
Copy link
Member

kostko commented Jan 3, 2022

Yeah so currently we have a sanity check that ensures the product of quorum and threshold is >2/3:

// Quorum * threshold should be > 2/3
if (uint64(p.Quorum) * uint64(p.Threshold)) <= 6666 {
return fmt.Errorf("product of quorum and threshold should be at least 2/3")
}

I agree that we should keep enforcing this constraint.

@Yawning
Copy link
Contributor

Yawning commented Jan 10, 2022

I'm still not sure this is an amazing idea, because it doesn't improve on one of the problems of this design. It is really easy to meet both quorum + threshold or the new proposed stake_threshold targets when the validator set is small (and we currently allow consensus to operate with a rather small number of active validators).

What we probably really want is something along the lines of "minimum percentage of the total global stake (including nodes that are offline and not in the validator set) that needs to cast VoteYes`, but that has it's own set of problems (it is trivial to create situations where it is impossible to pass governance proposals).

Thoughts welcome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c:breaking/consensus Category: breaking consensus changes c:governance Category: governance service
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants