Ring Protocol
Search
K
Comment on page

RingRewardsDistributor

The escrow contract responsible for dripping RING into the staking rewards

Contract

Description

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.

Release Schedule

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

Events

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

Read-Only Functions

incentiveAmount

function incentiveAmount() external view returns (uint256);
Returns the amount of RUSD sent to the caller of drip().

dripFrequency

function dripFrequency() external view returns (uint256);
The minimum frequency allowed between rewards distribution.

isDripAvailable

function isDripAvailable() external view returns (bool);
Returns true if nextDripAvailable() preceeds the current block timestamp

nextDripAvailable

function nextDripAvailable() external view returns (uint256);
The next block timestamp when reward distribution is allowed by the contract. Equals lastDistributionTime() + dripFrequency()

lastDistributionTime

function lastDistributionTime() external view returns (uint256);
The last block timestamp when rewards were distributed from the contract.

stakingContract

function stakingContract() external view returns (IStakingRewards);
The RingStakingRewards contract address

totalReward

function totalReward() external view returns (uint256);
Returns the total amount of rewards released over the entire window, including claimed, released, and unreleased.

releasedReward

function releasedReward() external view returns (uint256);
Returns the amount of rewardToken available for claiming by the pool. Calculated as rewardBalance() - unreleasedReward().

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.

rewardBalance

function rewardBalance() external view returns (uint256);
The amount of RING held by the contract, released or unreleased.

distributedRewards

function distributedRewards() external view returns (uint256);
The total amount of RING already distributed to RingStakingRewards.

EOA-Only 👤 State-Changing Functions

drip

function drip() external returns (uint256);
Sends releasedReward() RING to the stakingRewards() contract and updates the reward rate.
Incentivizes the caller with incentiveAmount() RUSD.
Only callable when nextDripAvailable() is below the current block timestamp and the contract is not paused

Governor-Only⚖️ State-Changing Functions

governorWithdrawRing

function governorWithdraw(uint256 amount) external;
Withdraws amount RING tokens from the pool to Ring Core.

governorRecover

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.

setDripFrequency

function setDripFrequency(uint256 _frequency) external;
Sets the frequency with which the contract calls the RingStakingRewards.

setIncentiveAmount

function setIncentiveAmount(uint256 _incentiveAmount) external;
Sets the incentive amount for calling drip().

setStakingContract

function setStakingContract(address _stakingRewards) external;
Sets the staking contract to send RING to.

ABIs

irewardsdistributor.json
3KB
Code
RewardsDistributor Interface ABI