Core Contracts

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

Minimum Emission Rate Misconfiguration in `RAACMinter` Contract

Summary

The RAACMinter contract currently sets its minimum emission rate too low. Under low utilization conditions, the emission rate can be driven down to a level corresponding to 100 RAAC tokens per day, instead of the intended 1000 RAAC tokens per day. This misconfiguration may lead to insufficient token emissions, adversely affecting protocol incentives and economic stability.

Vulnerability Details

The contract defines the minimum and maximum emission rates as follows:

uint256 public minEmissionRate = 100 * 1e18 / BLOCKS_PER_DAY; // 100 RAAC per day minimum
uint256 public maxEmissionRate = 2000 * 1e18 / BLOCKS_PER_DAY; // 2000 RAAC per day maximum
  • Current Values (Per Block):

    • minEmissionRate: Approximately 0.013888888888888888e18 per block (100 RAAC/day) -->>$ 37.19

    • maxEmissionRate: Approximately 0.277777777777777777e18 per block (2000 RAAC/day) -->>$ 743.90

    • Typical emissionRate: Around 0.138888888888888888e18 per block (roughly 1000 RAAC/day under balanced conditions -->>$ 371.95

Proof-of-Concept (POC)

  1. Initial State:
    Assume the system is operating normally with an emissionRate near the intended 1000 RAAC per day value. The benchmarkRate is set to this level, and the system is targeting a utilization of 70%.

  2. Low Utilization Scenario:
    Suppose that due to lower than expected borrowing (or higher deposits), the system utilization drops significantly below the 70% target.

    • The calculateNewEmissionRate() function will compute a decrease in the emissionRate based on the adjustment factor.

    • If the decrease drives the new rate below the current minimum, the contract enforces the lower bound by setting:

      emissionRate = minEmissionRate;
  3. Resulting Values:
    With the current configuration:

    • minEmissionRate = 100 * 1e18 / BLOCKS_PER_DAY ≈ 0.013888888888888888e18 per block.

    • Over one day (7200 blocks), this results in:

      0.013888888888888888e18 * 7200 = 100e18 RAAC tokens per day.
    • In USD terms (as per the provided estimates), this is approximately $37.19 per day.

  4. Intended Behavior:
    The audit suggests that the minimum should be set 10 times higher (i.e., 1000 RAAC per day) to maintain proper incentives. With the corrected configuration:

    • Correct minEmissionRate = 1000 * 1e18 / BLOCKS_PER_DAY, which equals approximately 0.138888888888888888e18 per block.

    • Over one day, this results in 1000e18 RAAC tokens minted, roughly equating to $371.95 per day.

This POC demonstrates that under low utilization conditions, the current configuration forces the system to emit far fewer tokens than intended, as the emission rate bottoms out at a much lower threshold.

Impact

Minimum Rate: 100 RAAC/day = 0.01388 RAAC/block

Maximum Rate: 2000 RAAC/day = 0.2777 RAAC/block

Initial Rate: 1000 RAAC/day = 0.1388 RAAC/block

The minimum rate represents just 10% of the initial emission rate and 5% of the maximum rate, creating an asymmetric risk profile.

The low minimum emission rate may result in insufficient token rewards, reducing the incentive for participation and undermining the protocol’s economic model.

Tools Used

Manual Review

Recommendation:

Increase the minimum emission rate to 1000 RAAC per day (i.e., set minEmissionRate to 1000 * 1e18 / BLOCKS_PER_DAY) to ensure sufficient token rewards even during low utilization periods. This adjustment will help maintain proper protocol incentives and economic stability.

- uint256 public minEmissionRate = 100 * 1e18 / BLOCKS_PER_DAY; // 100 RAAC per day minimum
+ uint256 public minEmissionRate = 1000 * 1e18 / BLOCKS_PER_DAY; // 1000 RAAC per day minimum
uint256 public maxEmissionRate = 2000 * 1e18 / BLOCKS_PER_DAY; // 2000 RAAC per day maximum
uint256 public adjustmentFactor = 5; // 5% adjustment per update
uint256 public utilizationTarget = 70; // 70% target utilization
Updates

Lead Judging Commences

inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Design choice

Support

FAQs

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