Comment on page
//sample convex reward contracts interface
//get balance of an address
function balanceOf(address _account) external returns(uint256);
//withdraw to a convex tokenized deposit
function withdraw(uint256 _amount, bool _claim) external returns(bool);
//withdraw directly to curve LP token
function withdrawAndUnwrap(uint256 _amount, bool _claim) external returns(bool);
function getReward() external returns(bool);
//stake a convex tokenized deposit
function stake(uint256 _amount) external returns(bool);
//stake a convex tokenized deposit for another address(transfering ownership)
function stakeFor(address _account,uint256 _amount) external returns(bool);
baseRewardPool.rewardToken()to determine what token is rewarded
baseRewardPool.balanceOf(address)to see how much an address has staked.
baseRewardPool.totalSupply()to see how much is currently staked on the reward contract
baseRewardPool.earned(address)to see how much rewards an address will receive if they claim their rewards now.
Use baseRewardPool.getReward() or baseRewardPool.getReward( address, bool ) to claim rewards for your address or an arbitrary address. The bool is an option to also claim extra incentive tokens (ex. snx) which is defaulted to true in the non-parametrized version. More information on extra rewards below.
baseRewardPool.stake( amount )to stake a given amount for your address Use
baseRewardPool.stakeAll()to stake all tokens for your address Use
baseRewardPool.stakeFor( address, amount )to stake on behalf of another address (*This transfers ownership of the tokens!)
baseRewardPool.withdraw( amount, bool )to withdraw a specific amount. bool is to also claim while withdrawing Use
baseRewardPool.withdrawAll( bool )to withdraw all tokens staked. bool is to also claim while withdrawing Use
baseRewardPool.withdrawAndUnwrap( amount, bool )to withdraw a specific amount of tokens AND also unwrap the tokens back into the underlying LP tokens. bool is to also claim while withdrawing Use
baseRewardPool.withdrawAllAndUnwrap(bool claim)to withdraw all tokens AND also unwrap the tokens back into the underlying LP tokens. bool is to also claim while withdrawing
The BaseRewardPool has an array of child reward contracts called extraRewards. You can query the number of extra rewards via
baseRewardPool.extraRewardsLength(). This array holds a list of VirtualBalanceRewardPool contracts which are similar in nature to the base reward contract but without actual control of staked tokens. This means that if a pool has CRV rewards as well as SNX rewards, the pool's main reward contract(BaseRewardPool) will distribute the CRV and the child contract(VirtualBalanceRewardPool) will distribute the SNX.
Important for pools with IDs 151+:
VirtualBalanceRewardPool's rewardToken points to a wrapped version of the underlying token. This Token implementation can be found here: https://github.com/convex-eth/platform/blob/main/contracts/contracts/StashTokenWrapper.sol
The reward contract mechanics are that of popular synthetix style reward contract. Some important parameters for determining things like APY could be: duration: The reward contract cycle length periodFinish: When the current cycle is planned to finish rewardRate: How many tokens are distributed per second