Skip to main content

Set Up PublicAllocator

As the vault curator of a MetaMorpho vault, you can designate the PublicAllocator address as an allocator of the vault. This will allow borrowers or Morpho's interface to trigger reallocations and amplify the available liquidity for the end users while limiting the flow of tokens that can be supplied or withdrawn from a market listed in the vault.

After setting the PublicAllocator as allocator of the vault, you can set up the PublicAllocator.

Setting an admin

By default, only the owner of the vault can configure the PublicAllocator for a given vault. However, the owner can appoint an additional admin by triggering the setAdmin function.

Setting the fee

The PublicAllocator has a fee that is charged on every reallocation. The fee is paid in ETH and can be changed at any time by the owner of the vault or the admin by triggering the setFee function.

This fee prevents griefing attacks and helps the vault curators to cover the gas costs reallocations in the case the reallocation through the PublicAllocator has created an imbalance.

Setting the flow caps

Flow caps determine the maximum amount of tokens that can be supplied or withdrawn from a market listed in the vault. The flow caps can be set by the owner of the vault or the admin for a specific market by triggering the setFlowCap function.

A flow cap is composed of the maxIn and maxOut in this order. The maxIn is the maximum amount of tokens that can be supplied to a market and the maxOut is the maximum amount of tokens that can be withdrawn from a market.

For example, if amount x is withdrawn from a market during reallocation, the market's maxIn increases by x, while maxOut decreases by x. Conversely, if x is supplied to the market, maxIn decreases by x and maxOut increases by x.

This mechanism helps maintain balance and limits excessive token flows in and out of the market.

setFlowCap example

note

Assume that the vault has the following markets:

  • 0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41
  • 0x58e212060645d18eab6d9b2af3d56fbc906a92ff5667385f616f662c70372284
  • 0x3c83f77bde9541f8d3d82533b19bbc1f97eb2f1098bb991728acbfbede09cc5d

Consider the following input for the setFlowCap function as an example:

[
{
"id": "0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41", // wstETH/WETH (94.5%)
"caps": {
"maxIn": "199000000000000000000", // 199 WETH
"maxOut": "199000000000000000000" // 199 WETH
}
},
{
"id": "0x58e212060645d18eab6d9b2af3d56fbc906a92ff5667385f616f662c70372284", // wstETH/WETH (96.5%)
"caps": {
"maxIn": "0", // 0 WETH
"maxOut": "459000000000000000000" // 459 WETH
}
},
{
"id": "0x3c83f77bde9541f8d3d82533b19bbc1f97eb2f1098bb991728acbfbede09cc5d", // rETH/WETH (94.5%)
"caps": {
"maxIn": "500000000000000000000", // 500 WETH
"maxOut": "150000000000000000000" // 15 WETH
}
}
]

Corresponding Etherscan input below:

[["0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41", ["199000000000000000000", "199000000000000000000"]], ["0x58e212060645d18eab6d9b2af3d56fbc906a92ff5667385f616f662c70372284", ["0", "459000000000000000000"]], ["0x3c83f77bde9541f8d3d82533b19bbc1f97eb2f1098bb991728acbfbede09cc5d", ["500000000000000000000", "150000000000000000000"]]]