The primary attack Nouns DAO is worried about is someone passing a proposal to drain the treasury (currently at ~26K ETH). The last line of defense is the Nouns Foundation’s right to veto any proposal. The Nounders and Nouners (DAO members) seem aligned on the goal of turning this veto right off.
Dialectic wrote two great posts about this attack and potential mitigations, and from those ideas dynamic quorum bubbled up as the safest one to try first (credit to wag for first sharing the idea). Dynamic quorum is not meant to solve the biggest of attacks (e.g. malicious owner of 51% proposes to drain the treasury), but smaller versions which target voter apathy.
We wanted to share how the upcoming dynamic quorum upgrade works, the parameters the DAO needs to decide on, and a bit on what’s next.
Quorum is the minimal number of For votes a proposal must have to pass, currently set to 10% of total supply, e.g. as of August 22 2022 there are 417 Nouns, meaning a proposal created today would need at least 41 For votes to pass.
Dynamic quorum determines a proposal’s quorum as a function of its contentiousness; simply put: more against votes → higher quorum.
This will ensure a reasonable degree of agility on the DAO governance, where uncontested proposals will require a low quorum whereas highly contentious ones will require a higher quorum.
This proposal is a reasonable improvement overall compared to the fixed quorum in terms of scalability since it reduces the tradeoff space between friction and security. However, it’s still ineffective against a great dishonest majority voting power.
(Quotes from Dialectic’s 2nd post).
In its simplest form: every against vote increases quorum votes by one (we’ll complicate things later). Using the numbers above, a proposal with no against votes needs 41 for votes to pass; if it receives one against vote it would need 42 for votes, and if receives 10 against votes it would need 51 for votes to pass.
Launching dynamic quorum requires setting a few important parameters. We will start with briefly defining them, diving deeper later in this post.
The final values of these three parameters will be further discussed among DAO members, and will be visible as part of the proposal to upgrade the DAO contract. You’re invited to duplicate the simulation spreadsheet and tinker with the inputs, and see their impact on past proposals.
Next we’ll present some tinkering to help cultivate intuitions ahead of the on-chain configuration proposal.
Imagine you’ve submitted a Nouns DAO proposal and you want to advocate for it to be successful; you might consider the question “how many against votes are needed to defeat my proposal?”
In v1 (the current DAO logic) it looks like this:
As long as you’re below quorum, your proposal is defeated; once you have quorum (currently set to 10%) then for votes must exceed against votes for the proposal to succeed. In all the graphs in this section: above the line means defeated and below the line means successful.
We’ll now review v1 versus v2, tinkering with one parameter at a time to better understand their impact. We’ll start with a baseline configuration:
coefficient = 1; minimum quorum BPs = 1,000; maximum quorum BPs = 2,000
This graph helps visualize three distinct parts:
We’ll attempt to further explain dynamic quorum parameters through their impact on this graph’s shape.
Two charts with different minimum BPs values:
Increasing the value of minimum quorum BPs grows that space in the middle of the graph where proposals would be defeated in v2 despite being successful in v1, making it much easier to defeat proposals until the maximum quorum BPs point where v1 and v2 are both decided by simple majority. Decreasing minimum quorum BPs creates this cool new graph shape, where below v1 quorum (10%) it’s actually harder to defeat a proposal in v2.
Probably an initial value of 10% (1,000 BPs) will be acceptable to the DAO, as its preserving the current minimal quorum.
Two charts with different maximum BPs values:
Increasing maximum quorum BPs delays that point the graph where v2 reverts back to simple majority, prolonging that middle area where it’s easier to defeat proposals. Perhaps a useful question in setting this parameter is “when do we want to revert from dynamic quorum to simple majority?”
Important to note that the sum of both axis is the total participation rate, which has recently ranged between 14% and 38%. In the higher setting graph for example, we only revert back to simple majority at 30%+ against votes, meaning against votes are extra powerful until we hit a 60%+ participation rate, which is probably too high given current rates.
Say we’re targeting at 36% participation rate, it might make sense to set maximum quorum BPs to 18% (1800 bps).
max quorum BPs = participation rate / 2.
Two charts with different coefficient values:
Different coefficient change the shape of that famous middle section, with an obtuse triangle at 0.5, a parallelogram at 1, and an obtuse trapezoid at 2. Notice it pushes the v2 line down, making each against vote stronger, so less are required to defeat a proposal.
Probably setting coefficient around 1 is the easiest place to start, since it’s easiest to predict intuitively, because each against vote adds one quorum vote (up to the maximum limit).
Referring back to thinking in 3 parts:
Perhaps start by estimating a highest-realistic participation rate; maximum quorum BPs should probably be less than half that rate with a bit of a margin, otherwise with higher values the risk is minority holders stalling DAO decisions. Similarly consider by what participation rate should simple majority determine the outcome rather than the rising quorum.
Next perhaps consider whether a proposal with no against votes should be easier or harder to pass compared to today with v1. It might also be useful to think of minimum quorum BPs as a reflection of whether the DAO leans more towards yes or more towards no given a proposal that has passed the proposal threshold, which is currently configured to 25 BPs or one vote.
The coefficient parameter seems most intuitively understood as how many quorum votes should each against vote add. The value one seems intuitive as it’s easiest to predict without a spreadsheet, however it’s worth considering further, perhaps by asking how much power do you think should a minority have to deter proposals. Important to highlight that the coefficient can be set to odd values like 1.3 or 0.75.
Ultimately, our hope is to achieve a higher rate of consensus on successful proposals.
We are aware of other governance systems that employ dynamic inputs:
As far as we’re aware, this is the first implementation of dynamic quorum as a function of contentiousness. If this experiment is successful for Nouns, we believe it could become a public good useful for other DAOs.
In the next few weeks the code4rena audit results will come in, and we will address any bugs or other issues we might have missed. Once we’ve handled the contest feedback and received the final audit report, we’ll update the DAO with plans to deploy this change to mainnet.
Beyond dynamic quorum, we will continue doing research on the path to disabling veto, including ideas like defending against last-minute vote swings, making malicious proposal more expensive, and more to come.
We’re excited to continue exploring this design space of DAO resilience!