Skip to content

Commit 9559471

Browse files
committed
Clean up
1 parent 1ed5e81 commit 9559471

7 files changed

+51
-28
lines changed

src/MagicSpendStakeManager.sol

+1-3
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ contract MagicSpendStakeManager is StakeManager, OwnableUpgradeable, EIP712Upgra
5656
mapping(bytes32 hash_ => bool) public requestStatuses;
5757
mapping(address asset => uint128) public claimed;
5858

59-
function initialize(
60-
address _owner
61-
) external initializer {
59+
function initialize(address _owner) external initializer {
6260
__Ownable_init(_owner);
6361
__EIP712_init("Pimlico Magic Spend", "1");
6462
}

src/MagicSpendWithdrawalManager.sol

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import {ETH, WithdrawRequest, CallStruct} from "./base/Helpers.sol";
1515

1616
import {SafeTransferLib} from "@solady-0.0.259/utils/SafeTransferLib.sol";
1717

18-
1918
/// @title MagicSpendWithdrawalManager
2019
/// @author Pimlico (https://github.com/pimlicolabs/magic-spend)
2120
/// @notice Contract that allows users to pull funds from if they provide a valid signed request.

src/Timelock.sol

+37-19
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,38 @@ pragma solidity ^0.8.0;
55
contract Timelock {
66
event NewAdmin(address indexed newAdmin);
77
event NewPendingAdmin(address indexed newPendingAdmin);
8-
event NewDelay(uint indexed newDelay);
9-
event CancelTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
10-
event ExecuteTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
11-
event QueueTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);
12-
13-
uint public constant GRACE_PERIOD = 14 days;
14-
uint public constant MINIMUM_DELAY = 2 days;
15-
uint public constant MAXIMUM_DELAY = 30 days;
8+
event NewDelay(uint256 indexed newDelay);
9+
event CancelTransaction(
10+
bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta
11+
);
12+
event ExecuteTransaction(
13+
bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta
14+
);
15+
event QueueTransaction(
16+
bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta
17+
);
18+
19+
uint256 public constant GRACE_PERIOD = 14 days;
20+
uint256 public constant MINIMUM_DELAY = 2 days;
21+
uint256 public constant MAXIMUM_DELAY = 30 days;
1622

1723
address public admin;
1824
address public pendingAdmin;
19-
uint public delay;
25+
uint256 public delay;
2026

21-
mapping (bytes32 => bool) public queuedTransactions;
27+
mapping(bytes32 => bool) public queuedTransactions;
2228

23-
constructor(address admin_, uint delay_) {
29+
constructor(address admin_, uint256 delay_) {
2430
require(delay_ >= MINIMUM_DELAY, "Timelock::constructor: Delay must exceed minimum delay.");
2531
require(delay_ <= MAXIMUM_DELAY, "Timelock::setDelay: Delay must not exceed maximum delay.");
2632

2733
admin = admin_;
2834
delay = delay_;
2935
}
3036

31-
receive() external payable { }
37+
receive() external payable {}
3238

33-
function setDelay(uint delay_) public {
39+
function setDelay(uint256 delay_) public {
3440
require(msg.sender == address(this), "Timelock::setDelay: Call must come from Timelock.");
3541
require(delay_ >= MINIMUM_DELAY, "Timelock::setDelay: Delay must exceed minimum delay.");
3642
require(delay_ <= MAXIMUM_DELAY, "Timelock::setDelay: Delay must not exceed maximum delay.");
@@ -54,9 +60,15 @@ contract Timelock {
5460
emit NewPendingAdmin(pendingAdmin);
5561
}
5662

57-
function queueTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public returns (bytes32) {
63+
function queueTransaction(address target, uint256 value, string memory signature, bytes memory data, uint256 eta)
64+
public
65+
returns (bytes32)
66+
{
5867
require(msg.sender == admin, "Timelock::queueTransaction: Call must come from admin.");
59-
require(eta >= getBlockTimestamp() + delay, "Timelock::queueTransaction: Estimated execution block must satisfy delay.");
68+
require(
69+
eta >= getBlockTimestamp() + delay,
70+
"Timelock::queueTransaction: Estimated execution block must satisfy delay."
71+
);
6072

6173
bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
6274
queuedTransactions[txHash] = true;
@@ -65,7 +77,9 @@ contract Timelock {
6577
return txHash;
6678
}
6779

68-
function cancelTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public {
80+
function cancelTransaction(address target, uint256 value, string memory signature, bytes memory data, uint256 eta)
81+
public
82+
{
6983
require(msg.sender == admin, "Timelock::cancelTransaction: Call must come from admin.");
7084

7185
bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
@@ -74,7 +88,11 @@ contract Timelock {
7488
emit CancelTransaction(txHash, target, value, signature, data, eta);
7589
}
7690

77-
function executeTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public payable returns (bytes memory) {
91+
function executeTransaction(address target, uint256 value, string memory signature, bytes memory data, uint256 eta)
92+
public
93+
payable
94+
returns (bytes memory)
95+
{
7896
require(msg.sender == admin, "Timelock::executeTransaction: Call must come from admin.");
7997

8098
bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
@@ -101,8 +119,8 @@ contract Timelock {
101119
return returnData;
102120
}
103121

104-
function getBlockTimestamp() internal view returns (uint) {
122+
function getBlockTimestamp() internal view returns (uint256) {
105123
// solium-disable-next-line security/no-block-members
106124
return block.timestamp;
107125
}
108-
}
126+
}

src/base/MagicSpendFactory.sol

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
library MagicSpendFactory {
2+
3+
}

src/base/StakeManager.sol

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
pragma solidity ^0.8.0;
33

44
import {SafeTransferLib} from "@solady-0.0.259/utils/SafeTransferLib.sol";
5-
import {ReentrancyGuardUpgradeable} from "@openzeppelin-5.0.2/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
5+
import {ReentrancyGuardUpgradeable} from
6+
"@openzeppelin-5.0.2/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
67
import {ETH} from "./Helpers.sol";
78

89
/* solhint-disable avoid-low-level-calls */
@@ -78,6 +79,11 @@ abstract contract StakeManager is ReentrancyGuardUpgradeable {
7879
revert InvalidUnstakeDelay();
7980
}
8081

82+
// If asset is already staked, unstake delay must be the same
83+
if (stakeInfo.unstakeDelaySec > 0 && stakeInfo.unstakeDelaySec != unstakeDelaySec) {
84+
revert InvalidUnstakeDelay();
85+
}
86+
8187
uint128 stake = stakeInfo.amount + amount;
8288

8389
if (stake == 0) {

src/base/WithdrawalManager.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ pragma solidity ^0.8.0;
33

44
import {SafeTransferLib} from "@solady-0.0.259/utils/SafeTransferLib.sol";
55
import {OwnableUpgradeable} from "@openzeppelin-5.0.2/contracts-upgradeable/access/OwnableUpgradeable.sol";
6-
import {ReentrancyGuardUpgradeable} from "@openzeppelin-5.0.2/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
6+
import {ReentrancyGuardUpgradeable} from
7+
"@openzeppelin-5.0.2/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
78
import {ETH} from "./Helpers.sol";
89

910
abstract contract WithdrawalManager is OwnableUpgradeable, ReentrancyGuardUpgradeable {

test/MagicSpendStakeManager.t.sol

+1-3
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ contract MagicSpendStakeManagerTest is Test {
3333
(alice, aliceKey) = makeAddrAndKey("alice");
3434

3535
address proxy = Upgrades.deployTransparentProxy(
36-
"MagicSpendStakeManager.sol",
37-
OWNER,
38-
abi.encodeCall(MagicSpendStakeManager.initialize, (OWNER))
36+
"MagicSpendStakeManager.sol", OWNER, abi.encodeCall(MagicSpendStakeManager.initialize, (OWNER))
3937
);
4038

4139
magicSpendStakeManager = MagicSpendStakeManager(payable(proxy));

0 commit comments

Comments
 (0)