The Stability Pool contract lacks a mechanism to obtain crvUSD needed for liquidations, despite accepting rToken deposits from users. This breaks the core liquidation functionality
The StabilityPool contract accepts rToken deposits from users and is meant to participate in liquidations by providing crvUSD to repay defaulted loans. However, there is no mechanism to convert the deposited rToken to crvUSD needed for liquidations:
The StabilityPool::liquidateBorrower() function requires crvUSD to repay debt:
But the contract only accepts rToken deposits and has no way to:
Accept direct crvUSD deposits
Withdraw rToken from LendingPool to get crvUSD
This means users can deposit rToken but the StabilityPool can never perform its core liquidation function.
Core protocol functionality is broken - liquidations through StabilityPool cannot work
Protocol security is compromised as bad debt cannot be liquidated through the StabilityPool
Manual review
Add the following test to test/e2e/protocols-tests.js:
Add mechanism to convert rTokens to crvUSD:
Call this before liquidations:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.