The protocol fails to properly validate the total locked RAAC tokens against MAX_TOTAL_LOCKED_AMOUNT
while using incorrect checks for veRAAC supply limits. This allows attackers to bypass intended caps, potentially overflowing the veRAAC total supply and exceeding RAAC lock limits.
Affected Code:
Lock Creation (veRAACToken.sol):
Increase Lock (LockManager.sol):
Root Cause:
The lock()
function incorrectly compares the RAAC token amount to the veRAAC total supply cap (MAX_TOTAL_SUPPLY
), creating a unit mismatch.
The increaseLock()
function lacks validation for maxTotalLocked
, allowing the total locked RAAC to exceed MAX_TOTAL_LOCKED_AMOUNT
.
veRAAC Supply Overflow:
Attackers can mint more veRAAC tokens than allowed by MAX_TOTAL_SUPPLY
through carefully timed short-duration locks.
RAAC Lock Limit Bypass:
The missing maxTotalLocked
check in increaseLock()
allows a single user to bypass per-lock limits by repeatedly increasing their lock amount.
Proof of Concept
Steps to Exploit:
Setup:
MAX_TOTAL_SUPPLY = 100M veRAAC
MAX_TOTAL_LOCKED_AMOUNT = 1B RAAC
Attack:
Attacker locks 400M RAAC
for 1 year via lock()
:
veRAAC minted: 400M * 1/4 = 100M
.
RAAC locked: 400M
(40% of MAX_TOTAL_LOCKED_AMOUNT
).
Attacker creates 3 new accounts and repeats:
Total RAAC locked: 400M * 4 = 1.6B
(exceeds 1B
).
Total veRAAC supply: 100M * 4 = 400M
(exceeds 100M
).
Result:
RAAC Lock Overflow: 1.6B RAAC
locked (160% of limit).
veRAAC Supply Overflow: 400M veRAAC
minted (400% of limit).
Manual code analysis.
Correct veRAAC Supply Check:
Replace the flawed RAAC-based check with a veRAAC-based check in lock()
:
Enforce RAAC Lock Limits:
Uncomment and enforce maxTotalLocked
in LockManager.increaseLock()
:
Add a similar check in veRAACToken.lock()
:
Mitigation Example:
After fixes:
Locking 400M RAAC
for 1 year would mint 100M veRAAC
but check totalLocked + 400M ≤ 1B
(allowed).
A second lock of 600M RAAC
for 1 year would fail the totalLocked
check (400M + 600M > 1B
).
The mismatch between RAAC lock limits and veRAAC supply checks creates systemic risk. Immediate fixes are required to align validation logic with protocol intent.
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.