The FeeCollector claimRewards
function calculates pending rewards based on the user's current voting power and total voting power at the time of claiming. This allows users to manipulate their rewards by creating new locks potentially reducing rewards for older users. The issue arises because the reward calculation does not account for historical voting power but instead uses the current state.
The reward calculation uses the user's current voting power (veRAACToken.getVotingPower(user)
) and total voting power (veRAACToken.getTotalVotingPower()
). This allows a new users to claim fees for old rewards which is reducing rewards for older users.
The reward calculation does not use a snapshot of the user's voting power at the time of reward distribution. Instead, it dynamically calculates rewards based on the current state, which can be manipulated.
Manual
Implement a different distribution logic to prevent new users claiming rewards.
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.