Scaling Fuse lending markets with B.Protocol

Tldr; We describe a lending market implementation on top of Fuse with B.Protocol as a liquidation engine. The implementation will allow to create new markets with higher Pool Risk Score and/or better collateral factors in a more scalable manner.

Market risk and liquidations

In our view, the risk of a market is determined by three parameters, namely:

  1. The integrity of the admin, i.e., the likelihood it will do either malicious operations (such as setting a malicious oracle) or reckless operation (e.g., set 99.9% collateral factor to TRON token).
  2. The integrity of the price oracle.
  3. The integrity of the liquidation process - failing to liquidate in a timely manner will result in lost of funds. Lack of trust in the liquidation process results in too conservative collateral factors.

While the first parameter is somewhat mitigated by a whitelisting process, and the second parameter is mostly solved by relying on chainlink oracles, the 3rd parameter suffers from lack of transparency.
This lack of transparency is not unique to Fuse, however it will amplify in a future with many money markets and exotic assets.

B.Protocol

B.Protocol pool user deposits, into a backstop, toward liquidations, and then automatically sell the seized collateral according to a new AMM formula (augmented with chainlink price feed to fetch the current market price).
We are already live over Liquity, Hundred finance (which is compound compatible), and Vesta finance. With over $200m TVL.

For Fuse market we extend our Compound compatible implementation in two orthogonal directions:

  1. We will allow cTokens to be deposited at the backstop. this way cUSDC will get an apy both from the usual interest rate, and from liquidation proceeds and from other backstop incentives.
  2. The admin of the market will be a smart contract which gives priority to the users’ backstop in the liquidation process. This is done by controlling the seizeGuardianPaused storage.

Further the admin contract will route some of the admin fees to the users’ backstop liquidity providers, and will control the liquidation penalty and collateral factors.

Improvement over the current status quo

Markets that decide to opt-in into B.Protocol liquidation system could have on-chain transparency on how well they could handle liquidations and to justify the existing liquidation factors.
Further, our simulations show that such architecture could handle liquidations much more efficiently.
Indeed, current liquidation bots immediately try to arbitrage the seized collateral, and are bounded by the slippage that DEXes offer.
Fully automated market makers such as Uniswap V2 or Sushiswap suffer of capital inefficiency, and require over $100m of liquidity to handle $5m of liquidations.
Market makers such as Uniswap V3 or Curve V2 suffer from lower liquidity in times of sharp market movements.
The following graph shows that B.Protocol can handle bigger amount of liquidations w.r.t xy=k amms


and more details over the simulation are available at our white paper.

Call for action

We are at the final stage of implementation. And reach out to projects that plan to start their own market on Fuse to contact us and consider using our backstop.

We also reach out to the Fei community to help seed some of these markets once they are out, and over time to allow more aggressive collateral factor parameters to markets with B.Protocol’s backstop.

2 Likes

I love this proposal! We use B Protocol for our current LUSD deployment in the BAMM.

Would make sense to try this out in a midsized market on mainnet or arbitrum with a willing pool operator. Olympus Pool Party, Fox and Frens, or Tribe ETH could be ideal.

2 Likes

Taking a closer look, this could actually be perfect for the Tribe Turbo base pool. What kinds of setup and technical work are required? This will be pool https://app.rari.capital/fuse/pool/153 unless we need to migrate

1 Like

The Tribe Turbo pool is different in two main aspects:

  1. enforceWhitelist is set to true, and moreover, to my understanding it required that even after liquidation, non whitelisted entities will not be able to hold fTokens. (This is not currently enforced by the fuse comptroller, who lets anyone liquidate even if enforceWhitelist = true.
  2. The market will have 0 interest rate, and as a result 0 admin fees. Which means that admin fees cannot be used to incentivise backstop deposits.

Work needed on Tribe DAO side

  1. The market is controlled by a FuseAdmin smart contract, and it is required to call _setSeizePaused(false) to prevent others from liquidate.
    Further, the BAMM should be set as a guardian so it could call _setSeizePaused(true) before a liquidation is executed, and _setSeizePaused(false), after it is executed.

  2. After minting fFEI tokens, they should be deposited into the BAMM. Ideally the BAMM should hold at least 20% of the fFEI supply, and fFEI utilisation should be under 80%.

  3. If we want to encourage liquidity also from external users, then some extra incentive is needed. (As there are no admin fees to share)

  4. At this stage I don’t see a need to whitelist the BAMM contract in the fuse market. But some future features might require it.

Work needed on B.Protocol side

  1. To comply with the whitelisting requirements we need to adjust our code a bit. Currently, after liquidation, the BAMM will try to sell the seized fToken in return to fFEI. It will have to be changed to use the underlying assets (collateral and fei) instead.

  2. If we aim to get liquidity also from external users, then we need to implement an interface that will allow fei deposits (rather than only fFEI deposits. As non whitelisted users will not be able to mint fFEI). In this case the BAMM will have to be whitelisted in the fuse market.

  3. Once the integration is live, we will launch our standard gelato and keeperDAO bots.

Could we do this with a CToken plugin, where the idle (non borrowed) FEI is reallocated to the BAMM ? If so, we could do the same with the collateral, so the BAMM could hold BAL and FEI for instance instead of fFEI and fBAL. And there would be no need for external liquidity providers.

1 Like

Great idea. Could you please refer me to the latest implementation of the plug in? I will check it out to see if the details work.

BAMM carries meaningful additional risk for depositors and should be opt-in instead of default deposited

This is true for a regular fuse market, but in such market there is also no restriction to hold fTokens.
If the turbo market will have only one depositor, than maybe it is ok to force it.
Also it is possible to have fFEI1 (which is does not go to backstop) and fFEI2 which does.

But personally i think it is probably simpler to just change the BAMM to support it.

1 Like