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.