Vulnerability Details
The BaseGauge::earned#L585 is using the wrong value for calculation.
* @notice Calculates earned rewards for account
* @param account Address to calculate earnings for
* @return Amount of rewards earned
*/
function earned(address account) public view returns (uint256) {
return (getUserWeight(account) *
(getRewardPerToken() - userStates[account].rewardPerTokenPaid) / 1e18 👈👈
) + userStates[account].rewards;
}
Impact
When calculating earned rewards
it should use BIPS
not the 1e18
Tools Used
Manual
Recommendations
Use the BIPS value
/**
* @notice Calculates earned rewards for account
* @param account Address to calculate earnings for
* @return Amount of rewards earned
*/
function earned(address account) public view returns (uint256) {
return (getUserWeight(account) *
- (getRewardPerToken() - userStates[account].rewardPerTokenPaid) / 1e18
+ (getRewardPerToken() - userStates[account].rewardPerTokenPaid) / 10000
) + userStates[account].rewards;
}