External Positions
External positions interact with external protocols, just like adapters. Interactions via an
ExternalPositionProxy
instance and its library affect its value, while interactions via parser contracts only affect validations and the parsing of user input.Each external position is associated with a "type" that is written to
ExternalPositionProxy.EXTERNAL_POSITION_TYPE
upon its deployment. This type (e.g., a Compound debt position) instructs the system as to which library and parser contracts to use with proxy interactions.A vault can have many active external positions of the same type.
There are no globally-enforced limitations on the asset counts that can be managed within any external position. If the need for a such a limitation arises for particular external position types, then a limitation should be imposed by the parser contract for that type.
Handles creating (borrowing), managing, and repaying debt positions on Aave.
Aave aTokens are held as collateral directly within the
ExternalPositionProxy
instance, which acts as the owner of the CDP.Currently only handles variable debt, not stable debt.
Mainnet contracts:
- each aToken
LendingPoolAddressesProvider
:0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5
ProtocolDataProvider
:0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d
Actions and considerations:
AddCollateral
- NoneRemoveCollateral
- NoneBorrow
- Borrowing accrues stkAAVE to theExternalPositionProxy
RepayBorrow
- NoneClaimStkAave
- None
Handles creating (borrowing), managing, and repaying debt positions on Compound Finance.
Compound cTokens are held as collateral directly within the
ExternalPositionProxy
instance, which acts as the owner of the CDP.Mainnet contracts:
- each cToken supported by the
CompoundPriceFeed
CompoundComptroller
-0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B
Actions and considerations:
AddCollateral
- Receives cTokens from the vault which accrues COMP to theExternalPositionProxy
RemoveCollateral
- NoneBorrow
- Borrowing accrues COMP to theExternalPositionProxy
RepayBorrow
- NoneClaimComp
- None
Handles vote-locking CVX for vlCVX, delegating voting power to a 3rd party, and claiming rewards from Convex and Votium.
Does not currently support actually voting, which can be easily be accomplished by delegating to a 3rd party and voting directly via Snapshot.
Note that this uses
CvxLockerV2
, the second locker implementation.Mainnet contracts:
BaseRewardPool
(cvxCrv staking) :0x3Fe65692bfCD0e6CF84cB1E7d24108E434A7587e
ConvexToken
:0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B
CvxLockerV2
:0x72a19342e8F1838460eBFCCEf09F6585e32db86E
MultiMerkleStash
(Votium):0x378Ba9B73309bE80BF4C2c027aAD799766a7ED5A
vlCvxExtraRewardDistribution
:0x9B622f2c40b80EF5efb14c2B2239511FfBFaB702
Actions and considerations:
Lock
- Starts accrual of cvxCRV rewards and any extra rewardsRelock
- NoneWithdraw
- Stops accrual of cvxCRV rewards and any extra rewardsClaimRewards
- NoneDelegate
- None
Actions and considerations:
ClaimFees
- Only execution layer fees for now. Consensus layer fee support will be added post-ShanghaiStake
- NoneWithdrawEth
- Transfers any ETH in the contract to the VaultProxy
Handles borrowing LUSD using ETH as collateral on Liquity.
Mainnet contracts:
BorrowerOperations
:0x24179CD81c9e782A4096035f7eC97fB8B783e007
TroveManager
:0xA39739EF8b0231DbFA0DcdA07d7e29faAbCf4bb2
Actions and considerations:
OpenTrove
- NoneAddCollateral
- NoneRemoveCollateral
- NoneBorrow
- NoneRepayBorrow
- NoneCloseTrove
- None
Handles lending on Maple Finance
Mainnet contracts:
- each Maple pool
MplRewardsFactory
(v1):0x0155729EbCd47Cb1fBa02bF5a8DA20FaF3860535
MapleGlobals
(v2):0x804a6F5F667170F545Bf14e5DDB48C70B788390C
Actions and considerations:
CancelRedeemV2
- NoneLendV2
- NoneRedeemV2
- NoneRequestRedeemV2
- NoneClaimRewardsV1
- (legacy action for unclaimed MPL rewards)
Handles lending and borrowing on Notional Finance v2
Mainnet contracts:
Router
:0x1344A36A1B56144C3Bc62E7757377D288fDE0369
Actions and considerations:
AddCollateral
- NoneBorrow
- NoneLend
- Repaying aBorrow
is done by callingLend
with the desired amount to repayRedeem
- None
Handles buying Solv v2 bonds at IVO (initial voucher offering) and claiming bond value at settlement.
Mainnet contracts:
InitialConvertibleOfferingMarket
:0x
Actions and considerations:
BuyOffering
- Once bought, any held voucher will result in an invalid (reverting) GAV/share price until that voucher's maturityClaim
- None
Handles issuing Solv v2 bonds at IVO (initial voucher offering) and settling bond value at settlement.
Mainnet contracts:
InitialConvertibleOfferingMarket
:0x
Actions and considerations:
CreateOffer
- Once created, any issued voucher will result in an invalid (reverting) GAV/share price until that voucher's maturityReconcile
- NoneRefund
- NoneRemoveOffer
- NoneWithdraw
- None
Handles delegating $GRT to indexers on The Graph.
Mainnet contracts:
GraphProxy
:0xf55041e37e12cd407ad00ce2910b8269b01263b9
Actions and considerations:
Delegate
- Starts accruing $GRT rewards, and charges a flat delegation tax (currently 0.5%) on the delegated $GRT amountUndelegate
- Stops accruing $GRT rewardsWithdraw
- None
Handles minting, adding/removing liquidity, collecting fees, and burning UniswapV3 LP positions via Uniswap's
NonfungiblePositionManager
.A minted nft representing a particular LP position (distinct fee, ticks, and token amounts) is owned by an
ExternalPositionProxy
of this type. One such
ExternalPositionProxy
instance can own and manage multiple nfts of any token pairs (i.e., one fund can manage all of its NFTs in a single contract).Mainnet contracts:
NonfungiblePositionManager
-0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Actions and considerations:
Mint
- NoneAddLiquidity
- NoneRemoveLiquidity
- NoneCollect
- NonePurge
- None
Last modified 1mo ago