The Governance::castVote function uses current voting power instead of snapshotting power at proposal creation time. This allows users to manipulate their voting power after a proposal starts by locking additional tokens, enabling unfair influence over active proposals.
User creates proposal when voting power is 100k veRAAC (meets threshold)
Proposal enters voting period after 1 day delay
User locks additional RAAC tokens during voting period, increasing voting power to 200k veRAAC
User casts vote with doubled voting power
Proposal outcome is skewed by artificially inflated voting power
Relevant code snippet:
Add test in Governance.test.js:
High severity. Attackers can:
Swing close governance votes by temporarily boosting power
Manipulate protocol parameters against community intent
Snapshot voting power at proposal vote cast:
Enforce snapshot in voting validation:
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.