# TimelockController

*Contract module which acts as a timelocked controller. When set as the owner of an `Ownable` smart contract, it enforces a timelock on all `onlyOwner` maintenance operations. This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. By default, this contract is self administered, meaning administration tasks have to go through the timelock process. The proposer (resp executor) role is in charge of proposing (resp executing) operations. A common use case is to position this {TimelockController} as the owner of a smart contract, with a multisig or a DAO as the sole proposer. Available since v3.3.*

## Methods

### DEFAULT\_ADMIN\_ROLE

```solidity
function DEFAULT_ADMIN_ROLE() external view returns (bytes32)
```

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | bytes32 | undefined   |

### EXECUTOR\_ROLE

```solidity
function EXECUTOR_ROLE() external view returns (bytes32)
```

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | bytes32 | undefined   |

### PROPOSER\_ROLE

```solidity
function PROPOSER_ROLE() external view returns (bytes32)
```

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | bytes32 | undefined   |

### TIMELOCK\_ADMIN\_ROLE

```solidity
function TIMELOCK_ADMIN_ROLE() external view returns (bytes32)
```

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | bytes32 | undefined   |

### cancel

```solidity
function cancel(bytes32 id) external nonpayable
```

*Cancel an operation. Requirements: - the caller must have the 'proposer' role.*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| id   | bytes32 | undefined   |

### execute

```solidity
function execute(address target, uint256 value, bytes data, bytes32 predecessor, bytes32 salt) external payable
```

*Execute an (ready) operation containing a single transaction. Emits a {CallExecuted} event. Requirements: - the caller must have the 'executor' role.*

#### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| target      | address | undefined   |
| value       | uint256 | undefined   |
| data        | bytes   | undefined   |
| predecessor | bytes32 | undefined   |
| salt        | bytes32 | undefined   |

### executeBatch

```solidity
function executeBatch(address[] targets, uint256[] values, bytes[] datas, bytes32 predecessor, bytes32 salt) external payable
```

*Execute an (ready) operation containing a batch of transactions. Emits one {CallExecuted} event per transaction in the batch. Requirements: - the caller must have the 'executor' role.*

#### Parameters

| Name        | Type       | Description |
| ----------- | ---------- | ----------- |
| targets     | address\[] | undefined   |
| values      | uint256\[] | undefined   |
| datas       | bytes\[]   | undefined   |
| predecessor | bytes32    | undefined   |
| salt        | bytes32    | undefined   |

### getMinDelay

```solidity
function getMinDelay() external view returns (uint256 duration)
```

*Returns the minimum delay for an operation to become valid. This value can be changed by executing an operation that calls `updateDelay`.*

#### Returns

| Name     | Type    | Description |
| -------- | ------- | ----------- |
| duration | uint256 | undefined   |

### getRoleAdmin

```solidity
function getRoleAdmin(bytes32 role) external view returns (bytes32)
```

*Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {\_setRoleAdmin}.*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| role | bytes32 | undefined   |

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | bytes32 | undefined   |

### getTimestamp

```solidity
function getTimestamp(bytes32 id) external view returns (uint256 timestamp)
```

*Returns the timestamp at with an operation becomes ready (0 for unset operations, 1 for done operations).*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| id   | bytes32 | undefined   |

#### Returns

| Name      | Type    | Description |
| --------- | ------- | ----------- |
| timestamp | uint256 | undefined   |

### grantRole

```solidity
function grantRole(bytes32 role, address account) external nonpayable
```

*Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have `role`'s admin role.*

#### Parameters

| Name    | Type    | Description |
| ------- | ------- | ----------- |
| role    | bytes32 | undefined   |
| account | address | undefined   |

### hasRole

```solidity
function hasRole(bytes32 role, address account) external view returns (bool)
```

*Returns `true` if `account` has been granted `role`.*

#### Parameters

| Name    | Type    | Description |
| ------- | ------- | ----------- |
| role    | bytes32 | undefined   |
| account | address | undefined   |

#### Returns

| Name | Type | Description |
| ---- | ---- | ----------- |
| \_0  | bool | undefined   |

### hashOperation

```solidity
function hashOperation(address target, uint256 value, bytes data, bytes32 predecessor, bytes32 salt) external pure returns (bytes32 hash)
```

*Returns the identifier of an operation containing a single transaction.*

#### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| target      | address | undefined   |
| value       | uint256 | undefined   |
| data        | bytes   | undefined   |
| predecessor | bytes32 | undefined   |
| salt        | bytes32 | undefined   |

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| hash | bytes32 | undefined   |

### hashOperationBatch

```solidity
function hashOperationBatch(address[] targets, uint256[] values, bytes[] datas, bytes32 predecessor, bytes32 salt) external pure returns (bytes32 hash)
```

*Returns the identifier of an operation containing a batch of transactions.*

#### Parameters

| Name        | Type       | Description |
| ----------- | ---------- | ----------- |
| targets     | address\[] | undefined   |
| values      | uint256\[] | undefined   |
| datas       | bytes\[]   | undefined   |
| predecessor | bytes32    | undefined   |
| salt        | bytes32    | undefined   |

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| hash | bytes32 | undefined   |

### isOperation

```solidity
function isOperation(bytes32 id) external view returns (bool pending)
```

*Returns whether an id correspond to a registered operation. This includes both Pending, Ready and Done operations.*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| id   | bytes32 | undefined   |

#### Returns

| Name    | Type | Description |
| ------- | ---- | ----------- |
| pending | bool | undefined   |

### isOperationDone

```solidity
function isOperationDone(bytes32 id) external view returns (bool done)
```

*Returns whether an operation is done or not.*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| id   | bytes32 | undefined   |

#### Returns

| Name | Type | Description |
| ---- | ---- | ----------- |
| done | bool | undefined   |

### isOperationPending

```solidity
function isOperationPending(bytes32 id) external view returns (bool pending)
```

*Returns whether an operation is pending or not.*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| id   | bytes32 | undefined   |

#### Returns

| Name    | Type | Description |
| ------- | ---- | ----------- |
| pending | bool | undefined   |

### isOperationReady

```solidity
function isOperationReady(bytes32 id) external view returns (bool ready)
```

*Returns whether an operation is ready or not.*

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| id   | bytes32 | undefined   |

#### Returns

| Name  | Type | Description |
| ----- | ---- | ----------- |
| ready | bool | undefined   |

### renounceRole

```solidity
function renounceRole(bytes32 role, address account) external nonpayable
```

*Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.*

#### Parameters

| Name    | Type    | Description |
| ------- | ------- | ----------- |
| role    | bytes32 | undefined   |
| account | address | undefined   |

### revokeRole

```solidity
function revokeRole(bytes32 role, address account) external nonpayable
```

*Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have `role`'s admin role.*

#### Parameters

| Name    | Type    | Description |
| ------- | ------- | ----------- |
| role    | bytes32 | undefined   |
| account | address | undefined   |

### schedule

```solidity
function schedule(address target, uint256 value, bytes data, bytes32 predecessor, bytes32 salt, uint256 delay) external nonpayable
```

*Schedule an operation containing a single transaction. Emits a {CallScheduled} event. Requirements: - the caller must have the 'proposer' role.*

#### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| target      | address | undefined   |
| value       | uint256 | undefined   |
| data        | bytes   | undefined   |
| predecessor | bytes32 | undefined   |
| salt        | bytes32 | undefined   |
| delay       | uint256 | undefined   |

### scheduleBatch

```solidity
function scheduleBatch(address[] targets, uint256[] values, bytes[] datas, bytes32 predecessor, bytes32 salt, uint256 delay) external nonpayable
```

*Schedule an operation containing a batch of transactions. Emits one {CallScheduled} event per transaction in the batch. Requirements: - the caller must have the 'proposer' role.*

#### Parameters

| Name        | Type       | Description |
| ----------- | ---------- | ----------- |
| targets     | address\[] | undefined   |
| values      | uint256\[] | undefined   |
| datas       | bytes\[]   | undefined   |
| predecessor | bytes32    | undefined   |
| salt        | bytes32    | undefined   |
| delay       | uint256    | undefined   |

### supportsInterface

```solidity
function supportsInterface(bytes4 interfaceId) external view returns (bool)
```

*See {IERC165-supportsInterface}.*

#### Parameters

| Name        | Type   | Description |
| ----------- | ------ | ----------- |
| interfaceId | bytes4 | undefined   |

#### Returns

| Name | Type | Description |
| ---- | ---- | ----------- |
| \_0  | bool | undefined   |

### updateDelay

```solidity
function updateDelay(uint256 newDelay) external nonpayable
```

*Changes the minimum timelock duration for future operations. Emits a {MinDelayChange} event. Requirements: - the caller must be the timelock itself. This can only be achieved by scheduling and later executing an operation where the timelock is the target and the data is the ABI-encoded call to this function.*

#### Parameters

| Name     | Type    | Description |
| -------- | ------- | ----------- |
| newDelay | uint256 | undefined   |

## Events

### CallExecuted

```solidity
event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data)
```

*Emitted when a call is performed as part of operation `id`.*

#### Parameters

| Name            | Type    | Description |
| --------------- | ------- | ----------- |
| id `indexed`    | bytes32 | undefined   |
| index `indexed` | uint256 | undefined   |
| target          | address | undefined   |
| value           | uint256 | undefined   |
| data            | bytes   | undefined   |

### CallScheduled

```solidity
event CallScheduled(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data, bytes32 predecessor, uint256 delay)
```

*Emitted when a call is scheduled as part of operation `id`.*

#### Parameters

| Name            | Type    | Description |
| --------------- | ------- | ----------- |
| id `indexed`    | bytes32 | undefined   |
| index `indexed` | uint256 | undefined   |
| target          | address | undefined   |
| value           | uint256 | undefined   |
| data            | bytes   | undefined   |
| predecessor     | bytes32 | undefined   |
| delay           | uint256 | undefined   |

### Cancelled

```solidity
event Cancelled(bytes32 indexed id)
```

*Emitted when operation `id` is cancelled.*

#### Parameters

| Name         | Type    | Description |
| ------------ | ------- | ----------- |
| id `indexed` | bytes32 | undefined   |

### MinDelayChange

```solidity
event MinDelayChange(uint256 oldDuration, uint256 newDuration)
```

*Emitted when the minimum delay for future operations is modified.*

#### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| oldDuration | uint256 | undefined   |
| newDuration | uint256 | undefined   |

### RoleAdminChanged

```solidity
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
```

#### Parameters

| Name                        | Type    | Description |
| --------------------------- | ------- | ----------- |
| role `indexed`              | bytes32 | undefined   |
| previousAdminRole `indexed` | bytes32 | undefined   |
| newAdminRole `indexed`      | bytes32 | undefined   |

### RoleGranted

```solidity
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
```

#### Parameters

| Name              | Type    | Description |
| ----------------- | ------- | ----------- |
| role `indexed`    | bytes32 | undefined   |
| account `indexed` | address | undefined   |
| sender `indexed`  | address | undefined   |

### RoleRevoked

```solidity
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
```

#### Parameters

| Name              | Type    | Description |
| ----------------- | ------- | ----------- |
| role `indexed`    | bytes32 | undefined   |
| account `indexed` | address | undefined   |
| sender `indexed`  | address | undefined   |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://contracts.synapseprotocol.com/bridge/utils/timelockcontroller.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
