Attacker can lock raac token for maximum period (4 years) to get more voting power and veToken, then call claimRewards()
function to claim more rewards. the issue is claimRewards()
function calculates rewards based on current voting power.
The claimRewards()
function:
as we can see the reward calculation is based on current voting power instead of historical voting power at the time of distribution.
this issue can lead to:
attacker locks 1000 raac token for max duration(4 years) to get voting power
attacker calls claimRewards()
function to get rewards based on his current power
attacker calls emergencyWithdraw()
function to get his raac tokens back
repeats this action until fully drains the FeeCollector
contract
Attacker can drain FeeCollector
contract
Manual Review
Consider calculating rewards based on historical voting power.
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.