Voting & Incentives

Gauge Voting

Gauge votes allocate liquidity incentives and earn the fees and incentives attached to the pools selected. On BNB, voters use veTOPAZ NFTs and LP gauges pay TOPAZ. On Robinhood Chain, Base, Ethereum and Arc, local xTOPAZ positions vote and LP gauges pay xTOPAZ.

Choose the network and voting position

Start at the voting overview, then choose a network. BNB voting uses a BNB veTOPAZ NFT. A spoke uses a stake in its own xTOPAZ voting vault. There is no single ballot that spends the same voting weight across different chains.

Spoke voting power equals staked shares. A newly funded position has a withdrawal date; voting does not extend that date, but adding funds can. Fees and incentives are claimed locally, including those owed to positions that have since closed. Spoke staking and voting.

Spoke voting and claims are enabled on Robinhood Chain, Base, Ethereum and Arc. Select a local xTOPAZ stake and that network's pools. The BNB walkthrough below applies to hub veTOPAZ NFTs.

Epochs at a glance

The protocol runs on weekly epochs. All voting, emissions, fees, and bribe accounting align to this clock.

ParameterValueDescription
Epoch length7 days (604,800 seconds)Thursday 00:00 UTC → Thursday 00:00 UTC.
Distribution windowFirst hour of each epochVote, depositManaged, withdrawManaged, reset, and poke are disabled while the protocol distributes the prior epoch's emissions.
Final-hour windowLast hour before epoch flipOnly whitelisted (approved) NFTs can vote during this final hour.
Max gauges per vote30Set by Voter.maxVotingNum; governance-adjustable.

How to vote

  1. 1Lock TOPAZ to receive a veTOPAZ NFT. See veTOPAZ Locks.
  2. 2Open Vote. Choose a network to reach its allocation page, which lists each pool's fees, incentives, total rewards, votes and vAPR (voting APR plus the rebase estimate). Spoke vAPR includes the BNB rebase estimate too, because xTOPAZ receives every rebase through its growing TOPAZ backing per share.
  3. 3Allocate your vote weight across up to 30 gauges. Weights are proportional, not absolute — entering 60 / 40 splits your NFT's voting power 60% to the first gauge and 40% to the second.
  4. 4Submit. The transaction goes to the Voter contract, which records your vote and updates gauge weights immediately.
  5. 5After the next epoch flip (Thursday 00:00 UTC), claim your share of trading fees and bribes from the FeesVotingReward and BribeVotingReward contracts of each gauge you voted for.
ℹCarry-over: unchanged votes persist
Once cast, your vote stays in effect epoch over epoch unless you change it. You don't need to recast each week to keep earning. To change allocation, simply call vote again in any subsequent epoch.

Reset, re-vote, and poke

Three operations exist for managing a vote over time:

  • ✓vote(...) — Cast or replace your vote. Allowed once per epoch, outside the first-hour distribution window. Whitelisted NFTs can also vote during the final-hour window.
  • reset() clears allocations from an earlier epoch and is blocked during the first-hour distribution window. It does not itself update lastVoted. Any following vote must independently satisfy the current voting gates.
  • ✓poke() — Refreshes the voting-weight snapshot for your NFT in all the reward contracts it's in. Useful if your locked amount changed (you added more TOPAZ, merged with another NFT, etc.) and you want the gauge to record the new weight immediately rather than at the next vote. Doesn't change which gauges you voted for, only the weight.

Who earns what

The clean separation between LPs and voters is the central design choice of ve(3,3):

Liquidity Providers (LPs)

Stake LP tokens or Slipstream NFTs in gauges and earn TOPAZ emissions on BNB or xTOPAZ emissions on spokes. The more votes a gauge receives, the more emissions flow to its LPs. LPs do not earn swap fees on staked positions — those flow to voters via the FeesVotingReward contract.

Voters (veTOPAZ on BNB, staked xTOPAZ on spokes)

Vote on local gauges and earn the fees routed from staked liquidity, the applicable unstaked Concentrated surcharge, and any incentives deposited by projects. Voters don't earn emissions directly — they direct where emissions flow. Both fees and incentives are claimable starting the epoch after they accrue.

Claiming rewards

Three types of rewards become claimable after each epoch flip:

  • ✓Trading fees from voted pools. Claim via Voter.claimFees(feeContracts[], tokens[][], tokenId).
  • ✓Bribes / incentives from voted pools. Claim via Voter.claimBribes(bribeContracts[], tokens[][], tokenId).
  • ✓Rebases on your veTOPAZ. Claim via RewardsDistributor.claim(tokenId) or claimMany(tokenIds[]). Auto-compounds for active locks.

The interface gathers available reward sources for review. Pool fee and incentive rewards do not have a general 50-epoch expiry. The rebase distributor’s 50-week processing bound is a per-call limit: a long backlog can require repeated claims. Before any merge or wrap burns an NFT, resolve rewards still keyed to that ID.

Vote delegation vs gauge voting

A common point of confusion: the delegate() function on VotingEscrow delegates governance voting power (used in ProtocolGovernor / EpochGovernor proposals) and is only available for permanent locks and managed NFTs. It does not delegate gauge votes. To delegate gauge voting, deposit your NFT into a managed NFT — see Managed Locks.

Continue reading