Governance
Protocol Governance
Topaz has two governance contracts and a small set of admin roles. This page maps out who can change what, how proposals work, and what the upper bounds of governance authority are.
What governance can and can't do
The protocol itself — the AMM math, the lock mechanics, the emission schedule — is immutable once deployed. Governance does not upgrade core contracts. What governance can change is bounded by what each parameter setter explicitly allows:
- ✓Tail emission rate (±0.01 percentage points per epoch via EpochGovernor, within 0.01%–1% bounds).
- ✓Team rate — TOPAZ allocation to the team address, set by the team role and bounded at 0%–5% of emissions.
- ✓maxVotingNum — maximum gauges per veNFT vote (default 30).
- ✓Token whitelist — which tokens are eligible as incentive (bribe) rewards.
- ✓Managed NFT whitelist — which addresses can mint managed veNFTs.
- ✓Factory registry approvals — which pool / gauge / rewards factories are valid for new gauge creation.
ProtocolGovernor
Topaz's top-level governance contract is a lightly modified OpenZeppelin Governor. Key properties:
| Parameter | Value | Description |
|---|---|---|
| Voting power | veTOPAZ balance | Per-NFT, timestamp-based snapshots (EIP-6372 timestamp mode). |
| Quorum | Governance-set | Subject to standard Governor quorum logic. |
| Veto | Yes | A vetoer role can cancel proposals as a 51% attack mitigation. Designed for emergency use, not routine. |
| Proposal hash | Includes proposer address | Prevents griefing via frontrun of identical proposals. |
| Relay | Disabled | Governor cannot make arbitrary cross-contract calls outside its specified targets. |
Proposals follow the standard Governor lifecycle: propose → delay → vote → execute. Vote weight is captured at the proposal's snapshot timestamp, so locking after a proposal starts does not retroactively earn votes on that proposal.
EpochGovernor — the tail-rate nudge
A second, simpler Governor exists for one specific purpose: adjusting the tail emission rate by exactly one basis point per epoch. Once tail emissions activate, EpochGovernor lets voters choose each week whether to nudge the rate up, down, or hold.
- ✓One proposal per epoch — the protocol guarantees uniqueness via the epochStart-derived proposal hash.
- ✓Three options (up / down / hold), plurality wins. No quorum, no proposal threshold.
- ✓Effect bounded: NUDGE = 1 basis point per call (i.e. 0.01 percentage points).
- ✓Bounds enforced at the Minter: rate stays in 0.01% – 1% per epoch.
- ✓Proposals created in epoch n are executed in epoch n+1 after the voting period closes.
- ✓The very first nudge proposal must be initiated in the epoch before tail emissions activate.
Admin role map
A handful of permissioned roles exist alongside governance. They currently sit with the protocol multisig and its signers while on-chain governance activates. Every holder is readable on-chain and listed on the contracts page.
| Role | Powers |
|---|---|
| Governor | Whitelists tokens and NFTs for gauge creation, sets the max voting count, designates the allowed manager for managed veNFTs, and can reassign the governor and epoch-governor roles themselves. |
| Emergency Council | Can kill / revive gauges, deactivate managed NFTs, and toggle the split function. Cannot mint, change emission rate, or move user funds. |
| Fee Manager | Sets v2 and Slipstream base / custom swap fees up to their immutable 3% caps. For pools running the dynamic-fee module, configures the dynamic-fee parameters subject to that module's immutable 5% total-fee cap. Also configures unstaked-position fees and aggregator discounts. |
| Pauser | Holds exactly one control: the v2 PoolFactory's factory-wide swap pause, which blocks swaps across its v2 pools for incident response. Cannot transfer, seize, or modify user balances — v2 LP withdrawal stays open while swaps are paused, and Slipstream pools have no pause path at all. |
| Team | Receives the team-rate share of emissions and holds the protocol's foundation veTOPAZ. Sets the team rate itself, bounded by the immutable 5% cap, and sets the ve art proxy. |
| FactoryRegistry owner | Approves and un-approves pool, gauge and rewards factories, which is how new pool generations become available. Cannot force migration of existing pools. |
| Vetoer | Can cancel a ProtocolGovernor proposal as a 51%-attack guardrail. |
Proposal lifecycle in practice
- ✓Drafting: discussed openly in Telegram / GitHub before going on-chain. Aim for community consensus before submitting.
- ✓On-chain proposal: anyone meeting the proposal threshold can submit via ProtocolGovernor.propose().
- ✓Voting period: starts after the proposal delay, runs for a fixed window. Vote by NFT, not by address — large veTOPAZ NFTs cast a single vote with their entire weight.
- ✓Execute: if passing, the proposal becomes executable once the voting period closes.
- ✓Veto: if the proposal is found to be malicious or buggy during the window, the vetoer can cancel.
