From 109b12b77dc0ac16cf7e8510417a61ec63874de0 Mon Sep 17 00:00:00 2001 From: Brian McMichael Date: Thu, 12 Jan 2023 13:27:07 -0500 Subject: [PATCH 1/2] Allow for reschedule of dropped exec --- src/DssExec.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/DssExec.sol b/src/DssExec.sol index ce9f87d..d550903 100644 --- a/src/DssExec.sol +++ b/src/DssExec.sol @@ -21,6 +21,7 @@ pragma solidity ^0.8.16; interface PauseAbstract { function delay() external view returns (uint256); + function plans(bytes32) external view returns (bool); function plot(address, bytes32, bytes calldata, uint256) external; function exec(address, bytes32, bytes calldata, uint256) external returns (bytes memory); } @@ -78,7 +79,9 @@ contract DssExec { function schedule() public { require(block.timestamp <= expiration, "This contract has expired"); - require(eta == 0, "This spell has already been scheduled"); + require(eta == 0 || + pause.plans(keccak256(abi.encode(action, tag, sig, eta))) == false, + "This spell has already been scheduled"); eta = block.timestamp + PauseAbstract(pause).delay(); pause.plot(action, tag, sig, eta); } From 65d2b19170653f3869a6bacca33dea13a2efe849 Mon Sep 17 00:00:00 2001 From: Brian McMichael Date: Thu, 12 Jan 2023 13:46:30 -0500 Subject: [PATCH 2/2] Don't reschedule completed spell --- src/DssExec.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DssExec.sol b/src/DssExec.sol index d550903..43217a3 100644 --- a/src/DssExec.sol +++ b/src/DssExec.sol @@ -79,6 +79,7 @@ contract DssExec { function schedule() public { require(block.timestamp <= expiration, "This contract has expired"); + require(!done, "spell-already-cast"); require(eta == 0 || pause.plans(keccak256(abi.encode(action, tag, sig, eta))) == false, "This spell has already been scheduled");