ZivoeRewards.sol
Staking for Native Protocol Token(s)
Introduction
This contract facilitates staking and yield distribution.
This contract has the following responsibilities:
Allows staking and unstaking of modular "stakingToken".
Allows claiming yield distributed / "deposited" to this contract.
Allows multiple assets to be added as "rewardToken" for distributions.
Vests rewardTokens linearly overtime to stakers.
State Variables
Type | Name | Description |
---|---|---|
address | GBL | The ZivoeGlobals contract. |
address[] | rewardTokens | Array of ERC20 tokens distributed as rewards (if present). |
uint256 | _totalSupply | Total supply of (non-transferrable) LP tokens for reards contract. |
rewardData | Contains rewards information for each rewardToken. | |
mapping(address => mapping(address => (uint256)) | accountRewardPerTokenPaid | The order is account -> rewardAsset -> amount. |
mapping(address => mapping(address => (uint256)) | rewards | The order is account -> rewardAsset -> amount. |
mapping(address => uint256) | _balances | Contains LP token balance of each account (is 1:1 ratio with amount deposited). |
IERC20 | stakingToken | IERC20 wrapper for the stakingToken (deposited to receive LP tokens). |
Reward
Reward
This struct stores information for reward tokens.
Type | Name | Description |
---|---|---|
uint256 | rewardsDuration | How long rewards take to vest, e.g. 30 days. |
uint256 | periodFinish | When current rewards will finish vesting. |
uint256 | rewardRate | Rewards emitted per second. |
uint256 | lastUpdateTime | Last time this data struct was updated. |
uint256 | rewardPerTokenStored | Last snapshot of rewardPerToken taken. |
Sections
balanceOf() - Returns the amount of tokens owned by "account", received when depositing via
stake()
.getRewardForDuration() - Returns the total amount of rewards being distributed to everyone for current rewardsDuration.
totalSupply() - Returns the amount of tokens in existence; these are minted and burned when depositing or withdrawing.
viewAccountRewardPerTokenPaid() - Returns the last snapshot of rewardPerTokenStored taken for a reward asset.
viewRewards() - Returns the rewards earned of a specific rewardToken for an address.
earned() - Provides information on the rewards available for claim.
lastTimeRewardApplicable() - Helper function for assessing distribution timelines.
rewardPerToken() - Cumulative amount of rewards distributed per LP token.
addReward() - Adds a new asset as a reward to this contract.
depositReward() - Deposits a reward to this contract for distribution.
fullWithdraw() - Simultaneously calls
withdraw()
andgetRewards()
for convenience.stake() - Stakes the specified amount of stakingToken to this contract.
stakeFor() - Stakes the specified amount of stakingToken to this contract, awarded to someone else.
getRewards() - Claim rewards for all possible _rewardTokens.
withdraw() - Withdraws the specified amount of stakingToken from this contract.
Read Functions
balanceOf()
balanceOf()
Returns the amount of tokens owned by "account", received when depositing via stake()
.
Type | Name | Description |
---|---|---|
address | account | The account to view information of. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of tokens owned by "account". |
getRewardForDuration()
getRewardForDuration()
Returns the total amount of rewards being distributed to everyone for current rewardsDuration.
Type | Name | Description |
---|---|---|
address | _rewardsToken | The asset that's being distributed. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of rewards being distributed. |
totalSupply()
totalSupply()
Returns the amount of tokens in existence; these are minted and burned when depositing or withdrawing.
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of tokens in existence. |
viewAccountRewardPerTokenPaid()
viewAccountRewardPerTokenPaid()
Returns the last snapshot of rewardPerTokenStored taken for a reward asset.
Type | Name | Description |
---|---|---|
address | account | The account to view information of. |
address | rewardAsset | The reward token for which we want to return the rewardPerTokenstored. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The latest up-to-date value of rewardPerTokenStored. |
viewRewards()
viewRewards()
Returns the rewards earned of a specific rewardToken for an address.
Type | Name | Description |
---|---|---|
address | account | The account to view information of. |
address | rewardAsset | The asset earned as a reward. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of rewards earned. |
earned()
earned()
Provides information on the rewards available for claim.
Type | Name | Description |
---|---|---|
address | account | The account to view information of. |
address | _rewardsToken | The asset that's being distributed. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of rewards earned. |
lastTimeRewardApplicable()
lastTimeRewardApplicable()
Helper function for assessing distribution timelines.
Type | Name | Description |
---|---|---|
address | _rewardsToken | The asset that's being distributed. |
Returns
Type | Name | Description |
---|---|---|
uint256 | timestamp | The most recent time (in UNIX format) at which rewards are available for distribution. |
rewardPerToken()
rewardPerToken()
Cumulative amount of rewards distributed per LP token.
Type | Name | Description |
---|---|---|
address | _rewardsToken | The asset that's being distributed. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | The cumulative amount of rewards distributed per LP token. |
Write Functions
addReward()
addReward()
Adds a new asset as a reward to this contract.
Type | Name | Description |
---|---|---|
address | _rewardsToken | The asset that's being distributed |
uint256 | _rewardsDuration | How long rewards take to vest, e.g. 30 days (denoted in seconds). |
Emits the RewardAdded() event
depositReward()
depositReward()
Deposits a reward to this contract for distribution.
Type | Name | Description |
---|---|---|
address | _rewardsToken | The asset that's being distributed. |
uint256 | reward | The amount of the _rewardsToken to deposit. |
Emits the RewardDeposited() event
fullWithdraw()
fullWithdraw()
Simultaneously calls withdraw()
and getRewards()
for convenience.
Emits the Withdrawn() and RewardDistributed() event(s)
stake()
stake()
Stakes the specified amount of stakingToken to this contract.
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of the _rewardTokens to deposit. |
Emits the Staked() event
stakeFor()
stakeFor()
Stakes the specified amount of stakingToken to this contract, awarded to someone else.
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of the _rewardsToken to deposit. |
address | account | The account to stake for (that ultimately receives the stake). |
Emits the StakedFor() event
getRewards()
getRewards()
Claim rewards for all possible _rewardTokens.
Emits the RewardDistributed() event
withdraw()
withdraw()
Withdraws the specified amount of stakingToken from this contract.
Type | Name | Description |
---|---|---|
uint256 | amount | The amount of the _rewardsToken to withdraw. |
Emits the Withdrawn() event
Events
RewardAdded()
RewardAdded()
Emitted during addReward()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | reward | The asset that's being distributed. |
RewardDeposited()
RewardDeposited()
Emitted during depositReward()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | reward | The asset that's being deposited. |
uint256 | False | amount | The amount deposited. |
address | True | depositor | The _msgSender() who deposited said reward. |
RewardDistributed()
RewardDistributed()
Emitted during #getrewardat
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account receiving a reward. |
address | True | rewardsToken | The ERC20 asset distributed as a reward. |
uint256 | False | reward | The amount of "rewardsToken" distributed. |
Staked()
Staked()
Emitted during stake()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account staking "stakingToken". |
uint256 | False | amount | The amount of "stakingToken" staked. |
StakedFor()
StakedFor()
Emitted during stakeFor()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account receiveing the staked position of "stakingToken". |
uint256 | False | amount | The amount of "stakingToken" staked. |
address | True | by | The account facilitating the staking. |
Withdrawn()
Withdrawn()
Emitted during withdraw()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account withdrawing "stakingToken". |
uint256 | False | amount | The amount of "stakingToken" to withdraw. |
Last updated