[M-1] Inconsistent scaling in boost parameters initialization causes incorrect min/max relationship
Description:
In BaseGauge's constructor, boost parameters use inconsistent scaling:
constructor(...) {
boostState.maxBoost = 25000;
boostState.minBoost = 1e18;
}
minBoost in WAD (1e18) is significantly larger than maxBoost in basis points (25000), inverting their intended relationship.
Impact:
Invalid boost range where minimum exceeds maximum
Potential revert or incorrect calculations in boost-related functions
Breaks core boost mechanism assumptions
Proof of Concept:
constructor(
address _rewardToken,
address _stakingToken,
address _controller,
uint256 _maxEmission,
uint256 _periodDuration
) {
rewardToken = IERC20(_rewardToken);
stakingToken = IERC20(_stakingToken);
controller = _controller;
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(CONTROLLER_ROLE, _controller);
boostState.maxBoost = 25000;
boostState.minBoost = 1e18;
boostState.boostWindow = 7 days;
uint256 currentTime = block.timestamp;
uint256 nextPeriod = ((currentTime / _periodDuration) * _periodDuration) + _periodDuration;
periodState.periodStartTime = nextPeriod;
periodState.emission = _maxEmission;
TimeWeightedAverage.createPeriod(
periodState.votingPeriod,
nextPeriod,
_periodDuration,
0,
10000
);
}
Recommendation:
Use consistent scaling for both parameters - either both in basis points or both in WAD precision.
boostState.maxBoost = 25000;
boostState.minBoost = 1e18;
boostState.maxBoost = 25000;
boostState.minBoost = 10000;
boostState.maxBoost = 2.5e18;
boostState.minBoost = 1e18;