The veRAACToken contract maintains duplicate lock tracking mechanisms but only updates one while referencing the empty one for boost calculations, leading to broken boost mechanics and incorrect reward distributions.
The contract has two parallel structures for tracking user locks:
A public mapping that's never updated:
mapping(address => Lock) public locks;
The actually used lock state in LockManager:
LockManager.LockState private _lockState;
The critical issue occurs in the increase function:
All boost values will be calculated as if users have 0 locked tokens
Affects reward distributions across the entire protocol
Remove Redundant Mapping
mapping(address => Lock) public locks;
Fix Boost State Updates
Add Lock State Validation
Update Public View Functions
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.