Core Contracts

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

Incorrect Asset Valuation in `Treasury::_totalValue` Due to Token Decimal Mismatch

Summary

The Treasury::_totalValue variable accumulates token amounts without considering decimal precision differences, leading to meaningless aggregated values. Direct summation of token quantities with varying decimals (e.g., 18-decimals vs 6-decimals) creates valuation inaccuracies and operational risks.

Vulnerability Details

function deposit(address token, uint256 amount) external override nonReentrant {
if (token == address(0)) revert InvalidAddress();
if (amount == 0) revert InvalidAmount();
IERC20(token).transferFrom(msg.sender, address(this), amount);
_balances[token] += amount;
_totalValue += amount; <==@found
emit Deposited(token, amount);
}
function withdraw(
address token,
uint256 amount,
address recipient
) external override nonReentrant onlyRole(MANAGER_ROLE) {
if (token == address(0)) revert InvalidAddress();
if (recipient == address(0)) revert InvalidRecipient();
if (_balances[token] < amount) revert InsufficientBalance();
_balances[token] -= amount;
_totalValue -= amount; <==@found
IERC20(token).transfer(recipient, amount);
emit Withdrawn(token, amount, recipient);
}

Impact

  • Renders _totalValue metric meaningless

  • Potential fund misallocation decisions based on flawed data

Tools Used

  • Manual Review

Recommendations

Implement Token-Specific Tracking:mapping(address token=>uint256 amount) public tokenToAmount

Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Treasury::deposit increments _totalValue regardless of the token, be it malicious, different decimals, FoT etc.

Support

FAQs

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

Give us feedback!