In this post, we recap recent events, discuss next steps and propose the larger-scale protocol updates to prevent similar scenarios in the future.
What happened
On April 02, a massive withdrawal of USDT and USDC from a few addresses (~150m) resulted in a liquidity squeeze: there were no available assets to borrow or withdraw. A relatively massive exit caused a great deal of uncertainty in the markets.
A few days ago, Vires DAO supported the proposal to impose daily withdrawal limits on USDT and USDC markets. Although most of the accounts supplied amounts of funds lower than the established limits, the withdrawals don’t happen at scale. As a result, it relieved the markets surge: new deposits and repays are now visible, as large withdrawals can now be processed gradually, not instantly.
The problem of limitless lending and borrowing
The more significant issue for all pool-based lending protocols is the limitless nature of those: at any time, enormous amounts can be withdrawn or borrowed(given collateral provided). Although the model is statistically stable, it doesn’t account for extreme scenarios.
As no one borrows assets just to store them in the wallet, waiting for a bank run to repay instantly, this creates several risks for all protocol participants:
- borrowers can’t rely on prognostic rates: borrowing at 20% and suddenly ending up with 80% is quite a stress for any strategy.
- the not-so-fast lenders can’t expect to withdraw immediately.
Lenders can still sell their positions on the open market by exporting their LP tokens and trading at DEXes. Still, the massive liquidity exits(and borrows) need to be controlled.
What’s next
“Bank run” is not something one can effectively react to(probably except for withdrawal limits): there just can’t be a “bank run reserve fund” storing 50-70% of the whole market “just in case”.
However, what can be done is to adjust the protocol to prevent it from happening. Here’s what we have in mind:
1. Limits to automatically turning on at extreme market conditions
If a market utilization for asset A exceeds a certain threshold(say, 95%):
- borrows of A are paused,
- replenish and redeems of asset A are paused,
- withdrawals are limited per account per timeframe;
Once the utilization is back below the threshold, the limits are off: borrows are open again, and withdrawals are available without restrictions.
2. Locking LPs for additional VIRES Rewards
The idea is simple: governance tokens for locking LPs(VIRES_USDT_LP, VIRES_USDC_LP, etc). This will guarantee there’re at least some assets in any market that will not self-inflict panic by attempting to exit immediately. Of course, there needs to be a reason for a lender to lock funds in a fixed-term deposit rather than being able to access it at any moment, and the answer is adjusted tokenomics.
The current tokenomics distributes VIRES rewards for both lenders and borrowers. Come to think of it, liquidity protocols are interested in stable long-term liquidity provision, so the LPs should be incentivized in the first place(Yes, lenders are interested in borrowers and liquidators).
Changing “receiving governance tokens from participation” to “receiving governance tokens for locking LPs” makes the system clearer and more to the point.
Here’s how we see it:
- no vires rewards for borrows or regular supplies(collaterals),
- only those who locked their liquidity tokens(3mo) receive vires rewards,
- rewards can be collected daily,
- locked supply doesn’t provide borrow power;
This achieves several goals:
- Long-term(or at least predictable term) depositors receive all the rewards.
- Liquidity mining(in other words, looping) becomes economically impractical(see 3., 4. above)
- If you are the only one committing, you receive all the rewards.
There is no need to sell LP tokens; just lock them to collect rewards.
Timeline
In the upcoming several days, we expect corresponding proposals to be prepared for the measures described above.
Keep calm and enjoy APY!
–
EDIT: explanations and clarifications.