increase which allows a user to add tokens to an existing lock and mint additional veTokens, does not include a check to ensure that totalSupply() plus the minted amount (newPower - balanceOf(msg.sender)) does not exceed MAX_TOTAL_SUPPLY. In contrast, the lock function includes if (totalSupply() + amount > MAX_TOTAL_SUPPLY) revert TotalSupplyLimitExceeded(), albeit with its own unit inconsistency (addressed separately). While increase checks the per-user limit (MAX_LOCK_AMOUNT) via _lockState.increaseLock, the absence of a global cap check allows totalSupply() to surpass MAX_TOTAL_SUPPLY, violating a key protocol constraint and creating inconsistency with lock.
increase::veRAACToken.sol
increase lacks a counterpart to lock’s totalSupply() + amount > MAX_TOTAL_SUPPLY check, allowing _mint(newPower - balanceOf(msg.sender)) to increase totalSupply() without cap validation.
The absence of a totalSupply() cap check in increase results in unbounded veToken Issuance:
_mint(newPower - balanceOf(msg.sender)) can push totalSupply() beyond MAX_TOTAL_SUPPLY if newPower significantly exceeds the user’s current balance, with no revert which violates the intended veToken supply cap, leading to over-issuance.
Inconsistency with lock:
Impact: lock attempts to enforce MAX_TOTAL_SUPPLY (despite unit issues), while increase bypasses it, allowing users to exceed the cap incrementally via repeated increases, creating an uneven application of protocol rules.
Manual review
Add MAX_TOTAL_SUPPLY Check with Correct Units:
Validate totalSupply() + (newPower - balanceOf(msg.sender)) before minting, aligning with veToken issuance:
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.