These are (once again) stressful times for vires.finance, one may call it (yet another) “extreme stress test”. We receive a lot of questions and complaints regarding timeline, rewards, liquidation mechanics, etc. Let’s break it down here.
Inability to withdraw
It’s nearly impossible to withdraw USDT and USDC from the contracts – not before the debts start to get repaid or new liquidity comes in: the smart contract doesn’t have the asset there. If you want to exit your position now, simply exchange your LP tokens at waves.exchange(USDC, USDN), the markets are pretty much alive and active.
Borrows paused
The borrows have been paused to prevent further escalation of current “all USDT/C borrowed” to “all assets borrowed”.
USDN Oracle price is 1.00
- It’s debatable whether AMM or exchange is a good source of price feed for USDN, given it can be redeemed through WAVES and save the day.
- Live feeds have their downsides: apart from reliable data, during turbulent times even the fiat-backed USDT/C are subject to volatility causing massive (inappropriate) liquidations when stablecoins are borrowed for stablecoins.
(Not much of an)Issue with Rewards, TotalDebt > TotalSupply
So far the rewards have been accumulating at the pace displayed at The Liquidity Protocol for Lending and Borrowing Assets – VIRES.FINANCE. Yes, you receive different numbers when claiming.
Say, userA deposited 10 USDT, userB then borrowed 10 USDT.
# | amt |
---|---|
userA deposit | 10 USDT |
userB borrow | 10 USDT |
As time passes, userB’s debt grows by 1 USDT, but userA’s deposit is growing slower as part of accumulated debt goes to rewards.
# | amt |
---|---|
userA deposit | 10.9 USDT |
userB borrow | 11 USDT |
supposed_rewards | 0.1 USDT |
This is why Total Debt is greater than Total Deposit.
As there’s no separate claims for different markets, the system uses min(balance, supposed_rewards)
to maintain its stability for the extreme case:
# | amt |
---|---|
userA_deposit | 10.9 USDT |
userB_borrow | 11 USDT |
supposed_rewards | 0.1 USDT |
withdrawable_rewards = min(balance, supposed_rewards ) |
0 USDT |
Later as the situation progresses
# | amt |
---|---|
userA_deposit | 11.8 USDT |
userB_borrow | 12 USDT |
supposed_rewards | 0.2 USDT |
withdrawable_rewards = min(balance, supposed_rewards ) |
0 USDT |
In short, supposed_rewards
is the value to be distributed under <100% borrow, but in the extreme case, the actual payout is 0. Once the markets are back in normal operation, the numbers will catch up.
The accumulation continues under the hood, but is not being distributed as there’re no assets to be sent. We’ll adjust the UI for the claim tab/dialogue.
Liquidation Mechanism
The core of the liquidation is transferDebt
function. Borrowing assetA for assetB can be seen as the “right to buyback assetB for assetA”. The transferDebt
function allows liquidator to transfer this “right to buyback” to himself.
The infamous proposal
The proposal put up a few days ago got a lot of attention. Let’s break it down with as little of taking sides as possible.
a. Setting liquidation threshold to 1
If the proposal is activated, the accounts with outstanding debt of WAVES/EURN/USDN are subject to liquidation. Say, an account have 100 USDC and 40 USDN borrowed(net value = $60). Upon liquidation, up to 40 of USDN debt can be liquidated for up to 42(= 40 * (1 + 0.05)) USDC, So net value would become $58.
THe proposal doesn’t lead to full liquidation of all accounts that have borrows of WAVES/USDN/EURN.
b. Lowering APR
If the proposal is activated, 105% APY will be over soon. Lowering APR will cap borrow rates to around 40%. It will still be a bit larger as the rate depends on totalBorrow/totalSupply
, which is sometimes more than 1.
Thoughts and Moving Forward
- Hey, Alameda Research has(allegedly and indirectly) invested 80M in the Waves ecosystem(although, allegedly, shorted it heavily) by supplying the funds to Vires protocol. Might consider it a successful audit for both from at least one of the top trading firms in crypto.
- In our opinion, the proposal is not that badass as it’s portrayed on twitter.
- We are not sure it’s a good idea to accumulate USDT and USDC rewards for $VIRES stakers during times when suppliers can’t withdraw, maybe it’s a good time to discuss pause of revenue distribution for these markets until the situation is stable again. Another option would be to rework the contracts to reward with LP tokens.
Mitigating the current issue
Here’s what we have in mind: Big accounts are a liability that needs to be liquidated, stalemate is no good.
- Switching to a real-time oracle(once implemented) is still a debatable point especially during volatile times: it can be (too)easily manipulated. Maybe USDN oracle should be based on Backing Ratio of Neutrino Smart Contract instead?
- If massive liquidations of problematic accounts do happen, ensuring it happens gradually during weeks might be more sustainable approach in the long run then fast implosion. What is your opinion?
That being said, we stay committed to the principles of DAO, no decision will be made otherwise: Discussion followed by Voting and then Activation is the way to move forward for every step.
We invite everyone to the discussion: please share your suggestions and opinions in the comments below.