TopazDocs

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.
Immutable core
AMM curves, voting power decay math, lock periods, fee caps, tail rate bounds, factory contracts themselves — these are immutable. New factories can be registered to enable new pool types, but existing pools cannot be retroactively changed. Migration is opt-in by LPs and voters, never forced.

ProtocolGovernor

Topaz's top-level governance contract is a lightly modified OpenZeppelin Governor. Key properties:

ParameterValueDescription
Voting powerveTOPAZ balancePer-NFT, timestamp-based snapshots (EIP-6372 timestamp mode).
QuorumGovernance-setSubject to standard Governor quorum logic.
VetoYesA vetoer role can cancel proposals as a 51% attack mitigation. Designed for emergency use, not routine.
Proposal hashIncludes proposer addressPrevents griefing via frontrun of identical proposals.
RelayDisabledGovernor 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.

Activation in progress
ProtocolGovernor is deployed and reads voting power from veTOPAZ. It is designed to hold the governor role once on-chain governance activates; until then, the parameters above are administered by the multisig.

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.
Pre-tail behavior
EpochGovernor only operates once tail emissions are active. Until then, the emission schedule follows its fixed growth/decay curve and EpochGovernor is dormant. Phase-2 decay ends when weekly emissions drop below 8,969,150 TOPAZ — that's when EpochGovernor activates. See TOPAZ & Emissions for the full schedule.
Activation in progress
As with ProtocolGovernor, EpochGovernor is designed to hold the epoch-governor role ahead of tail emissions going live.

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.

RolePowers
GovernorWhitelists 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 CouncilCan kill / revive gauges, deactivate managed NFTs, and toggle the split function. Cannot mint, change emission rate, or move user funds.
Fee ManagerSets 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.
PauserHolds 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.
TeamReceives 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 ownerApproves and un-approves pool, gauge and rewards factories, which is how new pool generations become available. Cannot force migration of existing pools.
VetoerCan 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.

Continue reading