Merge branch 'master' into next-v5.0
This commit is contained in:
@ -1,12 +1,11 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v4.8.0) (governance/TimelockController.sol)
|
||||
// OpenZeppelin Contracts (last updated v4.8.2) (governance/TimelockController.sol)
|
||||
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
import "../access/AccessControl.sol";
|
||||
import "../token/ERC721/IERC721Receiver.sol";
|
||||
import "../token/ERC1155/IERC1155Receiver.sol";
|
||||
import "../utils/Address.sol";
|
||||
|
||||
/**
|
||||
* @dev Contract module which acts as a timelocked controller. When set as the
|
||||
@ -50,6 +49,11 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
*/
|
||||
event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data);
|
||||
|
||||
/**
|
||||
* @dev Emitted when new proposal is scheduled with non-zero salt.
|
||||
*/
|
||||
event CallSalt(bytes32 indexed id, bytes32 salt);
|
||||
|
||||
/**
|
||||
* @dev Emitted when operation `id` is cancelled.
|
||||
*/
|
||||
@ -126,21 +130,21 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
* @dev Returns whether an id correspond to a registered operation. This
|
||||
* includes both Pending, Ready and Done operations.
|
||||
*/
|
||||
function isOperation(bytes32 id) public view virtual returns (bool registered) {
|
||||
function isOperation(bytes32 id) public view virtual returns (bool) {
|
||||
return getTimestamp(id) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Returns whether an operation is pending or not.
|
||||
* @dev Returns whether an operation is pending or not. Note that a "pending" operation may also be "ready".
|
||||
*/
|
||||
function isOperationPending(bytes32 id) public view virtual returns (bool pending) {
|
||||
function isOperationPending(bytes32 id) public view virtual returns (bool) {
|
||||
return getTimestamp(id) > _DONE_TIMESTAMP;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Returns whether an operation is ready or not.
|
||||
* @dev Returns whether an operation is ready for execution. Note that a "ready" operation is also "pending".
|
||||
*/
|
||||
function isOperationReady(bytes32 id) public view virtual returns (bool ready) {
|
||||
function isOperationReady(bytes32 id) public view virtual returns (bool) {
|
||||
uint256 timestamp = getTimestamp(id);
|
||||
return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp;
|
||||
}
|
||||
@ -148,7 +152,7 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
/**
|
||||
* @dev Returns whether an operation is done or not.
|
||||
*/
|
||||
function isOperationDone(bytes32 id) public view virtual returns (bool done) {
|
||||
function isOperationDone(bytes32 id) public view virtual returns (bool) {
|
||||
return getTimestamp(id) == _DONE_TIMESTAMP;
|
||||
}
|
||||
|
||||
@ -156,7 +160,7 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
* @dev Returns the timestamp at which an operation becomes ready (0 for
|
||||
* unset operations, 1 for done operations).
|
||||
*/
|
||||
function getTimestamp(bytes32 id) public view virtual returns (uint256 timestamp) {
|
||||
function getTimestamp(bytes32 id) public view virtual returns (uint256) {
|
||||
return _timestamps[id];
|
||||
}
|
||||
|
||||
@ -165,7 +169,7 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
*
|
||||
* This value can be changed by executing an operation that calls `updateDelay`.
|
||||
*/
|
||||
function getMinDelay() public view virtual returns (uint256 duration) {
|
||||
function getMinDelay() public view virtual returns (uint256) {
|
||||
return _minDelay;
|
||||
}
|
||||
|
||||
@ -179,7 +183,7 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
bytes calldata data,
|
||||
bytes32 predecessor,
|
||||
bytes32 salt
|
||||
) public pure virtual returns (bytes32 hash) {
|
||||
) public pure virtual returns (bytes32) {
|
||||
return keccak256(abi.encode(target, value, data, predecessor, salt));
|
||||
}
|
||||
|
||||
@ -193,14 +197,14 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
bytes[] calldata payloads,
|
||||
bytes32 predecessor,
|
||||
bytes32 salt
|
||||
) public pure virtual returns (bytes32 hash) {
|
||||
) public pure virtual returns (bytes32) {
|
||||
return keccak256(abi.encode(targets, values, payloads, predecessor, salt));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Schedule an operation containing a single transaction.
|
||||
*
|
||||
* Emits a {CallScheduled} event.
|
||||
* Emits {CallSalt} if salt is nonzero, and {CallScheduled}.
|
||||
*
|
||||
* Requirements:
|
||||
*
|
||||
@ -217,12 +221,15 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
bytes32 id = hashOperation(target, value, data, predecessor, salt);
|
||||
_schedule(id, delay);
|
||||
emit CallScheduled(id, 0, target, value, data, predecessor, delay);
|
||||
if (salt != bytes32(0)) {
|
||||
emit CallSalt(id, salt);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Schedule an operation containing a batch of transactions.
|
||||
*
|
||||
* Emits one {CallScheduled} event per transaction in the batch.
|
||||
* Emits {CallSalt} if salt is nonzero, and one {CallScheduled} event per transaction in the batch.
|
||||
*
|
||||
* Requirements:
|
||||
*
|
||||
@ -244,6 +251,9 @@ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver
|
||||
for (uint256 i = 0; i < targets.length; ++i) {
|
||||
emit CallScheduled(id, i, targets[i], values[i], payloads[i], predecessor, delay);
|
||||
}
|
||||
if (salt != bytes32(0)) {
|
||||
emit CallSalt(id, salt);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user