[This replaces the previous post on statically increasing Quroum requirements; it is intended to spark discussion on optimal parametrization of the consensus curve before going on chain]
NIP-1: Dynamic Vote Quorum
Simple Summary
A dynamic quorum that adjusts as a function of for/against votes, allowing uncontested proposals to pass at a minimum defined quorum, while requiring higher assurance on contested proposals.
Abstract
This NIP proposes an update to the NounsDAOLogicV1
contract that replaces the static proposal.quorumVotes
with a dynamic quorum that adjusts based on the amount of opposition.
TODO: Decide on curve (linear, exponential, etc.)
Sample Quorum Calculation:
x = for_votes / (for_votes + against_votes)
if (x <= 0.5) {
return failed
}
min_quorum_bps = 1000
max_quorum_bps = 5000
quorum_bps = ((max_quorum_bps - min_quorum_bps) * (1 - x)) + min_quorum_bps
quorum = (quorum_bps * total_supply) / 10000
return for_votes >= quorum
Motivation
This is a step towards decentralization, offering improved security and partial mitigation of risks associated with vote accumulation by individual members, while keeping friction low for routine governance tasks.
A dynamic quorum integrates some aspects of optimistic governance (low friction on uncontroversial or ‘procedural’ proposals) by allowing uncontested proposals to pass at the current 10% quorum, while requiring higher assurance on contested proposals as a function of turnout/dissent.
//
[Note: min_quorum_bps + max_quorum_bps <= 10000]
using above function gives the following quorum minimums at given consensus thresholds-
(Consensus, Quorum) : (100%, 10%), (75%, 20%), (50%, 30%)
(consensus = for votes / (for + against votes)