Convex 3Crv Vaults
ERC-4626 vaults that deposits Curve 3Pool LP tokens (3Crv) in a Curve 3Pool-based Metapool, eg musd3Crv; deposits the Metapool LP token in a Convex pool; and stakes the Convex LP token, eg cvxmusd3Crv, for CRV and CVX rewards.
The Convex rewards are swapped for a Curve 3Pool token, eg DAI, USDC or USDT, using the
Liquidator
module and donated back to the vault. On donation back to the vault, the DAI, USDC or USDT is deposited into the underlying Curve Metapool; the Curve Metapool LP token is deposited into the corresponding Convex pool and the Convex LP token staked.- Invests 3Crv assets in a Curve Metapool and LP token staked in Convex for boosted returns.
- Sandwich attack protection on ERC4626 operations
deposit
,mint
,withdraw
andredeem
. - Liquidation of Convex rewards like CRV and CVX for more reinvested 3Crv assets.
- Front-running protection against liquidation of rewards by streaming the increase in assets per share.
- Fee charged on liquidated Convex rewards.
- Vault operations are pausable by the
Governor
. - Emergency asset recovery by the
Governor
. This will be removed after 2 months. - Vault configuration is controlled by a protocol
Governor
. This includes:- Setting the slippage limits for mint, deposit, redeem and withdraw.
- Setting the account that receives the liquidation fee.
- Initially the
Governor
can upgrade the contracts via a proxy without a time delay. After 6 weeks, this will be changed to a one week time delay.
uint256 ASSET_SCALE
3CRV token scale
uint256 VIRTUAL_PRICE_SCALE
address metapool
Curve.fi pool the 3Crv asset is deposited into. eg musd3CRV, MIM-3LP3CRV-f or usdp3CRV.
address metapoolToken
Curve.fi Metapool liquidity provider token. eg Curve.fi MUSD/3Crv (musd3CRV)
uint256 metapoolTokenScale
Scale of the metapool liquidity provider token. eg 1e18 if 18 decimal places.
address basePool
Curve's 3Pool used as a base pool by the Curve metapools.
contract IConvexBooster booster
Convex's Booster contract that contains the Curve.fi LP pools.
uint256 convexPoolId
Convex's pool identifier. eg 14 for the musd3CRV pool.
contract IConvexRewardsPool baseRewardPool
Convex's base rewards contract for staking Convex's LP token. eg staking cvxmusd3CRV
address DAI
address USDC
address USDT
uint256 redeemSlippage
Redeem slippage in basis points i.e. 1% = 100
uint256 depositSlippage
Deposit slippage in basis points i.e. 1% = 100
uint256 withdrawSlippage
Withdraw slippage in basis points i.e. 1% = 100
uint256 mintSlippage
Mint slippage in basis points i.e. 1% = 100
function liquidateVault(uint256 minAssets) external
Governor liquidates all the vault's assets and send to the governor. Only to be used in an emergency. eg whitehat protection against a hack.
Parameters
Name | Type | Description |
---|---|---|
minAssets | uint256 | Minimum amount of asset tokens to receive from removing liquidity from the Curve 3Pool. This provides sandwich attack protection. |
function resetAllowances() external
Approves Curve's 3Pool contract to transfer assets (DAI, USDC or USDT) from this vault. Also approves the underlying Meta Vault to transfer 3Crv from this vault.
function setDonateToken(address __donateToken) external
Vault manager or governor sets the token the rewards are swapped for and donated back to the vault.
Parameters
Name | Type | Description |
---|---|---|
__donateToken | address | a token in the 3Pool (DAI, USDC or USDT). |
function setRedeemSlippage(uint256 _slippage) external
Governor function to set redeem slippage.
Parameters
Name | Type | Description |
---|---|---|
_slippage | uint256 | Redeem slippage to apply as basis points i.e. 1% = 100 |
function setDepositSlippage(uint256 _slippage) external
Governor function to set deposit slippage.
Parameters
Name | Type | Description |
---|---|---|
_slippage | uint256 | Deposit slippage to apply as basis points i.e. 1% = 100 |
function setWithdrawSlippage(uint256 _slippage) external
Governor function to set withdraw slippage.
Parameters
Name | Type | Description |
---|---|---|
_slippage | uint256 | Withdraw slippage to apply as basis points i.e. 1% = 100 |
function setMintSlippage(uint256 _slippage) external
Governor function to set mint slippage.
Parameters
Name | Type | Description |
---|---|---|
_slippage | uint256 | Mint slippage to apply as basis points i.e. 1% = 100 |