|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
// OpenZeppelin Contracts (last updated v4.9.0) (access/IAccessControlDefaultAdminRules.sol)
|
|
|
|
|
|
|
|
pragma solidity ^0.8.0;
|
|
|
|
|
|
|
|
import "./IAccessControl.sol";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev External interface of AccessControlDefaultAdminRules declared to support ERC165 detection.
|
|
|
|
*
|
|
|
|
* _Available since v4.9._
|
|
|
|
*/
|
|
|
|
interface IAccessControlDefaultAdminRules is IAccessControl {
|
|
|
|
/**
|
|
|
|
* @dev Emitted when a {defaultAdmin} transfer is started, setting `newAdmin` as the next
|
|
|
|
* address to become the {defaultAdmin} by calling {acceptDefaultAdminTransfer} only after `acceptSchedule`
|
|
|
|
* passes.
|
|
|
|
*/
|
|
|
|
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Emitted when a {pendingDefaultAdmin} is reset if it was never accepted, regardless of its schedule.
|
|
|
|
*/
|
|
|
|
event DefaultAdminTransferCanceled();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Emitted when a {defaultAdminDelay} change is started, setting `newDelay` as the next
|
|
|
|
* delay to be applied between default admin transfer after `effectSchedule` has passed.
|
|
|
|
*/
|
|
|
|
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Emitted when a {pendingDefaultAdminDelay} is reset if its schedule didn't pass.
|
|
|
|
*/
|
|
|
|
event DefaultAdminDelayChangeCanceled();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Returns the address of the current `DEFAULT_ADMIN_ROLE` holder.
|
|
|
|
*/
|
|
|
|
function defaultAdmin() external view returns (address);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Returns a tuple of a `newAdmin` and an accept schedule.
|
|
|
|
*
|
|
|
|
* After the `schedule` passes, the `newAdmin` will be able to accept the {defaultAdmin} role
|
|
|
|
* by calling {acceptDefaultAdminTransfer}, completing the role transfer.
|
|
|
|
*
|
|
|
|
* A zero value only in `acceptSchedule` indicates no pending admin transfer.
|
|
|
|
*
|
|
|
|
* NOTE: A zero address `newAdmin` means that {defaultAdmin} is being renounced.
|
|
|
|
*/
|
|
|
|
function pendingDefaultAdmin() external view returns (address newAdmin, uint48 acceptSchedule);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Returns the delay required to schedule the acceptance of a {defaultAdmin} transfer started.
|
|
|
|
*
|
|
|
|
* This delay will be added to the current timestamp when calling {beginDefaultAdminTransfer} to set
|
|
|
|
* the acceptance schedule.
|
|
|
|
*
|
|
|
|
* NOTE: If a delay change has been scheduled, it will take effect as soon as the schedule passes, making this
|
|
|
|
* function returns the new delay. See {changeDefaultAdminDelay}.
|
|
|
|
*/
|
|
|
|
function defaultAdminDelay() external view returns (uint48);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Returns a tuple of `newDelay` and an effect schedule.
|
|
|
|
*
|
|
|
|
* After the `schedule` passes, the `newDelay` will get into effect immediately for every
|
|
|
|
* new {defaultAdmin} transfer started with {beginDefaultAdminTransfer}.
|
|
|
|
*
|
|
|
|
* A zero value only in `effectSchedule` indicates no pending delay change.
|
|
|
|
*
|
|
|
|
* NOTE: A zero value only for `newDelay` means that the next {defaultAdminDelay}
|
|
|
|
* will be zero after the effect schedule.
|
|
|
|
*/
|
|
|
|
function pendingDefaultAdminDelay() external view returns (uint48 newDelay, uint48 effectSchedule);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Starts a {defaultAdmin} transfer by setting a {pendingDefaultAdmin} scheduled for acceptance
|
|
|
|
* after the current timestamp plus a {defaultAdminDelay}.
|
|
|
|
*
|
|
|
|
* Requirements:
|
|
|
|
*
|
|
|
|
* - Only can be called by the current {defaultAdmin}.
|
|
|
|
*
|
|
|
|
* Emits a DefaultAdminRoleChangeStarted event.
|
|
|
|
*/
|
|
|
|
function beginDefaultAdminTransfer(address newAdmin) external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Cancels a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.
|
|
|
|
*
|
|
|
|
* A {pendingDefaultAdmin} not yet accepted can also be cancelled with this function.
|
|
|
|
*
|
|
|
|
* Requirements:
|
|
|
|
*
|
|
|
|
* - Only can be called by the current {defaultAdmin}.
|
|
|
|
*
|
|
|
|
* May emit a DefaultAdminTransferCanceled event.
|
|
|
|
*/
|
|
|
|
function cancelDefaultAdminTransfer() external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Completes a {defaultAdmin} transfer previously started with {beginDefaultAdminTransfer}.
|
|
|
|
*
|
|
|
|
* After calling the function:
|
|
|
|
*
|
|
|
|
* - `DEFAULT_ADMIN_ROLE` should be granted to the caller.
|
|
|
|
* - `DEFAULT_ADMIN_ROLE` should be revoked from the previous holder.
|
|
|
|
* - {pendingDefaultAdmin} should be reset to zero values.
|
|
|
|
*
|
|
|
|
* Requirements:
|
|
|
|
*
|
|
|
|
* - Only can be called by the {pendingDefaultAdmin}'s `newAdmin`.
|
|
|
|
* - The {pendingDefaultAdmin}'s `acceptSchedule` should've passed.
|
|
|
|
*/
|
|
|
|
function acceptDefaultAdminTransfer() external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Initiates a {defaultAdminDelay} update by setting a {pendingDefaultAdminDelay} scheduled for getting
|
|
|
|
* into effect after the current timestamp plus a {defaultAdminDelay}.
|
|
|
|
*
|
|
|
|
* This function guarantees that any call to {beginDefaultAdminTransfer} done between the timestamp this
|
|
|
|
* method is called and the {pendingDefaultAdminDelay} effect schedule will use the current {defaultAdminDelay}
|
|
|
|
* set before calling.
|
|
|
|
*
|
|
|
|
* The {pendingDefaultAdminDelay}'s effect schedule is defined in a way that waiting until the schedule and then
|
|
|
|
* calling {beginDefaultAdminTransfer} with the new delay will take at least the same as another {defaultAdmin}
|
|
|
|
* complete transfer (including acceptance).
|
|
|
|
*
|
|
|
|
* The schedule is designed for two scenarios:
|
|
|
|
*
|
|
|
|
* - When the delay is changed for a larger one the schedule is `block.timestamp + newDelay` capped by
|
|
|
|
* {defaultAdminDelayIncreaseWait}.
|
|
|
|
* - When the delay is changed for a shorter one, the schedule is `block.timestamp + (current delay - new delay)`.
|
|
|
|
*
|
|
|
|
* A {pendingDefaultAdminDelay} that never got into effect will be canceled in favor of a new scheduled change.
|
|
|
|
*
|
|
|
|
* Requirements:
|
|
|
|
*
|
|
|
|
* - Only can be called by the current {defaultAdmin}.
|
|
|
|
*
|
|
|
|
* Emits a DefaultAdminDelayChangeScheduled event and may emit a DefaultAdminDelayChangeCanceled event.
|
|
|
|
*/
|
|
|
|
function changeDefaultAdminDelay(uint48 newDelay) external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Cancels a scheduled {defaultAdminDelay} change.
|
|
|
|
*
|
|
|
|
* Requirements:
|
|
|
|
*
|
|
|
|
* - Only can be called by the current {defaultAdmin}.
|
|
|
|
*
|
|
|
|
* May emit a DefaultAdminDelayChangeCanceled event.
|
|
|
|
*/
|
|
|
|
function rollbackDefaultAdminDelay() external;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Maximum time in seconds for an increase to {defaultAdminDelay} (that is scheduled using {changeDefaultAdminDelay})
|
|
|
|
* to take effect. Default to 5 days.
|
|
|
|
*
|
|
|
|
* When the {defaultAdminDelay} is scheduled to be increased, it goes into effect after the new delay has passed with
|
|
|
|
* the purpose of giving enough time for reverting any accidental change (i.e. using milliseconds instead of seconds)
|
|
|
|
* that may lock the contract. However, to avoid excessive schedules, the wait is capped by this function and it can
|
|
|
|
* be overrode for a custom {defaultAdminDelay} increase scheduling.
|
|
|
|
*
|
|
|
|
* IMPORTANT: Make sure to add a reasonable amount of time while overriding this value, otherwise,
|
|
|
|
* there's a risk of setting a high new delay that goes into effect almost immediately without the
|
|
|
|
* possibility of human intervention in the case of an input error (eg. set milliseconds instead of seconds).
|
|
|
|
*/
|
|
|
|
function defaultAdminDelayIncreaseWait() external view returns (uint48);
|
|
|
|
}
|