@tallyxyz/super-quorum
v1.0.5
Published
### NOTE: This contract is currently not audited. Do not use in production without an Audit.
Downloads
8
Readme
SuperQuorumGovernor Smart Contract
NOTE: This contract is currently not audited. Do not use in production without an Audit.
General Overview
The SuperQuorumGovernor
smart contract is an innovative extension of the standard governance model provided by OpenZeppelin. It introduces the concept of "Super Quorum" in governance proposals. This higher quorum threshold is designed to ensure that only proposals with substantial backing and consensus are approved, particularly in critical decision-making scenarios. The contract is developed in Solidity ^0.8.20 and is an integration of OpenZeppelin's governance contracts, including Governor, GovernorSettings, GovernorCountingSimple, GovernorStorage, GovernorVotes, GovernorVotesQuorumFraction, and GovernorTimelockControl.
Upgradeable Verision included
There are two folders for both a regular version that deploys with a constructore function, and a second version designed to be used in a clone factory that utilizes an initializer.
Goal of the New Addition
The GovernorVotesSuperQuorumFraction
module adds a robust layer to the governance process by implementing a super quorum threshold, which is significantly higher than the standard quorum. This addition is crucial for enhancing governance security and decision-making quality, especially for critical or sensitive proposals within decentralized organizations or protocols. By setting a higher consensus requirement, it ensures that critical decisions are made with a broader agreement among stakeholders, adding an extra layer of security and stability to the governance process.
Usage Examples and Why to Use It
Scenario: Critical Protocol Changes
In decentralized finance (DeFi) projects or other blockchain-based organizations, modifying core protocol parameters or upgrading smart contract logic are decisions that significantly impact the ecosystem. The SuperQuorumGovernor
is particularly useful in these scenarios as it ensures such critical proposals are approved only when there is an overwhelming consensus among the token holders, reflecting a wide and strong support.
Scenario: Emergency Decisions
In situations that require emergency measures, it is crucial that decisions are made swiftly but also have strong backing from the community to ensure they are in the collective interest of the stakeholders. The super quorum mechanism is ideal for these situations as it helps measure and ensure overwhelming support for such emergency actions.
Changes to the Code
The SuperQuorumGovernor
introduces several key modifications to the standard governance structure:
Super Quorum Threshold: A new variable
_superQuorumThreshold
is introduced to set the minimum votes required for a proposal to be considered successful under super quorum rules.State Function Override: The
state
function is overridden to include super quorum logic. Proposals now need to be not just active but also meet or exceed the super quorum threshold to be considered successful.New Events and Error Handling: The contract includes the
SuperQuorumNumeratorUpdated
event and theGovernorInvalidSuperQuorumFraction
error for handling updates and validations related to the super quorum threshold.
Conclusion
The SuperQuorumGovernor
contract is a significant enhancement to the governance process in decentralized systems. It introduces a mechanism that requires higher consensus for critical decisions, ensuring that major changes are made with broad community support. This approach adds an extra layer of security and stability, making it an essential tool for robust decentralized governance.
Tests
npx hardhat compile
npx hardhat test
Use it as package
npm add @tallyxyz/super-quorum
Import the standard contract:
import "@tallyxyz/contracts/standard/SuperQuorumGovernor.sol";
// as extension:
import "@tallyxyz/contracts/standard/extension/GovernorVotesSuperQuorumFraction.sol";
Using the upgradeable version:
import "@tallyxyz/contracts/upgradeable/SuperQuorumGovernorUpgradeable.sol";
// as extension:
import "@tallyxyz/contracts/upgradeable/extension/GovernorVotesSuperQuorumFractionUpgradeable.sol";
import the super governor !