Core Contracts

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

Incorrect Calculation of `userRewards[user]` in `FeeCollector::claimRewards` Resulting in Single Reward Claim and Record Discrepancy

Summary

The userRewards[user] variable in FeeCollector::claimRewards is incorrectly assigned totalDistributed instead of accumulating pendingReward. During the first reward claim, userRewards[user] gets erroneously set to totalDistributed, causing subsequent calls to _calculatePendingRewards to return zero pending rewards. This prevents users from claiming rewards multiple times and creates inconsistencies between actual received rewards and system records.

Vulnerability Details

function claimRewards(address user) external override nonReentrant whenNotPaused returns (uint256) {
if (user == address(0)) revert InvalidAddress();
uint256 pendingReward = _calculatePendingRewards(user);
if (pendingReward == 0) revert InsufficientBalance();
userRewards[user] = totalDistributed; <==@found
raacToken.safeTransfer(user, pendingReward);
emit RewardClaimed(user, pendingReward);
return pendingReward;
}

Impact

  • Users can only claim rewards once

  • Discrepancy between actual received rewards and system records

Tools Used

  • Manual Review

Recommendations

Correct Assignment of userRewards[user]:

function claimRewards(address user) external override nonReentrant whenNotPaused returns (uint256) {
if (user == address(0)) revert InvalidAddress();
uint256 pendingReward = _calculatePendingRewards(user);
if (pendingReward == 0) revert InsufficientBalance();
- userRewards[user] = totalDistributed;
+ userRewards[user] += pendingReward;
raacToken.safeTransfer(user, pendingReward);
emit RewardClaimed(user, pendingReward);
return pendingReward;
}
Updates

Lead Judging Commences

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

FeeCollector::claimRewards sets `userRewards[user]` to `totalDistributed` seriously grieving users from rewards

Support

FAQs

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

Give us feedback!