A critical vulnerability in veRAACToken causes accidental token burning during lock extensions. When users extend their locks, the contract incorrectly compares their initial balance to a new voting power calculation, resulting in unintended loss of tokens.
The vulnerability occurs in three key steps:
Lock extension calculates total new duration:
New voting power is calculated based on this duration:
The critical flaw is in the comparison and burning logic when calling veRAACToken.extend():
User locks 1000 tokens for 4 years (1460 days)
Initial power = 1000 veTokens (1000 * 1460 / 1460)
After 3 years, user extends for 2 more years
Remaining time = 1 year (365 days)
Extension = 2 years (730 days)
Total new duration = 1095 days
New power = 750 veTokens (1000 * 1095 / 1460)
Result: 250 veTokens are burned (1000 - 750)
User lost 250 veTokens when extending his locked position.
Users automatically lose voting power when extending their locks, directly contradicting the protocol's incentive mechanism
Earlier extensions result in larger token burns, discouraging users from extending their locks proactively
Governance participation is negatively impacted as users lose voting power for attempting to increase their commitment to the protocol
Manual Review
Keep the original minted amount and only mint additional tokens if the new duration would result in more voting power:
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.