Root Cause
The emergencyWithdraw function fails to update voting power checkpoints when clearing a user's lock position, unlike the regular withdraw function that properly resets checkpoints:
This creates divergent state handling between normal and emergency withdrawal paths.
Governance Manipulation Risk
Withdrawn users retain historical voting power in checkpoints
Enables voting on past proposals using expired locks
Allows influencing governance decisions after token withdrawal
Protocol State Inconsistency
Checkpoint data becomes out-of-sync with actual token balances
Breaks invariant: checkpointValue == actualVotingPower
Affects all systems relying on historical voting power snapshots
Permanent Historical Record
Emergency-withdrawn positions remain in governance history
Cannot properly audit past voting power allocations
Creates false signals for reward distribution calculations
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.