The increase()
function in veRAACToken.sol
lacks a MAX_TOTAL_SUPPLY
check, which can lead to unchecked supply growth. Given that MAX_TOTAL_SUPPLY
(100 million tokens) is typically 1/10 of MAX_TOTAL_LOCKED_AMOUNT
(1 billion tokens), and totalSupply()
is expected to be 0.25 to 1.0 times _lockState.totalLocked
, this means totalSupply()
could significantly exceed MAX_TOTAL_SUPPLY
under certain conditions.
This dilutes users' share in key calculations and allows large players to disproportionately benefit from the system.
Unlike lock()
, the MAX_TOTAL_SUPPLY
check is missing in increase()
and extend()
:
Since, both increase()
and extend()
could entail minting extra veTokens
, not having the needed total supply limit check could violate the intended design. As a result, users can continue increasing locked RAAC
tokens without constraints, inflating totalSupply()
unchecked.
Now, totalSupply()
is expected to be 0.25x to 1.0x of _lockState.totalLocked
. However, given that MAX_TOTAL_LOCKED_AMOUNT
is 10x MAX_TOTAL_SUPPLY
, if unchecked, totalSupply()
can exceed way beyond the intended ratio, causing severe dilution.
The unexpected behavior in tokenomics and governance, e.g. boost, calculations could lead to disproportionate voting power, i.e. users using multiple accounts could extend/consolidate their voting power unbounded whereas normal users are getting dwarfed correspondingly with their voting ability.
For example, multiple users can lock tokens up to their individual limit, thereby breaking tokenomics as these activities increasingly dilute the boost multiplier for a user's rewards long term due to totalVeSupply
, the denominator that continues to grow larger than the capped MAX_TOTAL_SUPPLY
. This will result in returning a smaller than intended votingPowerRatio
in BoostCalculatorcalculateBoost()
:
In extreme cases, precision issue could surface on voters with very small voting power (i.e., veBalance
or point.bias
) and assigned params.minBoost
only.
Manual
Consider making the following change:
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.