Skip to main content

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:

  1. Execute setFeeRecipient(0xNewFeeRecipient)
  2. 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:

  1. submitCap
  2. 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 te newSupplyCap is in decimals of the asset (loan token).

Submit Cap.

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 idof 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:

Accept Cap.

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.