Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: medium
Invalid

`ReserveLibrary.calculateUtilizationRate()` is implemented incorrectly

Summary

The ReserveLibrary.calculateUtilizationRate() function returns the utilization rate of the reserve. However the implementation of the function is incorrect and returns incorrect value.

Vulnerability Details

The ReserveLibrary.calculateUtilizationRate() function calculates utilizationRate as totalDebt / (totalLiquidity + totalDebt), which is incorrect.

The rateData.optimalUtilizationRate is 80% and utilizationRate can be 80% when totalDebt = 4 * totalLiquidity. This is impossible scenario and the rateData.currentUsageRate and rateData.currentLiquidityRate vairable will be updated incorrectly.

function calculateUtilizationRate(uint256 totalLiquidity, uint256 totalDebt) internal pure returns (uint256) {
if (totalLiquidity < 1) {
return WadRayMath.RAY; // 100% utilization if no liquidity
}
@> uint256 utilizationRate = totalDebt.rayDiv(totalLiquidity + totalDebt).toUint128();
return utilizationRate;
}

Impact

The rateData.currentUsageRate and rateData.currentLiquidityRate vairable will be updated incorrectly.

Tools Used

Manual Review

Recommendations

Implement correct calculation for utilizationRate.

function calculateUtilizationRate(uint256 totalLiquidity, uint256 totalDebt) internal pure returns (uint256) {
if (totalLiquidity < 1) {
return WadRayMath.RAY; // 100% utilization if no liquidity
}
- uint256 utilizationRate = totalDebt.rayDiv(totalLiquidity + totalDebt).toUint128();
+ uint256 utilizationRate = totalDebt.rayDiv(totalLiquidity).toUint128();
return utilizationRate;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 3 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.