When a user locks their RAAC tokens, they immediately receive voting power. This instant increase affects the total supply of voting tokens and skews the distribution of rewards in FeeCollector. As a result, users can claim rewards that were originally intended for previous holders, effectively inflating their rewards unfairly.
The reward distribution inside FeeCollector is calculated as follows:
Here, the share of rewards is calculated based on the current voting power of a user and the total voting power at that moment. However, since totalVotingPower is updated immediately when voting power is minted, users who lock tokens after rewards have already been distributed can still claim those rewards, even though they were not eligible at the time.
The totalVotingPower is simply the total supply of voting tokens, which updates instantly when new tokens are locked:
This issue is demonstrated in the veRAACToken.test.js proof of concept, where a user receives voting power immediately upon locking RAAC tokens:
Since the reward calculation in FeeCollector uses the current totalVotingPower and userVotingPower, a user who locks tokens after a reward distribution can still claim a portion of the past rewards, which inflates their reward earnings unfairly.
Users can unfairly claim past rewards by locking tokens right before claiming.
Rewards become inflated, leading to incorrect accounting and dilution of rewards for legitimate holders.
totalVotingPower is immediately inflated, which skews reward distribution calculations.
N/A
Implement checkpoint-based reward distribution where rewards are only claimable for users who had voting power before the reward distribution occurred.
Store a historical snapshot of totalVotingPower at the time of each reward distribution instead of using the current value.
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.