Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: low
Valid

Unchecked Supply Cap in `veRAACToken.extend` Allows Governance Token Inflation

Summary

The veRAACToken contract fails to enforce its maximum supply cap during lock extensions, allowing potential inflation of governance tokens beyond protocol limits. The veRAACToken.extend function mints new voting power tokens when increasing lock durations but omits critical validation against the MAX_TOTAL_SUPPLY constant. This oversight enables actors to bypass the supply cap through repeated lock extensions, directly contradicting the TotalSupplyLimitExceeded error defined in the interface.

This vulnerability threatens the protocol's core governance mechanics by allowing artificial inflation of voting power, which controls all key protocol functions including emissions, parameter changes, and fund allocations. The missing check creates a systemic risk where a single malicious actor could theoretically mint unlimited veRAAC tokens, fundamentally breaking the protocol's tokenomics.

Vulnerability Details

The vulnerability exists in the veRAAC token lock extension mechanism where new voting power tokens are minted without proper supply cap validation. The affected code occurs in function veRAACToken.extend (veRAACToken.sol#L299):

contract veRAACToken is ERC20, Ownable, ReentrancyGuard, IveRAACToken {
function extend(uint256 newDuration) external nonReentrant whenNotPaused {
// Extend lock using LockManager
uint256 newUnlockTime = _lockState.extendLock(msg.sender, newDuration);
// Update voting power
LockManager.Lock memory userLock = _lockState.locks[msg.sender];
(int128 newBias, int128 newSlope) = _votingState.calculateAndUpdatePower(
msg.sender,
userLock.amount,
newUnlockTime
);
// Update checkpoints
uint256 oldPower = balanceOf(msg.sender);
uint256 newPower = uint256(uint128(newBias));
_checkpointState.writeCheckpoint(msg.sender, newPower);
// Update veToken balance
if (newPower > oldPower) {
@> _mint(msg.sender, newPower - oldPower);
} else if (newPower < oldPower) {
_burn(msg.sender, oldPower - newPower);
}
emit LockExtended(msg.sender, newUnlockTime);
}
}

This implementation flaw violates the protocol's tokenomics by potentially allowing unlimited veRAAC token minting through repeated lock extensions, which could dilute voting power distributions and destabilize governance mechanisms. The vulnerability is particularly critical given that veRAAC tokens directly control protocol governance and reward distributions.

Impact

The absence of supply cap validation in lock extensions creates three critical risks to protocol integrity:

  1. Tokenomics Breakdown
    Unchecked minting could permanently exceed the MAX_TOTAL_SUPPLY, rendering the protocol's deflationary mechanisms and voting power calculations ineffective

  2. Governance Capture
    Malicious actors could strategically extend locks to mint excess voting tokens, enabling:

    • Proposal manipulation

    • Gauge weight control

    • Protocol parameter changes

  3. Economic Spiral
    Excessive supply would:

    • Dilute existing holders' voting power

    • Distort RAAC emission schedules

    • Potentially collapse the ve-token value proposition

This vulnerability fundamentally undermines the protocol's governance security model, as veRAAC tokens directly control:

  • Emission directions (via gauges)

  • Protocol parameter upgrades

  • Treasury fund allocations

Tools Used

Manual Review

Recommendations

Add explicit checks against MAX_TOTAL_SUPPLY in veRAACToken.extend:

uint256 newAmount = newPower - oldPower;
if (totalSupply() + newAmount > MAX_TOTAL_SUPPLY) revert TotalSupplyLimitExceeded();
_mint(msg.sender, newAmount);
Updates

Lead Judging Commences

inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Incorrect `MAX_TOTAL_SUPPLY` check in the `veRAACToken::lock/extend` function of `veRAACToken` could harm locking functionality

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.