Skip to main content

ConvexEthMetaStrategy

ConvexEthMetaStrategy​

MAX_SLIPPAGE​

uint256 MAX_SLIPPAGE

ETH_ADDRESS​

address ETH_ADDRESS

cvxDepositorAddress​

address cvxDepositorAddress

cvxRewardStaker​

contract IRewardStaking cvxRewardStaker

cvxDepositorPTokenId​

uint256 cvxDepositorPTokenId

curvePool​

contract ICurveETHPoolV1 curvePool

lpToken​

contract IERC20 lpToken

oeth​

contract IERC20 oeth

weth​

contract IWETH9 weth

oethCoinIndex​

uint128 oethCoinIndex

ethCoinIndex​

uint128 ethCoinIndex

onlyStrategist​

modifier onlyStrategist()

Verifies that the caller is the Strategist.

improvePoolBalance​

modifier improvePoolBalance()

Checks the Curve pool's balances have improved and the balances have not tipped to the other side. This modifier only works on functions that do a single sided add or remove. The standard deposit function adds to both sides of the pool in a way that the pool's balance is not worsened. Withdrawals are proportional so doesn't change the pools asset balance.

ConvexEthMetaConfig​

struct ConvexEthMetaConfig {
address cvxDepositorAddress;
address cvxRewardStakerAddress;
uint256 cvxDepositorPTokenId;
address oethAddress;
address wethAddress;
}

constructor​

constructor(struct InitializableAbstractStrategy.BaseStrategyConfig _baseConfig, struct ConvexEthMetaStrategy.ConvexEthMetaConfig _convexConfig) public

initialize​

function initialize(address[] _rewardTokenAddresses, address[] _assets) external

Initializer for setting up strategy internal state. This overrides the InitializableAbstractStrategy initializer as Curve strategies don't fit well within that abstraction.

Parameters​

NameTypeDescription
_rewardTokenAddressesaddress[]Address of CRV & CVX
_assetsaddress[]Addresses of supported assets. eg WETH

deposit​

function deposit(address _weth, uint256 _amount) external

Deposit WETH into the Curve pool

Parameters​

NameTypeDescription
_wethaddressAddress of Wrapped ETH (WETH) contract.
_amountuint256Amount of WETH to deposit.

_deposit​

function _deposit(address _weth, uint256 _wethAmount) internal

depositAll​

function depositAll() external

Deposit the strategy's entire balance of WETH into the Curve pool

withdraw​

function withdraw(address _recipient, address _weth, uint256 _amount) external

Withdraw ETH and OETH from the Curve pool, burn the OETH, convert the ETH to WETH and transfer to the recipient.

Parameters​

NameTypeDescription
_recipientaddressAddress to receive withdrawn asset which is normally the Vault.
_wethaddressAddress of the Wrapped ETH (WETH) contract.
_amountuint256Amount of WETH to withdraw.

calcTokenToBurn​

function calcTokenToBurn(uint256 _wethAmount) internal view returns (uint256 lpToBurn)

withdrawAll​

function withdrawAll() external

Remove all ETH and OETH from the Curve pool, burn the OETH, convert the ETH to WETH and transfer to the Vault contract.

mintAndAddOTokens​

function mintAndAddOTokens(uint256 _oTokens) external

Mint OTokens and one-sided add to the Curve pool. This is used when the Curve pool does not have enough OTokens and too many ETH. The OToken/Asset, eg OETH/ETH, price with increase. The amount of assets in the vault is unchanged. The total supply of OTokens is increased. The asset value of the strategy and vault is increased.

Parameters​

NameTypeDescription
_oTokensuint256The amount of OTokens to be minted and added to the pool.

removeAndBurnOTokens​

function removeAndBurnOTokens(uint256 _lpTokens) external

One-sided remove of OTokens from the Curve pool which are then burned. This is used when the Curve pool has too many OTokens and not enough ETH. The amount of assets in the vault is unchanged. The total supply of OTokens is reduced. The asset value of the strategy and vault is reduced.

Parameters​

NameTypeDescription
_lpTokensuint256The amount of Curve pool LP tokens to be burned for OTokens.

removeOnlyAssets​

function removeOnlyAssets(uint256 _lpTokens) external

One-sided remove of ETH from the Curve pool, convert to WETH and transfer to the vault. This is used when the Curve pool does not have enough OTokens and too many ETH. The OToken/Asset, eg OETH/ETH, price with decrease. The amount of assets in the vault increases. The total supply of OTokens does not change. The asset value of the strategy reduces. The asset value of the vault should be close to the same.

Curve pool LP tokens is used rather than WETH assets as Curve does not have a way to accurately calculate the amount of LP tokens for a required amount of ETH. Curve's calc_token_amount functioun does not include fees. A 3rd party libary can be used that takes into account the fees, but this is a gas intensive process. It's easier for the trusted strategist to caclulate the amount of Curve pool LP tokens required off-chain.

Parameters​

NameTypeDescription
_lpTokensuint256The amount of Curve pool LP tokens to be burned for ETH.

_withdrawAndRemoveFromPool​

function _withdrawAndRemoveFromPool(uint256 _lpTokens, uint128 coinIndex) internal returns (uint256 coinsRemoved)

Remove Curve pool LP tokens from the Convex pool and do a one-sided remove of ETH or OETH from the Curve pool.

Parameters​

NameTypeDescription
_lpTokensuint256The amount of Curve pool LP tokens to be removed from the Convex pool.
coinIndexuint128The index of the coin to be removed from the Curve pool. 0 = ETH, 1 = OETH.

Return Values​

NameTypeDescription
coinsRemoveduint256The amount of ETH or OETH removed from the Curve pool.

collectRewardTokens​

function collectRewardTokens() external

Collect accumulated CRV and CVX rewards and send to the Harvester.

_lpWithdraw​

function _lpWithdraw(uint256 _wethAmount) internal

checkBalance​

function checkBalance(address _asset) public view returns (uint256 balance)

Get the total asset value held in the platform

Parameters​

NameTypeDescription
_assetaddressAddress of the asset

Return Values​

NameTypeDescription
balanceuint256Total value of the asset in the platform

supportsAsset​

function supportsAsset(address _asset) public view returns (bool)

Returns bool indicating whether asset is supported by strategy

Parameters​

NameTypeDescription
_assetaddressAddress of the asset

safeApproveAllTokens​

function safeApproveAllTokens() external

Approve the spending of all assets by their corresponding pool tokens, if for some reason is it necessary.

receive​

receive() external payable

Accept unwrapped WETH

_abstractSetPToken​

function _abstractSetPToken(address _asset, address _pToken) internal

Since we are unwrapping WETH before depositing it to Curve there is no need to to set an approval for WETH on the Curve pool

Parameters​

NameTypeDescription
_assetaddressAddress of the asset
_pTokenaddressAddress of the Curve LP token

_approveBase​

function _approveBase() internal

_max​

function _max(int256 a, int256 b) internal pure returns (int256)

Returns the largest of two numbers int256 version