In the Adminable
contract, the transferAdmin
function allows for an immediate transfer of the admin role to a new address. However, using a two-step admin transfer pattern is often recommended to prevent accidental or malicious immediate transfers. OpenZeppelin’s Ownable
contract implements a robust two-step ownership transfer mechanism that could be adapted for this Adminable
contract.
The transferAdmin
function in Adminable
uses an immediate transfer of admin rights, which poses a risk if an incorrect address is set as the new admin or if a transaction is accidentally executed. A two-step admin transfer mechanism, such as the one in OpenZeppelin's Ownable
, could prevent unintended transfers by requiring the new admin to explicitly accept the role.
A two-step transfer process would reduce the risk of accidental admin transfers and offer more secure and deliberate role management.
Manual Review
Use Openzeppelin's Ownable2Step contract: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable2Step.sol
Add Pending Admin State Variable: Introduce a pendingAdmin
address state variable to store the address of the new admin until they accept the role.
Modify transferAdmin
to Set Pending Admin: Update the transferAdmin
function so that it sets the pendingAdmin
instead of transferring immediately.
Create an acceptAdmin
Function: Add an acceptAdmin
function that the pending admin must call to complete the transfer.
Use OpenZeppelin’s Pattern as Reference: OpenZeppelin’s Ownable
contract provides a well-tested pattern that could be adapted here.
This two-step mechanism requires both the current and new admin to confirm the transfer, reducing the chance of accidental or malicious admin changes.
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.