Skip to main content

BaseCurveStrategy

BaseCurveStrategy

MAX_SLIPPAGE

uint256 MAX_SLIPPAGE

THREEPOOL_ASSET_COUNT

uint256 THREEPOOL_ASSET_COUNT

pTokenAddress

address pTokenAddress

deposit

function deposit(address _asset, uint256 _amount) external

Deposit asset into the Curve 3Pool

Parameters

NameTypeDescription
_assetaddressAddress of asset to deposit
_amountuint256Amount of asset to deposit

_lpDepositAll

function _lpDepositAll() internal virtual

depositAll

function depositAll() external

Deposit the entire balance of any supported asset into the Curve 3pool

_lpWithdraw

function _lpWithdraw(uint256 numCrvTokens) internal virtual

_lpWithdrawAll

function _lpWithdrawAll() internal virtual

withdraw

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

Withdraw asset from Curve 3Pool

Parameters

NameTypeDescription
_recipientaddressAddress to receive withdrawn asset
_assetaddressAddress of asset to withdraw
_amountuint256Amount of asset to withdraw

_calcCurveTokenAmount

function _calcCurveTokenAmount(uint256 _coinIndex, uint256 _amount) internal returns (uint256 required3Crv)

Calculate amount of LP required when withdrawing specific amount of one of the underlying assets accounting for fees and slippage.

Curve pools unfortunately do not contain a calculation function for amount of LP required when withdrawing a specific amount of one of the underlying tokens and also accounting for fees (Curve's calc_token_amount does account for slippage but not fees).

Steps taken to calculate the metric:

  • get amount of LP required if fees wouldn't apply
  • increase the LP amount as if fees would apply to the entirety of the underlying asset withdrawal. (when withdrawing only one coin fees apply only to amounts of other assets pool would return in case of balanced removal - since those need to be swapped for the single underlying asset being withdrawn)
  • get amount of underlying asset withdrawn (this Curve function does consider slippage and fees) when using the increased LP amount. As LP amount is slightly over-increased so is amount of underlying assets returned.
  • since we know exactly how much asset we require take the rate of LP required for asset withdrawn to get the exact amount of LP.

withdrawAll

function withdrawAll() external

Remove all assets from platform and send them to Vault contract.

checkBalance

function checkBalance(address _asset) public view virtual 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)

Retuns 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.

_abstractSetPToken

function _abstractSetPToken(address _asset, address) internal

Call the necessary approvals for the Curve pool and gauge

Parameters

NameTypeDescription
_assetaddressAddress of the asset
address

_approveAsset

function _approveAsset(address _asset) internal

_approveBase

function _approveBase() internal virtual

_getCoinIndex

function _getCoinIndex(address _asset) internal view returns (uint256)

Get the index of the coin