ZivoeRewardsVesting.sol
Vesting $ZVE Linearly
Introduction
This contract facilitates staking and yield distribution, as well as vesting tokens.
This contract has the following responsibilities:
Allows creation of vesting schedules (and revocation) for "vestingToken".
Allows unstaking of vested tokens.
Allows claiming yield distributed / "deposited" to this contract.
Allows multiple assets to be added as "rewardToken" for distributions (except for "vestingToken").
Vests rewardTokens linearly overtime to stakers.
State Variables
Type | Name | Description |
---|---|---|
address | GBL | The ZivoeGlobals contract. |
address | vestingToken | The token vesting, in this case Zivoe ($ZVE). |
address[] | rewardTokens | Array of ERC20 tokens distributed as rewards (if present). |
uint256 | vestingTokenAllocated | The amount of vestingToken currently allocated. |
uint256 | _totalSupply | Total supply of (non-transferrable) LP tokens for reards contract. |
mapping(address => Reward) | rewardData | Contains rewards information for each rewardToken. |
mapping(address => bool) | vestingScheduleSet | Tracks if a wallet has been assigned a schedule. |
mapping(address => VestingSchedule) | vestingScheduleOf | Tracks the vesting schedule of accounts. |
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. |
VestingSchedule
VestingSchedule
This struct stores information for vesting schedules.
Type | Name | Description |
---|---|---|
uint256 | start | The block.timestamp at which tokens will start vesting. |
uint256 | cliff | The block.timestamp at which tokens are first claimable. |
uint256 | end | The block.timestamp at which tokens will stop vesting (finished). |
uint256 | totalVesting | The total amount to vest. |
uint256 | totalWithdrawn | The total amount withdrawn so far. |
uint256 | vestingPerSecond | The amount of vestingToken that vests per second. |
bool | revokable | Whether or not this vesting schedule can be revoked. |
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.
viewSchedule() - Provides information for a vesting schedule. See VestingSchedule
amountWithdrawable() - Returns the amount of $ZVE tokens a user can withdraw.
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.createVestingSchedule() - Sets the vestingSchedule for an account.
revokeVestingSchedule() - Ends vesting schedule for a given account (if revokable).
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. |
viewSchedule()
viewSchedule()
Provides information for a vesting schedule. See VestingSchedule
Type | Name | Description |
---|---|---|
address | account | The account to view information of. |
Returns
Type | Name | Description |
---|---|---|
uint256 | start | The block.timestamp at which tokens will start vesting. |
uint256 | cliff | The block.timestamp at which tokens are first claimable. |
uint256 | end | The block.timestamp at which tokens will stop vesting (finished). |
uint256 | totalVesting | The total amount to vest. |
uint256 | totalWithdrawn | The total amount withdrawn so far. |
uint256 | vestingPerSecond | The amount of vestingToken that vests per second. |
bool | revokable | Whether or not this vesting schedule can be revoked. |
amountWithdrawable()
amountWithdrawable()
Returns the amount of $ZVE tokens a user can withdraw.
Type | Name | Description |
---|---|---|
address | account | The account to be withdrawn from. |
Returns
Type | Name | Description |
---|---|---|
uint256 | amount | Withdrawable amount of $ZVE tokens. |
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)
createVestingSchedule()
createVestingSchedule()
Sets the vestingSchedule for an account.
Type | Name | Description |
---|---|---|
address | account | The account vesting $ZVE |
uint256 | daysToCliff | The number of days before vesting is claimable (a.k.a. cliff period). |
uint256 | daysToVest | The number of days for the entire vesting period, from beginning to end. |
uint256 | amountToVest | The amount of tokens being vested. |
bool | revokable | If the vested amount can be revoked. |
Emits the VestingScheduleCreated() and Staked() event
revokeVestingSchedule()
revokeVestingSchedule()
Ends vesting schedule for a given account (if revokable).
Type | Name | Description |
---|---|---|
address | account | The acount to revoke a vesting schedule for. |
Emits the VestingScheduleRevoked() 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 createVestingSchedule()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account staking "stakingToken". |
uint256 | False | amount | The amount of "stakingToken" staked. |
VestingScheduleCreated()
VestingScheduleCreated()
Emitted during createVestingSchedule()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account that was given a vesting schedule. |
uint256 | False | start | The block.timestamp at which tokens will start vesting. |
uint256 | False | cliff | The block.timestamp at which tokens are first claimable. |
uint256 | False | end | The block.timestamp at which tokens will stop vesting (finished). |
uint256 | False | totalVesting | The total amount to vest. |
uint256 | False | vestingPerSecond | The amount of vestingToken that vests per second. |
bool | False | revokable | Whether or not this vesting schedule can be revoked. |
VestingScheduleRevoked()
VestingScheduleRevoked()
Emitted during revokeVestingSchedule()
Type | Indexed | Name | Description |
---|---|---|---|
address | True | account | The account that was revoked a vesting schedule. |
uint256 | False | amountRevoked | The amount of tokens revoked. |
uint256 | False | cliff | The updated value for cliff. |
uint256 | False | end | The updated value for end. |
uint256 | False | totalVesting | The total amount to vested (claimable). |
bool | False | revokable | The final revokable status of schedule (always false after revocation). |
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