Solidity API
Documentation generated with solidity-docgen
​
Basically an ERC20 with minting functionality operated by the "operator" of the VoterProxy (Booster).
The minting schedule is based on the amount of CRV earned through staking and is distirbuted along a supply curve (cliffs etc). Fork of ConvexToken.
address operator
address vecrvProxy
uint256 EMISSIONS_MAX_SUPPLY
uint256 INIT_MINT_AMOUNT
uint256 totalCliffs
uint256 reductionPerCliff
address minter
uint256 minterMinted
event Initialised()
event OperatorChanged(address previousOperator, address newOperator)
constructor(address _proxy, string _nameArg, string _symbolArg) public
Name | Type | Description |
---|---|---|
_proxy | address | CVX VoterProxy |
_nameArg | string | Token name |
_symbolArg | string | Token symbol |
function init(address _to, address _minter) external
Initialise and mints initial supply of tokens.
Name | Type | Description |
---|---|---|
_to | address | Target address to mint. |
_minter | address | The minter address. |
function updateOperator() public
This can be called if the operator of the voterProxy somehow changes.
function mint(address _to, uint256 _amount) external
Mints AURA to a given user based on the BAL supply schedule.
function minterMint(address _to, uint256 _amount) external
Allows minter to mint to a specific address
Modifications from convex-platform/contracts/contracts/BaseRewardPool.sol: - Delayed start (tokens transferred then delay is enforced before notification) - One time duration of 14 days - Remove child reward contracts - Penalty on claim at 20%
contract IERC20 rewardToken
contract IERC20 stakingToken
uint256 duration
address rewardManager
contract IAuraLocker auraLocker
address penaltyForwarder
uint256 pendingPenalty
uint256 startTime
uint256 periodFinish
uint256 rewardRate
uint256 lastUpdateTime
uint256 rewardPerTokenStored
uint256 _totalSupply
mapping(address => uint256) userRewardPerTokenPaid
mapping(address => uint256) rewards
mapping(address => uint256) _balances
event RewardAdded(uint256 reward)
event Staked(address user, uint256 amount)
event Withdrawn(address user, uint256 amount)
event RewardPaid(address user, uint256 reward, bool locked)
event PenaltyForwarded(uint256 amount)
event Rescued()
constructor(address _stakingToken, address _rewardToken, address _rewardManager, address _auraLocker, address _penaltyForwarder, uint256 _startDelay) public
Simple constructor
Name | Type | Description |
---|---|---|
_stakingToken | address | Pool LP token |
_rewardToken | address | $AURA |
_rewardManager | address | Depositor |
_auraLocker | address | $AURA lock contract |
_penaltyForwarder | address | Address to which penalties are sent |
_startDelay | uint256 | ​ |
function totalSupply() public view returns (uint256)
function balanceOf(address account) public view returns (uint256)
modifier updateReward(address account)
function lastTimeRewardApplicable() public view returns (uint256)
function rewardPerToken() public view returns (uint256)
function earned(address account) public view returns (uint256)
function stake(uint256 _amount) public returns (bool)
function stakeAll() external returns (bool)
function stakeFor(address _for, uint256 _amount) public returns (bool)
function withdraw(uint256 amount, bool claim, bool lock) public returns (bool)
function getReward(bool _lock) public returns (bool)
Gives a staker their rewards
Name | Type | Description |
---|---|---|
_lock | bool | Lock the rewards? If false, takes a 20% haircut |
function forwardPenalty() public
Forwards to the penalty forwarder for distro to Aura Lockers
function rescueReward() public
Rescues the reward token provided it hasn't been initiated yet
function setLocker(address _newLocker) external
Updates the locker address
function initialiseRewards() external returns (bool)
Called once to initialise the rewards based on balance of stakeToken
Claim zap to bundle various reward claims
Claims from all pools, and stakes cvxCrv and CVX if wanted. v2: - change exchange to use curve pool - add getReward(address,token) type - add option to lock cvx - add option use all funds in wallet
address crv
address cvx
address cvxCrv
address crvDepositWrapper
address cvxCrvRewards
address locker
address owner
enum Options {
ClaimCvxCrv,
ClaimLockedCvx,
ClaimLockedCvxStake,
LockCrvDeposit,
UseAllWalletFunds,
LockCvx
}
constructor(address _crv, address _cvx, address _cvxCrv, address _crvDepositWrapper, address _cvxCrvRewards, address _locker) public
Name | Type | Description |
---|---|---|
_crv | address | CRV token (0xD533a949740bb3306d119CC777fa900bA034cd52); |
_cvx | address | CVX token (0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B); |
_cvxCrv | address | cvxCRV token (0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7); |
_crvDepositWrapper | address | crvDepositWrapper (0x8014595F2AB54cD7c604B00E9fb932176fDc86Ae); |
_cvxCrvRewards | address | cvxCrvRewards (0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e); |
_locker | address | vlCVX (0xD18140b4B819b895A3dba5442F959fA44994AF50); |
function getName() external pure returns (string)
function setApprovals() external
Approve spending of: crv -> crvDepositor cvxCrv -> cvxCrvRewards cvx -> Locker
function _checkOption(uint256 _mask, uint256 _flag) internal pure returns (bool)
Use bitmask to check if option flag is set
function claimRewards(address[] rewardContracts, address[] extraRewardContracts, address[] tokenRewardContracts, address[] tokenRewardTokens, uint256 depositCrvMaxAmount, uint256 minAmountOut, uint256 depositCvxMaxAmount, uint256 options) external
Claim all the rewards
Name | Type | Description |
---|---|---|
rewardContracts | address[] | Array of addresses for LP token rewards |
extraRewardContracts | address[] | Array of addresses for extra rewards |
tokenRewardContracts | address[] | Array of addresses for token rewards e.g vlCvxExtraRewardDistribution |
tokenRewardTokens | address[] | Array of token reward addresses to use with tokenRewardContracts |
depositCrvMaxAmount | uint256 | The max amount of CRV to deposit if converting to crvCvx |
minAmountOut | uint256 | The min amount out for crv:cvxCrv swaps if swapping. Set this to zero if you want to use CrvDepositor instead of balancer swap |
depositCvxMaxAmount | uint256 | The max amount of CVX to deposit if locking CVX |
options | uint256 | Claim options |
function _claimExtras(uint256 depositCrvMaxAmount, uint256 minAmountOut, uint256 depositCvxMaxAmount, uint256 removeCrvBalance, uint256 removeCvxBalance, uint256 options) internal
Claim additional rewards from: - cvxCrvRewards - cvxLocker
Name | Type | Description |
---|---|---|
depositCrvMaxAmount | uint256 | see claimRewards |
minAmountOut | uint256 | see claimRewards |
depositCvxMaxAmount | uint256 | see claimRewards |
removeCrvBalance | uint256 | crvBalance to ignore and not redeposit (starting Crv balance) |
removeCvxBalance | uint256 | cvxBalance to ignore and not redeposit (starting Cvx balance) |
options | uint256 | see claimRewards |
Effectively allows for rolling 16 week lockups of CVX, and provides balances available at each epoch (1 week). Also receives cvxCrv from
CvxStakingProxy
and redistributes to depositors.Invdividual and delegatee vote power lookups both use independent accounting mechanisms.
struct RewardData {
uint32 periodFinish;
uint32 lastUpdateTime;
uint96 rewardRate;
uint96 rewardPerTokenStored;
}
struct UserData {
uint128 rewardPerTokenPaid;
uint128 rewards;
}
struct EarnedData {
address token;
uint256 amount;
}
struct Balances {
uint112 locked;
uint32 nextUnlockIndex;
}
struct LockedBalance {
uint112 amount;
uint32 unlockTime;
}
struct Epoch {
uint224 supply;
uint32 date;
}
struct DelegateeCheckpoint {
uint224 votes;
uint32 epochStart;
}
address[] rewardTokens
mapping(address => uint256) queuedRewards
uint256 newRewardRatio
mapping(address => struct AuraLocker.RewardData) rewardData
mapping(address => mapping(address => bool)) rewardDistributors
mapping(address => mapping(address => struct AuraLocker.UserData)) userData
uint256 rewardsDuration
uint256 lockDuration
uint256 lockedSupply
struct AuraLocker.Epoch[] epochs
mapping(address => struct AuraLocker.Balances) balances
mapping(address => struct AuraLocker.LockedBalance[]) userLocks
mapping(address => address) _delegates
mapping(address => struct AuraLocker.DelegateeCheckpoint[]) _checkpointedVotes
mapping(address => mapping(uint256 => uint256)) delegateeUnlocks
mapping(address => bool) blacklist
contract IERC20 stakingToken
address cvxCrv
uint256 denominator
address cvxcrvStaking
uint256 kickRewardPerEpoch
uint256 kickRewardEpochDelay
bool isShutdown
string _name
string _symbol
uint8 _decimals
event DelegateChanged(address delegator, address fromDelegate, address toDelegate)
event DelegateCheckpointed(address delegate)
event Recovered(address _token, uint256 _amount)
event RewardPaid(address _user, address _rewardsToken, uint256 _reward)
event Staked(address _user, uint256 _paidAmount, uint256 _lockedAmount)
event Withdrawn(address _user, uint256 _amount, bool _relocked)
event KickReward(address _user, address _kicked, uint256 _reward)
event RewardAdded(address _token, uint256 _reward)
event BlacklistModified(address account, bool blacklisted)
event KickIncentiveSet(uint256 rate, uint256 delay)
event Shutdown()
constructor(string _nameArg, string _symbolArg, address _stakingToken, address _cvxCrv, address _cvxCrvStaking) public