The withdraw()
function in veRAACToken.sol fails to call _updateBoostState()
after users withdraw their tokens, leading to incorrect boost calculations for remaining users.
When users withdraw their locked RAAC tokens, the function:
Burns veRAAC tokens
Transfers RAAC tokens back to user
Clears lock data
Updates checkpoints
However, it doesn't update the boost state variables:
_boostState.totalVotingPower
_boostState.totalWeight
These values are used in calculateTimeWeightedBoost()
to determine reward multipliers for remaining users.
Remaining users receive lower boost multipliers than they should
Reward distribution becomes inaccurate
Manual review
_updateBoostState()
call at the end of the withdraw function:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.