Add Proposal Guardian to Governor Bravo
01Summary
Implement a Proposal Guardian role using the Community Multi-sig (4/8) to veto malicious governance proposals that have passed voting but await execution. The guardian can only cancel proposals and will expire after 6 months, requiring renewal via governance vote. Also introduces vote with reason and propose by signature features. OpenZeppelin audit found minimal issues.
- Type
- governance change
Key changes
- Add proposalGuardian role (Community Multi-sig 0xbbf3f1421D886E9b2c5D716B5192aC998af2012c) with power to cancel any proposal that has passed voting but not yet executed(high)
- Set automatic expiration for proposalGuardian role at timestamp 1739768400 (approximately 6 months from proposal), requiring governance vote to renew(high)
- Establish veto rules: (1) protect user funds, (2) prevent single entity control, (3) coordinate emergency protocol pauses, (4) consider 400K+ NO votes(high)
- Add vote with reason and propose by signature functionality to Governor Bravo(medium)
- Upgrade implementation contract to 0x6F6e4785c97885d26466945055d4Ae8931bE6f7a(medium)
Notable concerns
- Proposal Guardian could veto proposals to replace itself while still active
- OpenZeppelin audit identified low severity issue: _setProposalGuardian has no on-chain validation for reasonable expiry limits, relies on governance scrutiny
- Guardian role carries substantial privileges and concentration of veto power in 4/8 multisig despite distribution efforts
- Trust assumption depends on Community Multi-sig members remaining non-compromised and acting in DAO interests
- Active community engagement required to monitor for guardian misuse
Generated by Kvorum
02Description
Add Proposal Guardian to Governor Bravo
Summary
We propose to seek implementation of the community multisig to be used as a guardian for Compound Governance. The goal of this Proposal Guardian is to act as a last defense against any malicious governance votes in the future. Additionally, we propose a few future changes to the Compound Governor contract to be more robust in the future.
Proposal Guardian
The Proposal Guardian would initially consist of the Community Multi-sig (0xbbf3f1421D886E9b2c5D716B5192aC998af2012c), a 4/8 multi-sig composed of trusted Compound DAO community members (here) which has been functioning as the Pause Guardian for the majority of Compound’s existence. This Proposal Guardian role should only be able to veto a proposal that has passed a majority vote and is awaiting execution. We have established this set of rules for when the Proposal Guardian is able to choose to move forward with a veto:
- Users’ funds deposited into the protocol might be infringed or at risk by a proposal passing
- If a vote has been controlled by a single entity or a proposal will result in a single entity taking effective control of the DAO
- When necessary to coordinate pausing protocol functionality during urgent security emergencies to protect the protocol and user funds.
- Serious considerations will be made when votes having received at least 400K “NO” votes still pass. Update: Based on community feedback, the Proposal Guardian role will automatically expire to ensure that the Community Multi-sig cannot use its veto power to remain in-place indefinitely. The initial expiration period will be set to 6 months and require another governance proposal to renew. The additional changes are currently underway and will be ready to share and include in the on-chain proposal and forum post by this Friday.
Technical Implementation
@Arr00 has completed technical work and OpenZeppelin has reviewed the changes to implement the Guardian changes in PR16. It introduces a new proposalGuardian role that can call the cancel function on any proposal and a _setProposalGuardian function to set the role. The PR also includes simulation tests to ensure the changes work as expected on-chain.
Please note that the compound-governance repo being used as the base for this upgrade was previously audited by OpenZeppelin as a new source for Compound governance with dedicated testing and coverage. It also introduces the ability to vote with reason and propose by signature.
Timeline
Given the nature and sensitivity of this proposal, we will be moving forward in an accelerated timeline. The proposal will be discussed on the Community Call this week on Aug 7th and shared privately with all major identified delegates to collect final feedback. The proposal will then be published on the forums and submitted on-chain Friday, Aug 9th so that voting can begin early next week.
Future
A full “Constitution” regarding when to get involved in veto votes will be drafted in the near future. Coupled with a concurrent new delegate race to get more Compound delegated and active in governance to trusted members of the DAO, this should set a new foundation for a more secure and active Compound governance! Additionally, we propose exploring additional changes to Compound Governance to improve security and coordination in the future:
- Upgrade Compound Governor Bravo to use OpenZeppelin Governor that has more gas efficiency, security features and optional extensions. There is already a CGP grant by ScopeLift working on delivering this.
- Late Quorum Voting Period: If last minute votes change the outcome of a vote, additional time will be added on to the voting period to allow for more delegates to review and finalize decisions. A Late Qurum Prevention extension is already available in OpenZeppelin Governor.
- Adaptable Voting Quorum: Quorum can increase based on the amount of delegated COMP once a proposal shifts from "review --> voting". If not technically feasible to automate on-chain, this could also be achieved by regularly adjusting the quorum threshold based on the current number of delegated COMP.
- Delegation Rights for COMP Staking Product: Ensure that the Compound Staking Product proposed by the Compound Growth Program preserves delegation rights and helps to further align COMP token holder incentives with responsible governance participation. This is already referenced as a requirement in the recent Staked COMP Design forum post.
Compound Governance Proposal Guardian Audit
OpenZeppelin, in its role as Security Partner to the Compound DAO, audited the changes to include a Proposal Guardian into the Governance contracts proposed by @PGov and developed by @arr00.
Summary:
Aug 7th - Aug 9, 2024 Total Issues: 2 (1 resolved) Notes & Additional Information: 1 (1 resolved)
Scope
We audited the compound-governance repository at commit e3b36ad with a focus on the differences since our last audit.
After the initial report, we were asked to also audit the updates to the repository at commit 84dff8d, introducing expiration for the proposalGuardian.
In scope were the following files:
contracts
├── GovernorBravoDelegate.sol
└── GovernorBravoInterfaces.sol
System Overview
Compound Governance is the main protocol used by holders and delegates of COMP to govern Compound II and III. It gives them the power to propose, vote, and implement changes to both active Compound protocols. The governance system has control over several systems across the protocol such as each proxy, the Configurator, Comet factory, and Comet.
When a proposal to update any system parameters succeeds, the Timelock will call all of the relevant methods on the Configurator contract. For Compound III this process is followed by invoking the deployAndUpgradeTo method on the CometProxyAdmin contract, which then points to the new implementation upon execution.
In this audit, we focused on the new role of the proposalGuardian and the modifications made to the logic of the cancel function. The holder of this role will be allowed to cancel any proposal as if they were the proposer themselves. Apart from this update, no other no other significant alterations were made to the cancel function that would impact its execution.
In the second part of the audit, our focus remained on the proposalGuardian role, specifically examining the new logic introduced in the _setProposalGuardian function. This modification allows the guardian’s role to have an expiration, enabling a time-limited tenure for this position.
Security Model and Trust Assumptions
The addition of a proposalGuardian with the power to cancel any proposal that has not yet been executed introduces important security considerations and trust assumptions that must be addressed to maintain the integrity of Compound's governance. To prevent misuse of this veto power and ensure the robustness of the protocol, the proposalGuardian must be a trusted entity without centralized control.
It is assumed that the proposalGuardian will be a reputable and accountable entity managed by a multisig of trusted community members, to distribute veto power and reduce the risk of malicious actions, such as canceling proposals beneficial to Compound, not vetoing dangerous proposals for the protocol, or vetoing proposals to change the proposalGuardian. Ensuring the proposalGuardian is correctly configured during deployment, regularly monitored, and assigned a strict expiration is crucial for maintaining its effectiveness.
Active community engagement and oversight are essential to ensure that the proposalGuardian aligns with the DAO's goals and acts in the community's best interests. This engagement allows the community to flag any misuse of power, enabling the DAO to propose replacing the proposalGuardian if necessary. It is worth noting that proposals to transfer the role to another account, while the current role is still active, can be vetoed by the current proposalGuardian.
Low Severity
_setProposalGuardian Should Limit the Expiry
Currently _setProposalGuardian has no restrictions on how long a proposalGuardian can hold their role. If proposalGuardian were to ever be compromised and can hold the role for the next 2 years, they would be able to veto all proposals until those 2 years are up. Although _setProposalGuardian is set by governance and to a trusted multisig, we believe it would be more secure validating the expiry to be within reasonable limits, including that the expiration is in the future.
Consider adding a restriction to _setProposalGuardian that would check that newProposalGuardian.expiration is in the future and within reasonable limits, for example less than or equal to 6 months.
Update: Acknowledged, not resolved. @cylon stated:
This is a reasonable change but given the time sensitivity of getting this upgrade completed, I think its better to proceed without addressing it. The proposal performing this upgrade will be setting the initial timestamp expiry and can be scrutinized by governance to ensure it is no longer than 6 months and is set in the future. This issue can then be addressed in the code itself by the upgrade to OpenZeppelin Governor by the ScopeLift team.
Notes & Additional Information
Incomplete Function Documentation and Comments
The function cancel has been updated to allow cancellation of yet-to-be-executed proposals under the following conditions:
- the sender is the
proposal.proposer - the sender is the
proposalGuardian - the
proposal.proposeris not whitelisted and the proposer votes are below theproposalThreshold - the
proposal.proposeris whitelisted, the proposer votes are below theproposalThresholdand the sender is thewhitelistGuardianHowever, the function'snoticedocstring, as well as the inline comments, are not updated to reflect the introduction of aproposalGuardian. We recommend the following updates:
noticedocstring: Updated thenoticedocstring to include that the function cancels a proposal if the sender is the proposer or theproposalGuardian.- Line 382 Comment: Updated the comment on line 382 to highlight that the
proposalGuardiancan cancel any proposal, - Line 389 Comment: Updated the comment on line 389 to explicitly state that only the
whitelistGuardiancan cancel a proposal by a whitelisted proposer if it falls below the proposal threshold. Update: Resolved in commit 8340937.
Conclusion
The new addition of the proposal guardian to the Compound Governance contracts is minimally invasive and has been effectively implemented. However, this role carries substantial privileges, notably the ability to cancel proposals, including those that involve transferring the role itself to another account. Caution should be exercised in assigning this role and determining its duration. To bolster the long-term robustness and resilience of the protocol and to safeguard its decentralization, it is crucial to continue exploring more long-term solutions.
Forum Post
03Mismatch analysis
The proposal describes two concrete on-chain changes: (1) upgrading the Governor Bravo implementation to add a proposalGuardian role, and (2) setting that role to the Community Multi-sig with a ~6-month expiration. The decoded calldata contains exactly these two actions: an _setImplementation call pointing the Governor proxy to a new implementation contract (the mechanical step needed to deploy the PR16 code, explicitly referenced in the 'Technical Implementation' section), and a _setProposalGuardian call assigning the same Community Multi-sig address quoted in the description, with an expiration (~Feb 17, 2025) that is a close match to the '6 months' claim given a proposal submission date of Aug 9, 2024. No numeric values, target addresses, or recipients diverge between the prose and the calldata, and no undisclosed transfers, role grants to unexpected parties, or extra actions are present. The implementation-upgrade action itself is not named explicitly in the summary but is clearly implied by the 'Technical Implementation' section discussing PR16 and the underlying contract changes, so this is treated as legitimate summarization rather than an omission. Overall the description accurately and completely reflects the on-chain actions.
Generated by Kvorum
04Actions
- Target
- 0xc0da…6529
- Value
- 0 wei
- Function
- _setImplementation(address)
- Arguments
{ "implementation_": "0x6F6e4785c97885d26466945055d4Ae8931bE6f7a" }- Calldata
- Target
- 0xc0da…6529
- Value
- 0 wei
- Function
- _setProposalGuardian((address,uint96))
- Arguments
{ "newProposalGuardian": [ "0xbbf3f1421D886E9b2c5D716B5192aC998af2012c", "1739768400" ] }- Calldata
05Tally
Summed from votes
06Voters
No votes recorded yet.
07Forum
- Community Multisig Deployment ↗discourse · high confidence
- Compound Governance Proposal Guardian ↗discourse · high confidence
- [AlphaGrowth] Stake Compound Product ↗discourse · high confidence
Arguments for
None surfaced.
Arguments against
None surfaced.
Notable participants
- arr00Core steward of the Community Multisig, initiated its deployment and managed signer changes throughout.
- calvinProvided initial documentation and updates on the multisig deployment and signer confirmations.
- gettyConfirmed multisig members' comfort with additional responsibilities before governance vote.
- adamDocumented and tracked multisig membership changes and signer updates.
- PGovParticipated in recent multisig membership reevaluation and provided detailed status updates.
- jbass-ozAnnounced addition of ChainSecurity and Certora as signers and threshold increment.
- blckOriginal multisig signer who confirmed acceptance of responsibilities.
- TennisBowlingCommunity member who replaced aaaaaaaaaaaaa and later was removed during membership reevaluation.
Generated by Kvorum
08Similar proposals
- compoundexecutedExtend Proposal Guardian Role for the Community Multisig79%
- compoundexecutedCompound Governor Contracts Upgrade79%
- compoundexecutedRenew Proposal Guardian Role for the Community Multisig78%
- compoundexecutedRenew Proposal Guardian Role for the Community Multisig77%
- compoundcanceledThis proposal will upgrade Compound's GovernorBravoDelegator and GovernorBravoDelegate contracts. We'll use the latest contracts from OpenZeppelin(OZ) library with some modifications to preserve many…76%
- compoundexecutedMigration to Governor Bravo75%
- compounddefeatedCompound Governor Bravo Update68%
- compoundexecutedGovernance Analysis Period67%
- compoundcanceledLower Proposal Threshold to 10K COMP66%
- compoundexecutedLower Proposal Threshold to 25K COMP66%