Adapter Integratees
In order to exchange some of a fund's assets for other assets, an adapter generally integrates with one or more "integratees," i.e., endpoints at which to interact with a defi protocol such as Kyber, Uniswap, Compound, etc.

AaveAdapter

Integrates with Aave lending via aTokens.
Mainnet contracts:
    LendingPoolAddressesProvider: 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5
Functions and considerations:
    lend() - None
    redeem() - None

AlphaHomoraV1Adapter

Integrates with Alpha Homora v1 lending via ibETH.
Mainnet contracts:
    Bank (ibETH): 0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A
Functions and considerations:
    lend() - None
    redeem() - None

ChaiAdapter

Integrates with Chai token.
Mainnet contracts:
    Chai: 0x06AF07097C9Eeb7fD685c692751D5C66dB49c215
Functions and considerations:
    lend() - None
    redeem() - None

CompoundAdapter

Integrates with Compound Finance's cTokens. Each cToken is its own integratee.
Mainnet contracts:
    cBAT : 0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
    cCOMP: 0x70e36f6bf80a52b3b46b3af8e106cc0ed743e8e4
    cDAI: 0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643
    cETH: 0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5
    cREP: 0x158079ee67fce2f58472a96584a73c7ab9ac95c1
    cUNI: 0x35A18000230DA775CAc24873d00Ff85BccdeD550
    cUSDC: 0x39aa39c021dfbae8fac545936693ac917d5e7563
    cZRX: 0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Functions and considerations:
    lend() - fund receives cToken , which triggers the VaultProxy to start accumulating COMP based on the amount lent. COMP is claimable natively on Compound on behalf of the fund (by any user)
    redeem() - None

CurveExchangeAdapter

Integrates with Curve's universal interface for swapping between any assets in a given pool.
Mainnet contracts:
    AddressProvider: 0x0000000022D53366457F9d5E68Ec105046FC4383
Functions and considerations:
    takeOrder() : none

CurveLiquidityAaveAdapter

Integrates with the Curve aave pool (aDAI, aUSDC, and aUSDT).
Note that lending/redemption can both be done from/to the underlying assets of the aTokens (DAI, USDC, USDT).
Docs: https://curve.readthedocs.io/addresses-overview.html (links to all relevant contracts)
Mainnet contracts:
    StableSwapAave: 0xDeBF20617708857ebe4F679508E7b7863a8A8EeE
    LP token: 0xFd2a8fA60Abd58Efe3EeE34dd494cD491dC14900
    LiquidityGaugeV2 (for aave pool): 0xd662908ADA2Ea1916B3318327A97eB18aD588b5d
    Minter : 0xd061D61a4d941c39E5453435B6345Dc261C2fcE0
    Router2 (Uniswap): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Functions and considerations:
    approveAssets() - can only be used for rewards tokens that are assets in the Enzyme asset universe
    claimRewards() - none
    claimRewardsAndReinvest() - trades all reward tokens into a user-specified "intermediary asset" (one of the pool's aTokens underlyings, i.e., DAI, USDC, or USDT) via UniswapV2, then uses that balance to lend and stake more of the LP token. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    claimRewardsAndSwap() - trades all reward tokens into a specified target asset. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    lend() - none
    redeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
    stake() - fund starts accruing $CRV and pool rewards (currently none) after action
    unstake() - none
    lendAndStake() - fund starts accruing $CRV and pool rewards (currently none) after action
    unstakeAndRedeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
Claiming accrued rewards can also be accomplished outside of the adapter through two mechanisms:
    $CRV - must be claimed either through a call from the VaultProxy or by an account nominated via a call from the VaultProxy . We register all of these as approved vault calls.
    pool rewards (if any are added) - can be claimed by any party at any time on behalf of the VaultProxy

CurveLiquidityEursAdapter

Integrates with the Curve eurs pool (EURS and Synthetix sEUR)
Docs: https://curve.readthedocs.io/ref-addresses.html (links to all relevant contracts)
Mainnet contracts:
    StableSwapEURS: 0x0Ce6a5fF5217e38315f87032CF90686C96627CAA
    LP token: 0x194eBd173F6cDacE046C53eACcE9B953F28411d1
    LiquidityGaugeV2 (for eurs pool): 0x90Bb609649E0451E5aD952683D64BD2d1f245840
    Minter : 0xd061D61a4d941c39E5453435B6345Dc261C2fcE0
Functions and considerations:
    claimRewards() - none
    lend() - none
    redeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
    stake() - fund starts accruing $CRV and pool rewards (currently none) after action
    unstake() - none
    lendAndStake() - fund starts accruing $CRV and pool rewards (currently none) after action
    unstakeAndRedeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
Claiming accrued rewards can also be accomplished outside of the adapter through two mechanisms:
    $CRV - must be claimed either through a call from the VaultProxy or by an account nominated via a call from the VaultProxy . We register all of these as approved vault calls.
    pool rewards (if any are added) - can be claimed by any party at any time on behalf of the VaultProxy

CurveLiquiditySethAdapter

Integrates with the Curve seth pool (ETH and Synthetix sETH)
Docs: https://curve.readthedocs.io/addresses-overview.html (links to all relevant contracts)
Mainnet contracts:
    StableSwapSETH: 0xc5424B857f758E906013F3555Dad202e4bdB4567
    LP token: 0xA3D87FffcE63B53E0d54fAa1cc983B7eB0b74A9c
    LiquidityGaugeV2 (for sETH pool): 0x3C0FFFF15EA30C35d7A85B85c0782D6c94e1d238
    Minter : 0xd061D61a4d941c39E5453435B6345Dc261C2fcE0
    Router2 (Uniswap): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Functions and considerations:
    approveAssets() - can only be used for rewards tokens that are assets in the Enzyme asset universe
    claimRewards() - none
    claimRewardsAndReinvest() - trades all reward tokens into WETH via UniswapV2, then uses that balance to lend and stake more of the LP token. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    claimRewardsAndSwap() - trades all reward tokens into a specified target asset. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    lend() - none
    redeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
    stake() - fund starts accruing $CRV and pool rewards (currently none) after action
    unstake() - none
    lendAndStake() - fund starts accruing $CRV and pool rewards (currently none) after action
    unstakeAndRedeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
Claiming accrued rewards can also be accomplished outside of the adapter through two mechanisms:
    $CRV - must be claimed either through a call from the VaultProxy or by an account nominated via a call from the VaultProxy . We register all of these as approved vault calls.
    pool rewards (if any are added) - can be claimed by any party at any time on behalf of the VaultProxy

CurveLiquidityStethAdapter

Integrates with the Curve steth pool (ETH and Lido stETH)
Docs: https://curve.readthedocs.io/addresses-overview.html (links to all relevant contracts)
Mainnet contracts:
    StableSwapSTETH: 0xDC24316b9AE028F1497c275EB9192a3Ea0f67022
    LP token: 0x06325440D014e39736583c165C2963BA99fAf14E
    LiquidityGaugeV2 (for stETH pool): 0x182B723a58739a9c974cFDB385ceaDb237453c28
    Minter : 0xd061D61a4d941c39E5453435B6345Dc261C2fcE0
    Router2 (Uniswap): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Functions and considerations:
    approveAssets() - can only be used for rewards tokens that are assets in the Enzyme asset universe
    claimRewards() - none
    claimRewardsAndReinvest() - trades all reward tokens into WETH via UniswapV2, then uses that balance to lend and stake more of the LP token. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    claimRewardsAndSwap() - trades all reward tokens into a specified target asset. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    lend() - none
    redeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
    stake() - fund starts accruing $CRV and $LDO rewards after action
    unstake() - none
    lendAndStake() - fund starts accruing $CRV and $LDO rewards after action
    unstakeAndRedeem() - redemption can be made for either an equal balance of underlying pool tokens (relative to pool proportions), or for either single asset in the pool
Claiming accrued rewards can also be accomplished outside of the adapter through two mechanisms:
    $CRV - must be claimed either through a call from the VaultProxy or by an account nominated via a call from the VaultProxy . We register all of these as approved vault calls.
    $LDO - can be claimed by any party at any time on behalf of the VaultProxy

IdleAdapter

Integrates with the Idle Finance's IdleToken contracts using the functions available in V4 of its protocol.
Mainnet contracts: each IdleToken
Functions and considerations:
    approveAssets() - can only be used for rewards tokens that are assets in the Enzyme asset universe
    claimRewards() - claimed rewards tokens are sent to the Vault, but are not reported as incomingAssets, and thus are not emitted in an event, not run through policy management, and are not added as tracked assets
    claimRewardsAndReinvest() - trades all reward tokens via UniswapV2 into the IdleToken 's underlying asset , which is then lent for more idleToken balance. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    claimRewardsAndSwap() - trades all reward tokens into a specified target asset. Can either use only the newly claimed rewards token balances, or the full balances of reward tokens in the vault
    lend() - none
    redeem() - any call to redeem() will also claim all rewards tokens; these rewards tokens are sent to the vault, but are not reported as incomingAssets, and thus are not emitted in an event, not run through policy management, and are not added as tracked assets
Unclaimed rewards transfer to the recipient during ERC20 transfer calls, rather than auto-checkpointing as other protocols do.

KyberAdapter

Integrates with Kyber Network via the KyberNetworkProxy.
Mainnet contracts:
    KyberNetworkProxy : 0x9AAb3f75489902f3a48495025729a0AF77d4b11e
Functions and considerations:
    takeOrder() - None

ParaSwapV4Adapter

Integrates with ParaSwap (v4) via the AugustusSwapper. Incorporates asset approvals via the TokenTransferProxy.
Mainnet contracts:
    AugustusSwapper: 0x1bD435F3C054b6e901B7b108a0ab7617C808677b
    TokenTransferProxy: 0xb70Bc06D2c9Bf03b3373799606dc7d39346c06B3
Functions and considerations:
    takeOrder() - None

SynthetixAdapter

Integrates with Synthetix via SNX.
Mainnet contracts:
    SNX: 0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F
Functions and considerations:
    takeOrder() - Synthetix gives the incoming asset of the trade a provisional "best guess" balance until it reaches finality, which is after the Synthetix-defined "waiting period" (currently 3 minutes) has expired. The final balance can be +/- the provisional balance.

TrackedAssetsAdapter

Does not integrate with any external integrations.
It only serves to add/remove tracked assets to/from a fund in a manner that subjects it to additional policy management.
Functions and considerations:
    addTrackedAssets() - None
    removeTrackedAssets() - Only allows removal if the VaultProxy asset balance is less than a "dust threshold"

UniswapV2Adapter

Integrates with UniswapV2 for trading and for liquidity provision and redemption.
Mainnet contracts:
    UniswapV2Factory: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
    UniswapV2Router2: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Functions and considerations:
    takeOrder() - None
    lend() - None
    redeem() - None

UniswapV3Adapter

Integrates with UniswapV3 for trading (not LP)
Mainnet contracts:
    SwapRouter : 0xE592427A0AEce92De3Edee1F18E0157C05861564
Functions and considerations:
    takeOrder() - None

YearnVaultV2Adapter

Integrates with Yearn vault v2 instances
Mainnet contracts:
    all Yearn vault v2 instances
Functions and considerations:
    lend() - none
    redeem() - none
Note that while all Yearn vault v2 instances adhere to the same interface, each individual instance uses one of many particular versioned implementations (see v2.registry.ychad.eth). Only the adapter interactions with expected behaviors of interface functions can be realistically audited.

ZeroExV2Adapter

Integrates with the 0x Protocol.
Mainnet contracts:
    Exchange: 0x080bf510fcbf18b91105470639e9561022937712
    ERC20Proxy: 0x95e6f48254609a6ee006f7d493c8e5fb97094cef
Functions and considerations:
    takeOrder() - Left unchecked, the 0x Protocol allows filling any trade created by any user, irrespective of whether the resulting value is beneficial for the fund. This adapter method is limited to makers approved by the Enzyme Council to mitigate this issue.
Last modified 3mo ago