The RAACMinter::getUtilizationRate function incorrectly uses LendingPool::getNormalizedDebt which returns a 27-decimals value (reserve.usageIndex) instead of using the 18-decimals reserve.totalUsage value. This results in a miscalculated utilization rate that is orders of magnitude larger than actual borrowing activity, leading to incorrect emission rate adjustments.
LendingPool reports normalized debt as 1e27 (RAY) through getNormalizedDebt()
StabilityPool has 100,000e18 deposits (1e23)
Utilization rate calculation becomes: (1e27 / 1e23) = 10,000%
Emission rate adjustments use this inflated utilization rate. For example, in this line, calculated utilizationRate is compared with utilizationTarget (default set to 70) to determine new emission rate
Relevant code snippet:
Test case to demonstrate vulnerability:
In RAACMinter.test.js, add this test and run npx hardhat test --grep "should show incorrect utilization due to decimal mismatch"
High severity. The emission rate calculations for RAAC tokens become fundamentally incorrect, leading to unbounded token inflation if utilization appears permanently high. This disrupts the protocol's core tokenomics and economic incentives.
Use correct borrowing metric:
Add explicit interface for total usage:
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.