Skip to content

Commit 75db01b

Browse files
committed
refactor, simplify
1 parent b33bd2a commit 75db01b

File tree

3 files changed

+83
-107
lines changed

3 files changed

+83
-107
lines changed

script/DeployGnosisSafe.s.sol

+60-21
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,68 @@ struct SafeSetup {
2020
uint256 saltNonce;
2121
}
2222

23-
function deployGnosisCore() returns (address factory, address singleton, address fallbackHandler) {
24-
factory = address(new SafeProxyFactory{salt: "zenith.gnosisFactory"}());
25-
singleton = address(new SafeL2{salt: "zenith.gnosisSingleton"}());
26-
fallbackHandler = address(new CompatibilityFallbackHandler{salt: "zenith.gnosisFallbackHandlder"}());
27-
}
28-
29-
function deploySafeInstance(address factory, address singleton, SafeSetup memory setup) returns (address safe) {
30-
bytes memory init = abi.encodeWithSignature(
31-
"setup(address[],uint256,address,bytes,address,address,uint256,address)",
32-
setup.owners,
33-
setup.threshold,
34-
setup.to,
35-
setup.data,
36-
setup.fallbackHandler,
37-
setup.paymentToken,
38-
setup.payment,
39-
setup.paymentReceiver
40-
);
41-
safe = address(SafeProxyFactory(factory).createProxyWithNonce(singleton, init, setup.saltNonce));
42-
}
23+
address constant OWNER_ONE = 0x1111111111111111111111111111111111111111;
24+
address constant OWNER_TWO = 0x2222222222222222222222222222222222222222;
25+
bytes32 constant SENTINEL_VALUE = 0x0000000000000000000000000000000000000000000000000000000000000001;
4326

4427
contract GnosisScript is Script {
45-
bytes32 constant SENTINEL_VALUE = 0x0000000000000000000000000000000000000000000000000000000000000001;
28+
// deploy:
29+
// forge script GnosisScript --sig "deployGnosis()" --rpc-url $RPC_URL --broadcast [signing args]
30+
function deployGnosis()
31+
public
32+
returns (address gnosisFactory, address gnosisSingleton, address gnosisFallbackHandler, address usdcAdmin)
33+
{
34+
vm.startBroadcast();
35+
36+
// deploy gnosis safe singleton & proxy factory
37+
(gnosisFactory, gnosisSingleton, gnosisFallbackHandler) = deployGnosisCore();
38+
39+
// deploy a gnosis safe proxy as the USDC admin
40+
usdcAdmin = deploySafeInstance(gnosisFactory, gnosisSingleton, getUsdcAdminSetup(gnosisFallbackHandler));
41+
}
42+
43+
function deployGnosisCore() public returns (address factory, address singleton, address fallbackHandler) {
44+
factory = address(new SafeProxyFactory{salt: "zenith.gnosisFactory"}());
45+
singleton = address(new SafeL2{salt: "zenith.gnosisSingleton"}());
46+
fallbackHandler = address(new CompatibilityFallbackHandler{salt: "zenith.gnosisFallbackHandlder"}());
47+
}
48+
49+
function deploySafeInstance(address factory, address singleton, SafeSetup memory setup)
50+
public
51+
returns (address safe)
52+
{
53+
bytes memory init = abi.encodeWithSignature(
54+
"setup(address[],uint256,address,bytes,address,address,uint256,address)",
55+
setup.owners,
56+
setup.threshold,
57+
setup.to,
58+
setup.data,
59+
setup.fallbackHandler,
60+
setup.paymentToken,
61+
setup.payment,
62+
setup.paymentReceiver
63+
);
64+
safe = address(SafeProxyFactory(factory).createProxyWithNonce(singleton, init, setup.saltNonce));
65+
}
66+
67+
// setup the gnosis safe with 2 owners, threshold of 1.
68+
// make the owners recognizable addrs to aid in inspecting storage layout
69+
function getUsdcAdminSetup(address fallbackHandler) public pure returns (SafeSetup memory usdcAdminSetup) {
70+
address[] memory owners = new address[](2);
71+
owners[0] = OWNER_ONE;
72+
owners[1] = OWNER_TWO;
73+
usdcAdminSetup = SafeSetup({
74+
owners: owners,
75+
threshold: 1,
76+
to: address(0),
77+
data: "",
78+
fallbackHandler: fallbackHandler,
79+
paymentToken: address(0),
80+
payment: 0,
81+
paymentReceiver: payable(address(0)),
82+
saltNonce: 17001
83+
});
84+
}
4685

4786
// example run:
4887
// forge script GnosisScript --sig "printOwnerSlots" "[0x1111111111111111111111111111111111111111, 0x2222222222222222222222222222222222222222]"

script/DeployL2.s.sol

-73
This file was deleted.

script/ZenithL2.s.sol

+23-13
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,35 @@
22
pragma solidity 0.8.26;
33

44
// system contracts
5-
import {deployPartOne, deployPartTwo} from "./DeployL2.s.sol";
5+
import {RollupOrders} from "../src/orders/RollupOrders.sol";
6+
import {RollupPassage} from "../src/passage/RollupPassage.sol";
7+
// simple erc20
8+
import {SimpleERC20} from "simple-erc20/SimpleERC20.sol";
69
// utils
710
import {Script, console2} from "forge-std/Script.sol";
811

12+
// create2 address for Permit2
13+
address constant PERMIT2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3;
14+
// address of Minter with permission to mint ERC20 tokens
15+
address constant MINTER = 0x9999999999999999999999999999999999999999;
16+
917
contract L2Script is Script {
1018
// deploy:
11-
// forge script L2Script --sig "deployOne()" --fork-url $ANVIL_URL --broadcast
12-
function deployOne() public returns (address rollupPassage, address rollupOrders, address wbtc, address usdt) {
19+
// forge script L2Script --sig "deploySystem()" --rpc-url $RPC_URL --broadcast [signing args]
20+
function deploySystem() public returns (address rollupPassage, address rollupOrders, address wbtc, address usdt) {
1321
vm.startBroadcast();
14-
(rollupPassage, rollupOrders, wbtc, usdt) = deployPartOne();
15-
}
1622

17-
// deploy:
18-
// forge script L2Script --sig "deployTwo()" --fork-url $ANVIL_URL --broadcast
19-
function deployTwo()
20-
public
21-
returns (address gnosisFactory, address gnosisSingleton, address gnosisFallbackHandler, address usdcAdmin)
22-
{
23-
vm.startBroadcast();
24-
(gnosisFactory, gnosisSingleton, gnosisFallbackHandler, usdcAdmin) = deployPartTwo();
23+
// deploy system contracts
24+
rollupPassage = address(new RollupPassage{salt: "zenith.rollupPassage"}(PERMIT2));
25+
rollupOrders = address(new RollupOrders{salt: "zenith.rollupOrders"}(PERMIT2));
26+
27+
// deploy simple erc20 tokens
28+
wbtc = address(new SimpleERC20{salt: "zenith.wbtc"}(MINTER, "Wrapped BTC", "WBTC"));
29+
usdt = address(new SimpleERC20{salt: "zenith.usdt"}(MINTER, "Tether USD", "USDT"));
2530
}
2631
}
32+
33+
// NOTE: must deploy Permit2 via https://github.com/Uniswap/permit2/blob/main/script/DeployPermit2.s.sol
34+
// in order to properly setup _CACHED_CHAIN_ID and _CACHED_DOMAIN_SEPARATOR
35+
36+
// NOTE: must deploy USDC via https://github.com/circlefin/stablecoin-evm/blob/master/scripts/deploy/deploy-fiat-token.s.sol

0 commit comments

Comments
 (0)