The StabilityPool's liquidation mechanism is completely broken because it expects to have crvUSD tokens available for liquidations, but there is no way for the contract to receive these tokens. All crvUSD deposits are sent to the rToken contract instead of the StabilityPool.
When users deposit crvUSD into the LendingPool, the tokens are transferred to the rToken contract:
uint256 mintedAmount = ReserveLibrary.deposit(reserve, rateData, amount, msg.sender);
However, the StabilityPool's liquidateBorrower function expects to have sufficient crvUSD available:
This mismatch means:
StabilityPool never receives crvUSD tokens
crvUSDBalance check will always revert
Liquidations cannot be executed
The entire liquidation mechanism is non-functional
Impact
The protocol's liquidation mechanism is completely broken. No liquidations can be performed & bad debt cant be cleared.
Manual Review
Modify token flow to ensure StabilityPool has access to crvUSD or fix the entire liquidation logic.
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.