Core Contracts

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

Precision Loss Risk in Liquidity Updates

Summary

The updateInterestRatesAndLiquidity function incorrectly downcasts uint256 values to uint128 when updating reserve.totalLiquidity, creating potential overflow risks and precision loss in liquidity calculations.

Issue Description

Code Excerpt:

if (liquidityAdded > 0) {
reserve.totalLiquidity = reserve.totalLiquidity + liquidityAdded.toUint128();
}
if (liquidityTaken > 0) {
if (reserve.totalLiquidity < liquidityTaken) revert InsufficientLiquidity();
reserve.totalLiquidity = reserve.totalLiquidity - liquidityTaken.toUint128();
}

Problem:

  1. Overflow/Underflow Risk:

    • Converting uint256 to uint128 via .toUint128() risks truncation

    • Values exceeding uint128 maximum will overflow

    • liquidityTaken downcasting could cause underflow issues

  2. Precision Issues:

    • Large values above 2^128 - 1 get truncated

    • Results in inaccurate liquidity tracking

    • Affects interest rate calculations

Security Impact

  • High severity: Potential liquidity calculation errors affecting system stability

  • Financial risk: Incorrect calculations may allow excess withdrawals or wrong interest rates

Recommended Fix

  • Remove downcasting and maintain uint256 precision:

if (liquidityAdded > 0) {
reserve.totalLiquidity = reserve.totalLiquidity + liquidityAdded;
}
if (liquidityTaken > 0) {
if (reserve.totalLiquidity < liquidityTaken) revert InsufficientLiquidity();
reserve.totalLiquidity = reserve.totalLiquidity - liquidityTaken;
}
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.