Core Contracts

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

Severely inflated emission rates due to incorrect block duration assumption

Summary

Max emission rates calculation are based on 12-second block time, however RAAC is deployed on Base where block duration is ~2 seconds, leading to 6-fold increase in amount of rewards emitted.

Details

RAACMinter.sol has declared benchmark variables used in determining reward emission rates.

uint256 public constant BLOCKS_PER_DAY = 7200; // Assuming 12-second block time
uint256 public constant INITIAL_RATE = 1000 * 1e18; // 1000 RAAC per day
uint256 public constant MAX_BENCHMARK_RATE = 2000 * 1e18 / BLOCKS_PER_DAY; // 2000 RAAC per day maximum
uint256 public constant MAX_EMISSION_UPDATE_INTERVAL = 1 days;
uint256 public constant MAX_ADJUSTMENT_FACTOR = 100; // 100% adjustment per update
uint256 public constant MAX_UTILIZATION_TARGET = 100; // 100% target utilization

However these values are incorrect due to RAAC being deployed on Base, where block duration is 2 seconds and there are ~43200 blocks per day, instead of 7200.
All calculations that involve BLOCKS_PER_DAY will be 6x higher than they should, namely: min/max emission rates and initial emission rate

Most severe impact is found in the minting of RAAC rewards in tick

function tick() external nonReentrant whenNotPaused {
if (emissionUpdateInterval == 0 || block.timestamp >= lastEmissionUpdateTimestamp + emissionUpdateInterval) {
updateEmissionRate();
}
uint256 currentBlock = block.number;
uint256 blocksSinceLastUpdate = currentBlock - lastUpdateBlock;
if (blocksSinceLastUpdate > 0) {
uint256 amountToMint = emissionRate * blocksSinceLastUpdate; // @audit-issue emissionRate is based on 12-sec block durations
// while blockSinceLastUpdate is based on 2-sec block durations
if (amountToMint > 0) {
excessTokens += amountToMint;
lastUpdateBlock = currentBlock;
raacToken.mint(address(stabilityPool), amountToMint); // 6x times more raac rewards will be minted
emit RAACMinted(amountToMint);
}
}
}

Impact

Unfair reward distribution, logic error

Mitigation

Set blocks_per_day in the constructor, tailored for each chain.

Updates

Lead Judging Commences

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

RAACMinter hardcoded BLOCKS_PER_DAY breaks cross-chain compatibility with variable token emission rates

Known issue LightChaser M12

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

RAACMinter hardcoded BLOCKS_PER_DAY breaks cross-chain compatibility with variable token emission rates

Known issue LightChaser M12

Appeal created

inallhonesty Lead Judge 6 months ago
Submission Judgement Published
Invalidated
Reason: Design choice
Assigned finding tags:

RAACMinter hardcoded BLOCKS_PER_DAY breaks cross-chain compatibility with variable token emission rates

Known issue LightChaser M12

Support

FAQs

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

Give us feedback!