Procházet zdrojové kódy

Add additional isOperationReady check in TimelockController

(cherry picked from commit cec4f2ef57495d8b1742d62846da212515d99dd5)
Francisco Giordano před 4 roky
rodič
revize
6753d0123e
2 změnil soubory, kde provedl 8 přidání a 3 odebrání
  1. 4 0
      CHANGELOG.md
  2. 4 3
      contracts/access/TimelockController.sol

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 # Changelog
 
+## 3.4.2-solc-0.7
+
+ * `TimelockController`: Add additional isOperationReady check.
+
 ## 3.4.1-solc-0.7 (2021-03-03)
 
  * `ERC721`: made `_approve` an internal function (was private).

+ 4 - 3
contracts/access/TimelockController.sol

@@ -227,7 +227,7 @@ contract TimelockController is AccessControl {
      */
     function execute(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt) public payable virtual onlyRole(EXECUTOR_ROLE) {
         bytes32 id = hashOperation(target, value, data, predecessor, salt);
-        _beforeCall(predecessor);
+        _beforeCall(id, predecessor);
         _call(id, 0, target, value, data);
         _afterCall(id);
     }
@@ -246,7 +246,7 @@ contract TimelockController is AccessControl {
         require(targets.length == datas.length, "TimelockController: length mismatch");
 
         bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
-        _beforeCall(predecessor);
+        _beforeCall(id, predecessor);
         for (uint256 i = 0; i < targets.length; ++i) {
             _call(id, i, targets[i], values[i], datas[i]);
         }
@@ -256,7 +256,8 @@ contract TimelockController is AccessControl {
     /**
      * @dev Checks before execution of an operation's calls.
      */
-    function _beforeCall(bytes32 predecessor) private view {
+    function _beforeCall(bytes32 id, bytes32 predecessor) private view {
+        require(isOperationReady(id), "TimelockController: operation is not ready");
         require(predecessor == bytes32(0) || isOperationDone(predecessor), "TimelockController: missing dependency");
     }