VoteModule.balanceOf(owner), and votes are stored per owner address and per weekly period.
Core Functions
vote
owner into the next weekly period. The raw weights array is normalized against the owner’s current VoteModule balance, so it does not need to sum to a fixed constant.
The call can be made by:
owner- An approved delegate/admin recognized by
VoteModule AccessHub
reset
owner’s votes for the upcoming period.
poke
VoteModule are propagated into the stored next-period vote weights.
distribute
FeeCollector. When DLMM is configured and the target is a registered DLMMRewarder, it sends RAM to the rewarder, updates its streaming rate, and synchronizes the pool’s fee-routing state.
createGauge / createCLGauge
createDLMMRewarder
- Verifies the pool belongs to the configured
DLMMFactory - Collects any pre-rewarder protocol fees
- Deploys and links a beacon-proxy rewarder
- Creates the pool’s
FeeDistributor - Registers the pool/rewarder mappings
- Marks the rewarder alive and sets the pool’s gauged protocol share
claimIncentives / claimClGaugeRewards / claimRewards
Key Concepts
- Votes are recorded for
getPeriod() + 1, not the current period. vote()internally clears prior next-period votes before writing the new allocation.FeeDistributorbalances are keyed by owner address, which is whyVoterdeposits and withdraws vote weight there duringvote()andreset().distribute()coordinates both emissions and fee routing, making it one of the central weekly-maintenance flows in the system.- Whitelisting, gauge lifecycle changes, reward-validator configuration, and other privileged actions are gated through governance and
AccessHub. - DLMM users vote for the pool address; the associated
DLMMRewarderis the emission target stored ingaugeForPool. - A DLMM rewarder is a hook, not a
GaugeV3contract.
At the Robinhood snapshot at block 22,674,244, the DLMM factory reported a zero
voter() address, so these rewarder flows were not live there.