[Ideas] Should Euler use supply and borrow caps? If so, how should they be implemented?

Supply caps and borrow caps can help protect lending protocols from risk. For example, you probably don’t want to allow $100m of borrows of an asset with an FDV of $200m, since borrowers could never be realistically liquidated. Aave v3 is implementing these features. Do people have any opinions about their use on Euler? One thing they could enable is more widespread use of collateral. E.g. add a supply/borrow cap on ABC and allow it to be used as collateral. But there are risks too. With borrow caps, it could be easier for someone to borrow the entire pool and drive up utilisation on assets, making liquidations tricky. There’s also the question of whether or not such caps should be enforced in terms of the underlying token amounts, or some relative measure (perhaps in terms of ETH or USD).

2 Likes

We definitely should consider it.
Therefore we can scale collateral assets (some of them were excluded from this tier recently) and avoid “highly profitable trading strategy” attacks.

What about max utilisation, we can reconsider max interest rate.

want to add some discussion also in here.

im in favor for borrow caps but it will be total pain in the ass to decide the caps for each of the token with liquidity on euler. Is it possible to do it automatically based on the available risk? like time weighted v3 liquidity, average volume, etc etc

I think it’s essential for Euler to have borrow and supply caps because risk changes as borrowing activity changes, and Euler needs tools to limit risk.

I agree with @patria that manually setting caps will be a pain. It is not scalable and is also subject to human error that grows as people become fatigued. This process should be automated.

So if we’re to automate it, what factors should be used? It’s essential to look at why these caps are needed first: to manage risk. So what’s the risk that we’re trying to manage? The most significant risk relates to liquidation. How many liquidations can the market absorb before bad debt is accumulated?

This brings us to two factors: Euler’s existing borrowing activity and market liquidity. It would be pretty easy and inexpensive to set the caps to +/- 20% of the existing activity and reset the caps daily. Add a small constant amount to this to allow smaller markets to scale up. That 20% figure could be scaled later based on market liquidity, where the higher the activity on Euler relative to market liquidity, the lower the figure. We could use 24-hour time-weighted liquidity oracles to calculate market liquidity - there’s already one on the market ready for production use.

2 Likes

Interesting idea. Just so I understand you:

Today the total lending on USDC is $75m, and the total borrowing is $48m. So you’re suggesting caps which would be placed at $90m and $57.6m, respectively. And then these would be updated tomorrow, and so on, based on the totals from the day prior?

I suppose with this design you’re guarding against people rushing in to the market to cause trouble. The problem is that it would still allow for oversized growth of some markets though.

Like stETH on Aave grew fairly steadily over time and ended up at a scary looking size during some periods last year when liquidity was thinning out on exchanges.

Thanks for the response. You’re correct on the first part of my idea. These caps would effectively form velocity limits to restrict the rate of risk build-up. This would give us time to respond and adapt to instances with too much risk. Let’s refer to this velocity limit as the soft cap.

The second part of my idea is to scale the soft cap based on overall market factors to create a hard cap. This will prevent markets from becoming oversized. Let’s use an example.

Say there’s $1B worth of stETH being used as collateral on Euler. With a 0.85 collateral factor, the risk-adjusted value is $850M. Let’s also say there’s $1B of liquidity across Curve and Uniswap.

The naive soft cap would be $1B*1.2 = $1.2B, allowing for $200M of additional deposits. A market-aware soft cap could look like $1B*(1 + 0.2 * (1 - (risk_adjusted_value / dex_liquidity))) = $1B*(1 + 0.2 * (1 - ($850M/$1B))) = $1B*1.03 = $1.03B.

The effective hard cap would be $1.176B, with the risk-adjusted value being $1B, equal to DEX liquidity. The market-aware soft cap would scale down the velocity limit until the hard cap is reached.

1 Like