RewardController
Inherits: IRewardController, IncreAccessControl, Pausable, ReentrancyGuard
Author: webthethird
Base contract for storing and updating reward info for multiple reward tokens, each with
a gradually decreasing emission rate, based on an initial inflation rate, reduction factor, and time elapsed
a list of markets for which the reward token is distributed
a list of weights representing the percentage of rewards that go to each market
State Variables
MAX_INFLATION_RATE
Maximum inflation rate, applies to all reward tokens
MIN_REDUCTION_FACTOR
Minimum reduction factor, applies to all reward tokens
MAX_REWARD_TOKENS
Maximum number of reward tokens allowed
rewardTokens
List of reward token addresses
Length must be <= MAX_REWARD_TOKENS
_rewardInfoByToken
Info for each registered reward token
_marketWeightsByToken
Mapping from reward token to reward weights for each market
Market reward weights are basis points, i.e., 100 = 1%, 10000 = 100%
Functions
getMaxInflationRate
Gets the maximum allowed inflation rate for a reward token
Returns
Name | Type | Description |
---|---|---|
|
| Maximum allowed inflation rate |
getMinReductionFactor
Gets the minimum allowed reduction factor for a reward token
Returns
Name | Type | Description |
---|---|---|
|
| Minimum allowed reduction factor |
getMaxRewardTokens
Gets the maximum allowed number of reward tokens
Returns
Name | Type | Description |
---|---|---|
|
| Maximum allowed number of reward tokens |
getRewardTokens
Returns the full list of reward tokens
Returns
Name | Type | Description |
---|---|---|
|
| Array of reward token addresses |
getRewardTokenCount
Gets the number of reward tokens
Returns
Name | Type | Description |
---|---|---|
|
| Number of reward tokens |
getInitialTimestamp
Gets the timestamp when a reward token was registered
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
Returns
Name | Type | Description |
---|---|---|
|
| Timestamp when the reward token was registered |
getInitialInflationRate
Gets the inflation rate of a reward token (w/o factoring in reduction factor)
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
Returns
Name | Type | Description |
---|---|---|
|
| Initial inflation rate of the reward token |
getInflationRate
Gets the current inflation rate of a reward token (factoring in reduction factor)
inflationRate = initialInflationRate / reductionFactor^((block.timestamp - initialTimestamp) / secondsPerYear)
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
Returns
Name | Type | Description |
---|---|---|
|
| Current inflation rate of the reward token |
getReductionFactor
Gets the reduction factor of a reward token
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
Returns
Name | Type | Description |
---|---|---|
|
| Reduction factor of the reward token |
getRewardWeight
Gets the reward weight of a given market for a reward token
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
|
| Address of the market |
Returns
Name | Type | Description |
---|---|---|
|
| The reward weight of the market in basis points |
getRewardMarkets
Gets the list of all markets receiving a given reward token
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
Returns
Name | Type | Description |
---|---|---|
|
| Array of market addresses |
isTokenPaused
Gets whether a reward token is paused
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
Returns
Name | Type | Description |
---|---|---|
|
| True if the reward token is paused, false otherwise |
updateRewardWeights
Sets the market addresses and reward weights for a reward token
Only callable by Governance
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
|
| List of market addresses to receive rewards |
|
| List of weights for each market |
updateInitialInflationRate
Sets the initial inflation rate used to calculate emissions over time for a given reward token
Only callable by Governance
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
|
| The new inflation rate in tokens/year, scaled by 1e18 |
updateReductionFactor
Sets the reduction factor used to reduce emissions over time for a given reward token
Only callable by Governance
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
|
| The new reduction factor, scaled by 1e18 |
pause
Pause the contract
Can only be called by Emergency Admin
unpause
Unpause the contract
Can only be called by Emergency Admin
togglePausedReward
Pauses/unpauses the reward accrual for a particular reward token
Only callable by Emergency Admin
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
_togglePausedReward
Pauses/unpauses the reward accrual for a particular reward token
Does not pause gradual reduction of inflation rate over time due to reduction factor
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
_updateMarketRewards
Updates the reward accumulator for a given market
Executes when any of the following variables are changed: inflationRate
, marketWeights
, liquidity
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the market |
_getNumMarkets
Gets the number of markets to be used for reward distribution
Markets are the perpetual markets (for the PerpRewardDistributor) or staked tokens (for the SafetyModule)
Returns
Name | Type | Description |
---|---|---|
|
| Number of markets |
_getCurrentPosition
Returns the current position of the user in the market (i.e., perpetual market or staked token)
Parameters
Name | Type | Description |
---|---|---|
|
| Address of the user |
|
| Address of the market |
Returns
Name | Type | Description |
---|---|---|
|
| Current position of the user in the market |
_getMarketAddress
Gets the address of a market at a given index
Markets are the perpetual markets (for the PerpRewardDistributor) or staked tokens (for the SafetyModule)
Parameters
Name | Type | Description |
---|---|---|
|
| Index of the market |
Returns
Name | Type | Description |
---|---|---|
|
| Address of the market |
_getMarketIdx
Gets the index of an allowlisted market
Markets are the perpetual markets (for the PerpRewardDistributor) or staked tokens (for the SafetyModule)
Parameters
Name | Type | Description |
---|---|---|
|
| Index of the market in the allowlist |
Returns
Name | Type | Description |
---|---|---|
|
| Index of the market in the market list |
Structs
RewardInfo
Data structure containing essential info for each reward token
Properties
Name | Type | Description |
---|---|---|
|
| Address of the reward token |
|
| Whether the reward token accrual is paused |
|
| Time when the reward token was added |
|
| Initial rate of reward token emission per year |
|
| Factor by which the inflation rate is reduced each year |
|
| List of markets for which the reward token is distributed |
Last updated