Voter

contracts/wombat-governance/gauge/Voter.sol

Notice: Voter can handle gauge voting. WOM rewards are distributed to different gauges (MasterWombat->LpToken pair) according to the base allocation & voting weights. veWOM holders can participate in gauge voting to determine voteAllocation() of the WOM emission. They can allocate their vote (1 veWOM = 1 vote) to one or more gauges. WOM accumulation to a gauge is proportional to the amount of vote it receives. Real-time WOM accumulation and epoch-based WOM distribution: Voting gauges accumulates WOM seconds by seconds according to the voting weight. When a user applies new allocation for their votes, accumulation rate of WOM of the gauge updates immediately. Note that only whitelisted gauges are able to accumulate WOM from users' votes. Accumulated WOM is distributed to LP in the next epoch at an even rate. 1 epoch last for 7 days. Base Allocation: baseAllocation of WOM emissions is distributed to gauges according to the allocation by owner. Other WOM emissions are deteremined by votes of veWOM holders. Flow to distribute reward: 1. Voter.distribute(lpToken) is called 2. WOM index (baseIndex and voteIndex) is updated and corresponding WOM accumulated over this period (GaugeInfo.claimable) is updated. 3. At the beginning of each epoch, GaugeInfo.claimable amount of WOM is sent to the respective gauge via MasterWombat.notifyRewardAmount(IERC20 _lpToken, uint256 _amount) 4. MasterWombat will update the corresponding pool.rewardRate and pool.periodFinish Bribe Bribe is natively supported by Voter. Third Party protocols can bribe to attract more votes from veWOM holders to increase WOM emissions to their tokens. Flow of bribe: 1. When users vote/unvote, bribe.onVote is called. The bribe contract works similar to MultiRewarderPerSec. Note: This should also works with boosted pool. But it doesn't work with interest rate model Note 2: Please refer to the comment of MasterWombatV3.notifyRewardAmount for front-running risk

event DistributeReward

***Voter.DistributeReward(lpToken, amount) ***

Arguments

name

type

description

lpToken

address

not indexed

amount

uint256

not indexed

event Initialized

***Voter.Initialized(version) ***

Details: Triggered when the contract has been initialized or reinitialized.

Arguments

name

type

description

version

uint8

not indexed

event OwnershipTransferred

***Voter.OwnershipTransferred(previousOwner, newOwner) ***

Arguments

name

type

description

previousOwner

address

indexed

newOwner

address

indexed

event Paused

***Voter.Paused(account) ***

Details: Emitted when the pause is triggered by account.

Arguments

name

type

description

account

address

not indexed

event Unpaused

***Voter.Unpaused(account) ***

Details: Emitted when the pause is lifted by account.

Arguments

name

type

description

account

address

not indexed

event UpdateEmissionPartition

***Voter.UpdateEmissionPartition(baseAllocation, votePartition) ***

Arguments

name

type

description

baseAllocation

uint256

not indexed

votePartition

uint256

not indexed

event UpdateVote

***Voter.UpdateVote(user, lpToken, amount) ***

Arguments

name

type

description

user

address

not indexed

lpToken

address

not indexed

amount

uint256

not indexed

function add

***Voter.add(_gaugeManager, _lpToken, _bribe) ***

Notice: Add LP token into the Voter

Arguments

name

type

description

_gaugeManager

address

_lpToken

address

_bribe

address

function baseAllocation

Voter.baseAllocation() view

Outputs

name

type

description

uint16

function baseIndex

Voter.baseIndex() view

Outputs

name

type

description

uint104

function claimBribes

***Voter.claimBribes(_lpTokens) ***

Notice: Claim bribes for LP tokens

Details: This function looks safe from re-entrancy attack

Arguments

name

type

description

_lpTokens

address[]

Outputs

name

type

description

bribeRewards

uint256[][]

function distribute

***Voter.distribute(_lpToken) ***

Details: This function looks safe from re-entrancy attack

Arguments

name

type

description

_lpToken

address

function emergencyWomWithdraw

***Voter.emergencyWomWithdraw() ***

Notice: In case we need to manually migrate WOM funds from Voter Sends all remaining wom from the contract to the owner

function firstEpochStartTime

Voter.firstEpochStartTime() view

Outputs

name

type

description

uint40

function getUserVotes

Voter.getUserVotes(_user, _lpToken) view

Notice: getter function to return vote of a LP token for a user

Arguments

name

type

description

_user

address

_lpToken

address

Outputs

name

type

description

uint256

function infos

Voter.infos() view

Arguments

name

type

description

address

Outputs

name

type

description

supplyBaseIndex

uint104

supplyVoteIndex

uint104

nextEpochStartTime

uint40

claimable

uint128

whitelist

bool

gaugeManager

address

bribe

address

function initialize

***Voter.initialize(_wom, _veWom, _womPerSec, _startTimestamp, _firstEpochStartTime, _baseAllocation) ***

Arguments

name

type

description

_wom

address

_veWom

address

_womPerSec

uint88

_startTimestamp

uint40

_firstEpochStartTime

uint40

_baseAllocation

uint16

function lastRewardTimestamp

Voter.lastRewardTimestamp() view

Outputs

name

type

description

uint40

function lpTokenLength

Voter.lpTokenLength() view

Notice: returns LP tokens length

Outputs

name

type

description

uint256

function lpTokens

Voter.lpTokens() view

Arguments

name

type

description

uint256

Outputs

name

type

description

address

function owner

Voter.owner() view

Details: Returns the address of the current owner.

Outputs

name

type

description

address

function pauseAll

***Voter.pauseAll() ***

Notice: Pause vote accumulation of WOM tokens for all assets Users can still vote/unvote and receive bribes.

function pauseVoteEmission

***Voter.pauseVoteEmission(_lpToken) ***

Notice: Pause vote emission of WOM tokens for the gauge. Users can still vote/unvote and receive bribes.

Arguments

name

type

description

_lpToken

address

function paused

Voter.paused() view

Details: Returns true if the contract is paused, and false otherwise.

Outputs

name

type

description

bool

function pendingBribes

Voter.pendingBribes(_lpTokens, _user) view

Notice: Get pending bribes for LP tokens

Arguments

name

type

description

_lpTokens

address[]

_user

address

Outputs

name

type

description

bribeTokenAddresses

address[][]

bribeTokenSymbols

string[][]

bribeRewards

uint256[][]

function pendingWom

Voter.pendingWom(_lpToken) view

Notice: Amount of pending WOM for the LP token

Arguments

name

type

description

_lpToken

address

Outputs

name

type

description

uint256

function renounceOwnership

***Voter.renounceOwnership() ***

Details: Leaves the contract without owner. It will not be possible to call onlyOwner functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.

function resumeAll

***Voter.resumeAll() ***

Notice: Resume vote accumulation of WOM tokens for all assets

function resumeVoteEmission

***Voter.resumeVoteEmission(_lpToken) ***

Notice: Resume vote accumulation of WOM tokens for the gauge.

Arguments

name

type

description

_lpToken

address

function setAllocPoint

***Voter.setAllocPoint(_lpToken, _allocPoint) ***

Arguments

name

type

description

_lpToken

address

_allocPoint

uint128

function setBaseAllocation

***Voter.setBaseAllocation(_baseAllocation) ***

Notice: update the base and vote partition

Arguments

name

type

description

_baseAllocation

uint16

function setBribe

***Voter.setBribe(_lpToken, _bribe) ***

Notice: get bribe address for LP token

Arguments

name

type

description

_lpToken

address

_bribe

address

function setGauge

***Voter.setGauge(_lpToken, _gaugeManager) ***

Notice: get gaugeManager address for LP token

Arguments

name

type

description

_lpToken

address

_gaugeManager

address

function setWomPerSec

***Voter.setWomPerSec(_womPerSec) ***

Arguments

name

type

description

_womPerSec

uint88

function totalAllocPoint

Voter.totalAllocPoint() view

Outputs

name

type

description

uint128

function totalWeight

Voter.totalWeight() view

Outputs

name

type

description

uint128

function transferOwnership

***Voter.transferOwnership(newOwner) ***

Details: Transfers ownership of the contract to a new account (newOwner). Can only be called by the current owner.

Arguments

name

type

description

newOwner

address

function veWom

Voter.veWom() view

Outputs

name

type

description

address

function vote

***Voter.vote(_lpVote, _deltas) ***

Notice: Vote and unvote WOM emission for LP tokens. User can vote/unvote a un-whitelisted pool. But no WOM will be emitted. Bribes are also distributed by the Bribe contract. Amount of vote should be checked by veWom.vote(). This can also used to distribute bribes when _deltas are set to 0

Arguments

name

type

description

_lpVote

address[]

address to LP tokens to vote

_deltas

int256[]

change of vote for each LP tokens

Outputs

name

type

description

bribeRewards

uint256[][]

function voteAllocation

Voter.voteAllocation() view

Notice: Read-only functions

Outputs

name

type

description

uint256

function voteIndex

Voter.voteIndex() view

Outputs

name

type

description

uint104

function votes

Voter.votes(, ) view

Arguments

name

type

description

address

address

Outputs

name

type

description

uint256

function weights

Voter.weights() view

Arguments

name

type

description

address

Outputs

name

type

description

allocPoint

uint128

voteWeight

uint128

function wom

Voter.wom() view

Outputs

name

type

description

address

function womPerSec

Voter.womPerSec() view

Outputs

name

type

description

uint88

4c5d8d635e8645fc848a12d25d5f5c97

Last updated