Setup
The vault curator can setup a few things, let's detail them one by one.
Attribute roles
Curator
Execute
setCurator(0xNewCurator)
Allocator
Execute
setIsAllocator(0xNewAllocator, true)
. One can set the second attribute to false to revoke the allocation capacity.
Guardian
Note that if no guardian is set, (which is the case at vault creation), submitting a new guardian sets it immediately as the guardian. Execute
submitGuardian(0xNewGuardian)
Fee
If one wants to set the performance fees:
- Execute
setFeeRecipient(0xNewFeeRecipient)
- Execute
setFee(10000000000000000)
// 1%, FEE variable has 18 decimals.
Skim recipient
The skim recipient will receive all rewards that may have been allocated to the vault, while the latter earned them by allocating liquidity on Morpho markets.
Execute
setSkimRecipient(0xNewSkimRecipient)
Set Market Caps
The process to set caps is:
submitCap
acceptCap
Let's detail them:
1 - Submit the cap
Fill the arguments of the submitCap
.
On the addresses section of the documentation, you have the markets created on Morpho, let’s take as an example the market:
WETH/wstETH (94.5%, ChainlinkOracle, AdaptiveCurveIRM).
Execute
submitCap
as in the picture below. Keep in mind that tenewSupplyCap
is in decimals of the asset (loan token).
2 - Accept the cap
Wait for timelock to elapse and execute
acceptCap()
Execute the acceptCap()
with the market parameters of the market, which in this case are retrievable thanks to the id
of the market: 0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41
How to get the id from a market?
Morpho Labs team may provide an annex contract, in the meantime, one can retrieve the id from markets either:
- On the addresses section of the documentation, on the column
id
, - Or at market creation as the event is emitting the
id
, and the markets params alongside as stated in this section, - Or via this TypeScript script.
Do this for as many markets as you expect the vault to deposit liquidity.
In the end, do not forget to submit and accept the cap for what we call the "idle" market.
The idle market is a Morpho market with the asset of the Morpho Vault as loanToken
, the address(0)
as the collateralToken
, the address(0)
as irm
, the address(0)
as oracle
and 0 as lltv
so that it is possible to supply on this market, but not to borrow. You might have to create a such market (with the createMarket
function of the Morpho contract) if none of the already created markets of Morpho matches these parameters.
The cap for this market is supposed to be type(uint184).max
, to always allow deposits into the vault.
3 - Set the supplyQueue
Now one has to set the supplyQueue
accordingly via the setSupplyQueue
function, by giving as input a list of Ids of markets as follows:
[0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41,0x_MARKET_ID_2,...]
And execute with an address that has the onlyAllocatorRole
:
- Owner,
- Curator,
- Allocator.
Idle market
It is recommended to put the idle market as the end of the supplyQueue
such that any extra deposit after all caps are reached will go into this market.
For the withdrawQueue
(see next section), the idle market should be set as the first one.
4 - Deposit liquidity
It is important to deposit a bit of liquidity (can be even 1$) such that the native rate of the vault is not 0 if the markets where liquidity flows is not 0. Any interface, scripts, or bots reading the market APYs will thus have a rate different than 0.