The RAACToken
contract allows minting only from a single authorized address. RAACMinter
uses its tick() function to mint rewards for the stabilityPool
, while RAACReleaseOrchestrator
must release vested tokens for beneficiaries. Both modules are designed to operate concurrently; however, the current implementation forces only one module to have minting authority, causing RAACReleaseOrchestrator’s actions—such as emergencyRevoke()—to fail when RAACMinter is set as minter in RaacToken
.
The RAAC token contract enforces minting with a single minter variable and the following modifier:
The setter function is defined as:
This authorizes only one contract to mint tokens at any given time. For instance, RAACMinter’s tick() function mints rewards to the stability pool:
Conversely, RAACReleaseOrchestrator’s emergencyRevoke() function (which may require minting in a vesting release scenario) would attempt to use the RAAC token contract as follows:
Since the RAAC token contract allows minting only from one minter, if RAACMinter is set as the minter, any vesting-related minting (like emergencyRevoke()) call by RAACReleaseOrchestrator will revert with OnlyMinterCanMint().
The oversights results in RAACMinter’s tick() function successfully minting rewards to the stability pool while completely blocking vesting releases managed by RAACReleaseOrchestrator. This directly causes vesting schedules to stall, denying beneficiaries their scheduled token releases and potentially resulting in a denial-of-service condition for vesting functions.
Manual Review
Update the RAAC token contract to support multiple authorized minters using a role-based access control mechanism. For example, replace the single minter variable with a mapping and modify the minting check:
And update the setter function:
This change allows both RAACMinter and RAACReleaseOrchestrator to have minting rights concurrently, ensuring that both reward distribution and vesting token releases occur without conflict
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.