Core Contracts

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

`BaseGauge::minBoost` improperly configured to 1e18 (`100,000,000×`) while the maximum boost (`maxBoost`) is set to 25,000 (2.5×)

Summary

The BaseGauge contract have an initialization error where the minimum boost parameter (minBoost) is improperly configured at deployment to 1e18 (100,000,000×) while the maximum boost (maxBoost) is set to 25,000 (2.5×). This inversion creates systemic failures in boost calculations, rendering the protocol's reward distribution mechanism non-functional and creating paradoxical constraints in the boost system.

Vulnerability Details**

The boost system uses two key parameters:

  • maxBoost: Upper limit for reward multipliers (25,000 = 250% / 2.5×)

  • minBoost: Minimum guaranteed multiplier (should be ≤ maxBoost)

These parameters are used in the _applyBoost function to calculate user rewards based on veToken holdings.

Incorrect Initialization (Constructor):

constructor(...) {
// Problematic initialization
boostState.maxBoost = 25000; // 2.5x (correct)
boostState.minBoost = 1e18; // 100,000,000x (incorrect)
...
}
  • All users receive maximum possible rewards regardless of veToken holdings

Impact

All participants receive maximum possible rewards instantly

Tools Used

Manual Review

Recommendations

constructor(
address _rewardToken,
address _stakingToken,
address _controller,
uint256 _maxEmission,
uint256 _periodDuration
) {
rewardToken = IERC20(_rewardToken);
stakingToken = IERC20(_stakingToken);
controller = _controller;
// Initialize roles
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(CONTROLLER_ROLE, _controller);
// Initialize boost parameters
boostState.maxBoost = 25000; // 2.5x
- boostState.minBoost = 1e18;
+ boostState.minBoost = 10000; // 1.0x base multiplier
boostState.boostWindow = 7 days;
uint256 currentTime = block.timestamp;
uint256 nextPeriod = ((currentTime / _periodDuration) * _periodDuration) + _periodDuration;
// Initialize period state
periodState.periodStartTime = nextPeriod;
periodState.emission = _maxEmission;
TimeWeightedAverage.createPeriod(
periodState.votingPeriod,
nextPeriod,
_periodDuration,
0,
10000 // VOTE_PRECISION
);
}
Updates

Lead Judging Commences

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

boostState.minBoost is set to 1e18

Support

FAQs

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

Give us feedback!