[RFC] Set Quorum to 40% of votable supply

We wanted to start a discussion on setting the quorum to achieve maximum governance security while still allowing votes to pass.

After SIP0 the quorum is set to 35% of delegated supply (“votable supply”) or 112.35M tokens.

This means that the top 2 delegates can pass proposals.

While this allows proposals to pass with ease, it only takes two concerted “wrench attacks” or compromised multisigs to “hack” governance.

We propose setting the quorum to 128.4M $SUMR or 40% of delegated supply to ensure that it takes at least a third delegate to pass a proposal.

This post is intended to spark a discussion; we’re not committed to putting this on-chain yet.

2 Likes

This makes sense. We had 308.22M votes come in for these first couple votes. I don’t see a problem with increasing quorum to 40%.

2 Likes

Given the turnaround for the two votes we had, why not something even higher (like 50%) ?
Stakers are incentivized to vote, hence there should be no issue with having quorum.

1 Like

We thought about that but decided against it to make it easier for a dedicated group of smaller delegates and token holders to pass a proposal even without or against the larger delegates.

Open to 50% as well if there is broader support.

To avoid having this same discussion every other month, I would support a general rule for updating quorum to always require 3+ delegates.

For now that means 40%, but when there would be significant changes in delegated tokens, anyone would be able to propose a new vote to update it to be in-line with the 3+ delegate rule (max 1 vote per month or something like that).

3 Likes

I love that! This would need to be a social contract of sorts, since it’s hard to encode in a smart contract.

But I support this notion.

1 Like

I fully support the proposal to set the quorum to 40/50%, but I also want to highlight Frank’s comment.

Voting for quorum on a daily basis will be exhausting for everyone, so I wonder what other alternatives we have. @0xtucks I’d love to hear your opinion on the technical side on implementing something like a 3-delegate rule. Or what other alternatives we have.

1 Like

Hi Javier,

I suggest this not as a technical enforce, but rather as an addition/update to SIP0, and thereby making it part of the governance processes.

1 Like

If this can be dynamic even better. We’ll wait for clarity here before moving this to a formal SIP.

Agree

@FBrinkkemper, I believe you already have something quite clear in your mind. Would you draft it, and we can comment on it if neccesary?

We would love to have this automated if possible. Something like: set to 40% of votable supply, or to 10% more than top two delegates combined…

Is that doable from a smart contract perspective?

IndexCoop had an interesting idea for a dynamic quorum.
Quorum is lower for proposals that are uncontentious, but as soon as the ratio of yes/no votes decreases it rises.

The rationale there being that a contentious vote needs more support to be ratified since the community isn’t unanimously in favor.

There’s a top and bottom boundary, which can be set to sensible values.

Imo this should be implementable in a smart contract, it’s simple math around parameters that are known anyhow.

Original post here: IIP-153: Implement Dynamic Quorum for Metagovernance - Proposal - The Index Coop

Tagging @Javier and @FBrinkkemper for input here.

2 Likes

These are all good ideas.

Given quorum is calculated as a % of the total supply. This will require fairly frequent updates to keep aligned.

Perhaps we can set a cadence here where quorum is set to the maximum of say 40% of delegated tokens or 10% over the top of the two largest delegates.

As of today (19/03/2025):

  • 40% of delegated tokens = 130.58M
  • The top two delegates plus 10% = 140.91M

So, we’d take 140.91 as the quorum threshold. Current supply is 975.13M due to bridged SUMR.

So, the quorum % would be 140.91 / 975.13 = 14.45% (up from 4%)

I’m happy to create these proposals according to these rules short term. And can automate it fairly.

Lmk thoughts.

@rspa_StableLab I don’t think 50% is unreasonable given we’re consistently seeing proposals passing with north of 200M participating votes.

2 Likes

Yeah I think 40% plus 10% seems the most inclusive. We’ll work to get this on-chain next week. We can update the quorum quarterly. I think that’s sufficient.

2 Likes

Thanks for the discussion, @0xtucks and @rspa_StableLab!

Given the calculations, I agree that the updated quorum threshold should be 140.91M / 975.13M = 14.45%. Since the quorum denominator is 100, the closest possible quorum numerator must be either 14 or 15??.

https://basescan.org/address/0xbe5a4dd68c3526f32b454fe28c9909ca0601e9fa#readContract

I believe to reflect the intended 14.45%, 15 would be the closest rounding since we usually have quite a lot of votes, effectively setting quorum at 15% instead of 14.45%. If we round down to 14, we’d technically be slightly below the target.

Would love to get final confirmation on which way we prefer to round, but either way, I’m aligned with the new quorum adjustment and the quarterly updates!

@0xtucks @rspa_StableLab I’m ready to push this proposal onchain.
James please check if it’s correct.

I will propose newQuorumNumerator to 15 on https://basescan.org/address/0xbe5a4dd68c3526f32b454fe28c9909ca0601e9fa

Simulation:

1 Like

Let’s do it! Thank you ser for taking this across the finish line :chequered_flag:

1 Like

Looks good. Thank you for arranging. @Javier

1 Like

The proposal is now on-chain: Tally | Lazy Summer DAO (Official) | SIP 0.1: Quorum Update

1 Like

Please don’t be alarmed by the tenderly simulation failing.

The issue lies with the manner in which Tally simulation proposal execution.

The simulation is executed from the perspective of the timelock which for 90% of proposals is just fine.

However, when targeting the governor contract a crucial step is missed.

Assuming the proposal is successful. The execute method on the Governor contract will be called. In the body of this method, calldata is hashed and added to an array on the Governor contract.

       if (_executor() != address(this)) {
            for (uint256 i = 0; i < targets.length; ++i) {
                if (targets[i] == address(this)) {
                    _governanceCall.pushBack(keccak256(calldatas[i]));
                }
            }
        }

When the timelock then executes the queued proposal, and targets the Governor, calldata is retrieved from array and matched with the calldata being passed by the timelock.

      if (_executor() != address(this)) {
            bytes32 msgDataHash = keccak256(_msgData());
            // loop until popping the expected operation - throw if deque is empty (operation not authorized)
            while (_governanceCall.popFront() != msgDataHash) {}
        }

It’s an additional layer of security when making updates to the SummerGovernor.

Secondly, it’s tricky for Tally to set this up as part of their tenderly simulations. It would require them to have specific handling for Governor targeted Timelock executed setups. Would require:

  • the use of testnets where the proposal is forced queued
  • and time jumped to when the proposal is eligible for execution
  • and the simulation would need call into the governor, and not the timelock, for the specific transaction
2 Likes