The RAACMinter
contract, which holds both minter and owner roles of RAACToken
, has no functionality to transfer these roles to another contract. When emergencyShutdown()
is called, it permanently pauses the contract without any way to transfer control, effectively locking critical RAACToken
minting functionality forever which affects the StabilityPool
contract's ability to mint RAACToken
rewards.
The RAACMinter
contract is both the owner and minter of RAACToken
, controlling critical functions like:
Token minting through mint()
Tax rate adjustments via setSwapTaxRate()
and setBurnTaxRate()
Fee collector management through setFeeCollector()
When emergencyShutdown()
is called:
It sets emissionRate
to 0
Pauses the contract
Has no mechanism to transfer owner/minter roles in the RAACToken
contract to a new contract
This means the RAACToken
becomes permanently locked with:
No ability to mint new tokens
No ability to adjust tax rates
No ability to update fee collector
No way to transfer control to a new contract
The protocol becomes permanently frozen if emergencyShutdown() is called, with no recovery path. This could lead to:
Complete halt of protocol emissions
Inability to adjust token parameters
No way to migrate to a new minter contract
Permanent loss of protocol functionality
Manual review
Steps to reproduce:
Deploy RAACToken
contract
Deploy RAACMinter
contract
raacToken.setMinter(raacMinter.address);
raacToken.transferOwnership(raacMinter.address);
RAACMinter's owner call emergencyShutdown()
because of some issue
Now RAACTMinter
cannot be used, and there is no way to transfer the owner/minter roles in the RAACToken
contract to a new contract
Add functions to transfer both owner and minter roles from the RAACMinter
contract:
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.