When users extend their veRAAC locks, an important function is not invoked when it should be.
Whenever users initially lock RAAC tokens for veRAAC tokens or increase their lock after that, the boost state is updated with a call to _updateBoostState(). This is an important call since it updates the global boost state which is used in calculations for rewards.
Let's take a look at what happens when users extend() their lock:
The update to boost state call is completely missing, meanwhile it is making changes to:
Total voting power (by minting/burning tokens)
Total locked amount of tokens (by changing user locked amount based on duration extension)
Both of which must be reflected and updated in the boost state:
Any time users extend their lock, the global boost state will not be updated to reflect the new changes in minted/burned tokens and locked tokens. Since the boost state is used in rewards calculations, this will completely mess them up.
Incorrect rewards calculations and distributions due to missing updates to important parameters when users extend their lock. These updates exist in lock() and increase() but are missing in extend().
Manual Review
Call _updateBoostState towards the end of the functin flow of extend(), after _checkpointState.writeCheckpoint().
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.