Comment on page
RingRewardsDistributor
The escrow contract responsible for dripping RING into the staking rewards
The RingRewardsDistributor contract is responsible for sending rewards to the RingStakingRewards contract with weekly frequency.
It has one public method exposed for keepers to execute this drip functionality, which rewards the caller with a fixed amount of RUSD.
The release schedule for the total reward amount R of RING is a linearly decreasing RING distribution. The distribution function is:

Daily Distribution
This function has a duration of d before it hits a 0 distribution rate. The area under the curve is R, because the y-intercept is 2R/d, by simply multiplying base times height times 1/2.
Set the "unreleased function" U(t) equal to the area under this curve between the current elapsed time t and the total duration d. Note that for t=d the output is equal to 0 as all of the RING should be released. The formula is:

Total Unreleased
Drip
RingWithdraw
FrequencyUpdate
IncentiveUpdate
StakingContractUpdate
Sent RING to the RingStakingRewards contract
type | param | description |
address indexed | _caller | account that triggered the drip |
uint256 | _amount | amount of RING dripped |
A withdrawal of RING from the distributor
type | param | description |
uint256 | _amount | amount withdrawn |
Change the drip frequency
type | param | description |
uint256 | _amountReward | new drip frequency |
Change in the RUSD reward for dripping
type | param | description |
uint256 | _incentiveAmount | new incentive amount |
A change in the staking contract to send RING to.
type | param | description |
address indexed | _stakingContract | the new staking contract |
function incentiveAmount() external view returns (uint256);
Returns the amount of RUSD sent to the caller of
drip()
.function dripFrequency() external view returns (uint256);
The minimum frequency allowed between rewards distribution.
function isDripAvailable() external view returns (bool);
Returns true if
nextDripAvailable()
preceeds the current block timestampfunction nextDripAvailable() external view returns (uint256);
The next block timestamp when reward distribution is allowed by the contract. Equals
lastDistributionTime() + dripFrequency()
function lastDistributionTime() external view returns (uint256);
The last block timestamp when rewards were distributed from the contract.
function stakingContract() external view returns (IStakingRewards);
function totalReward() external view returns (uint256);
Returns the total amount of rewards released over the entire window, including claimed, released, and unreleased.
function releasedReward() external view returns (uint256);
Returns the amount of
rewardToken
available for claiming by the pool. Calculated as rewardBalance() - unreleasedReward()
.function unreleasedReward() external view returns (uint256);
The unreleased reward function following the formula shown in the Release Schedule section above. It starts at the
totalReward()
amount and then wind down to 0 over the duration
of the window.function rewardBalance() external view returns (uint256);
function distributedRewards() external view returns (uint256);
function drip() external returns (uint256);
Only callable when
nextDripAvailable()
is below the current block timestamp and the contract is not pausedfunction governorWithdraw(uint256 amount) external;
function governorRecover(address tokenAddress, address to, uint256 amount) external;
Recovers
tokenAddress
ERC20 tokens from the RingStakingRewards contract to address to
. This is used if there were AMM rewards distributed.function setDripFrequency(uint256 _frequency) external;
Sets the frequency with which the contract calls the RingStakingRewards.
function setIncentiveAmount(uint256 _incentiveAmount) external;
Sets the incentive amount for calling
drip()
.function setStakingContract(address _stakingRewards) external;
Sets the staking contract to send RING to.
irewardsdistributor.json
3KB
Code
RewardsDistributor Interface ABI
Last modified 2yr ago