Core Contracts

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

Infinite Reward Period Due to Moving Period Finish Time

Summary

In the BaseGauge contract, the reward period never truly ends due to periodFinish being calculated based on a continuously updating lastUpdateTime. This means rewards continue indefinitely instead of properly ending at a fixed point in time.

Vulnerability Details

function periodFinish() public view returns (uint256) {
return lastUpdateTime + getPeriodDuration();
}
function lastTimeRewardApplicable() public view returns (uint256) {
return block.timestamp < periodFinish() ? block.timestamp : periodFinish();
}
function _updateReward(address account) internal {
rewardPerTokenStored = getRewardPerToken();
lastUpdateTime = lastTimeRewardApplicable();
// ...
}

The circular dependency creates an infinite period:

  1. lastUpdateTime is set to lastTimeRewardApplicable()

  2. lastTimeRewardApplicable() returns min(block.timestamp, periodFinish())

  3. periodFinish() returns lastUpdateTime + getPeriodDuration()

  4. This means periodFinish is always in the future relative to the current block.timestamp

Impact

Reward periods never actually end.

Tools Used

Manual review

Recommendations

Fix the period finish calculation to be based on the reward period start time rather than the last update time

Updates

Lead Judging Commences

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

BaseGauge period end time miscalculation creates circular dependency between periodFinish() and lastUpdateTime, preventing periods from naturally ending and disrupting reward distribution

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

BaseGauge period end time miscalculation creates circular dependency between periodFinish() and lastUpdateTime, preventing periods from naturally ending and disrupting reward distribution

Support

FAQs

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