Skip to content

Commit 0f49b0e

Browse files
authored
chore: TierRegistry deployment script (#480)
1 parent d711c78 commit 0f49b0e

17 files changed

+241
-31
lines changed

.env.example

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
3030
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
3131
FNAME_RESOLVER_OWNER_ADDRESS=0x138356f24c7A16BE48978dE277a468F6C16A19a5
3232

33-
# RPC endpoints for OP testnet and mainnet.
34-
L1_MAINNET_RPC_URL=
35-
L2_MAINNET_RPC_URL=
33+
# Tier registry params
34+
TIER_REGISTRY_VAULT_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
35+
TIER_REGISTRY_OWNER_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
36+
TIER_REGISTRY_MIGRATOR_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
37+
38+
# RPC endpoints
39+
ETH_MAINNET_RPC_URL=
40+
OP_MAINNET_RPC_URL=
41+
BASE_MAINNET_RPC_URL=
3642

3743
# Salts
3844
STORAGE_RENT_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c65360d99ba6ea4e0161f2b96c
@@ -41,6 +47,7 @@ KEY_REGISTRY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c62af4de6e1f03
4147
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6610c0841333604016684800c
4248
BUNDLER_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6e451fc0a34ec4c008c9a31fa
4349
RECOVERY_PROXY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6110eaaca06f77900dac1cad3
50+
TIER_REGISTRY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6110eaaca06f77900dac1cad3
4451

4552
# Deployer address.
4653
DEPLOYER=0x6D2b70e39C6bc63763098e336323591eb77Cd0C6

.env.local

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,23 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
3838
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
3939
FNAME_RESOLVER_OWNER_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
4040

41-
# RPC endpoints for OP testnet and mainnet.
42-
L2_MAINNET_RPC_URL=
43-
L1_MAINNET_RPC_URL=
41+
# Tier registry params
42+
TIER_REGISTRY_VAULT_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
43+
TIER_REGISTRY_OWNER_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
44+
TIER_REGISTRY_MIGRATOR_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
45+
46+
# RPC endpoints
47+
ETH_MAINNET_RPC_URL=
48+
OP_MAINNET_RPC_URL=
49+
BASE_MAINNET_RPC_URL=
4450

4551
STORAGE_RENT_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
4652
ID_REGISTRY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
4753
KEY_REGISTRY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
4854
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
4955
BUNDLER_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
5056
RECOVERY_PROXY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
57+
TIER_REGISTRY_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
5158

5259
# Deployer address.
5360
# Default address is Anvil test account 1

.env.prod

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
3030
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
3131
FNAME_RESOLVER_OWNER_ADDRESS=0x138356f24c7A16BE48978dE277a468F6C16A19a5
3232

33-
# RPC endpoints for OP testnet and mainnet.
34-
L1_MAINNET_RPC_URL=
35-
L2_MAINNET_RPC_URL=
33+
# Tier registry params
34+
TIER_REGISTRY_VAULT_ADDRESS=0x0BDcA19c9801bb484285362fD5dd0c94592c874C
35+
TIER_REGISTRY_OWNER_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
36+
TIER_REGISTRY_MIGRATOR_ADDRESS=0x2d93c2f74b2c4697f9ea85d0450148aa45d4d5a2
37+
38+
# RPC endpoints
39+
ETH_MAINNET_RPC_URL=
40+
OP_MAINNET_RPC_URL=
41+
BASE_MAINNET_RPC_URL=
3642

3743
# Salts
3844
STORAGE_RENT_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c65360d99ba6ea4e0161f2b96c
@@ -41,6 +47,7 @@ KEY_REGISTRY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c62af4de6e1f03
4147
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6610c0841333604016684800c
4248
BUNDLER_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6e451fc0a34ec4c008c9a31fa
4349
RECOVERY_PROXY_CREATE2_SALT=0x6d2b70e39c6bc63763098e336323591eb77cd0c6110eaaca06f77900dac1cad3
50+
TIER_REGISTRY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c63425a6dbfc4658e47004603abdf
4451

4552
# Deployer address.
4653
DEPLOYER=0x6D2b70e39C6bc63763098e336323591eb77Cd0C6

.env.upgrade

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ FNAME_RESOLVER_SERVER_URL=https://fnames.farcaster.xyz/ccip/{sender}/{data}.json
3030
FNAME_RESOLVER_SIGNER_ADDRESS=0xBc5274eFc266311015793d89E9B591fa46294741
3131
FNAME_RESOLVER_OWNER_ADDRESS=0x138356f24c7A16BE48978dE277a468F6C16A19a5
3232

33-
# RPC endpoints for OP testnet and mainnet.
34-
L1_MAINNET_RPC_URL=
35-
L2_MAINNET_RPC_URL=
33+
# Tier registry params
34+
TIER_REGISTRY_VAULT_ADDRESS=0x0BDcA19c9801bb484285362fD5dd0c94592c874C
35+
TIER_REGISTRY_OWNER_ADDRESS=0x53c6dA835c777AD11159198FBe11f95E5eE6B692
36+
TIER_REGISTRY_MIGRATOR_ADDRESS=0x2d93c2f74b2c4697f9ea85d0450148aa45d4d5a2
37+
38+
# RPC endpoints
39+
ETH_MAINNET_RPC_URL=
40+
OP_MAINNET_RPC_URL=
41+
BASE_MAINNET_RPC_URL=
3642

3743
# Salts
3844
STORAGE_RENT_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
@@ -43,6 +49,7 @@ KEY_GATEWAY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c6342229ded5ec3c3b
4349
SIGNED_KEY_REQUEST_VALIDATOR_CREATE2_SALT=0x0000000000000000000000000000000000000000000000000000000000000000
4450
BUNDLER_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c6342e9da01d98917640342e02a5c
4551
RECOVERY_PROXY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c63421958ea987b94fd038a490454
52+
TIER_REGISTRY_CREATE2_SALT=0x299707e127cc77de01b9fd968bc0ff475f3c63425a6dbfc4658e47004603abdf
4653

4754
# Deployed contracts
4855
STORAGE_RENT_ADDRESS=0x00000000fcCe7f938e7aE6D3c335bD6a1a7c593D

.github/workflows/ci.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ on:
99

1010
env:
1111
FOUNDRY_PROFILE: ci
12-
L1_MAINNET_RPC_URL: ${{ secrets.L1_MAINNET_RPC_URL }}
13-
L2_MAINNET_RPC_URL: ${{ secrets.L2_MAINNET_RPC_URL }}
12+
ETH_MAINNET_RPC_URL: ${{ secrets.L1_MAINNET_RPC_URL }}
13+
OP_MAINNET_RPC_URL: ${{ secrets.L2_MAINNET_RPC_URL }}
14+
BASE_MAINNET_RPC_URL: ${{ secrets.BASE_MAINNET_RPC_URL }}
1415

1516
jobs:
1617
build-image:

docker-compose.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ x-anvil-defaults: &anvil-defaults
99
<<: *build-defaults
1010
restart: on-failure
1111
healthcheck:
12-
test: ['CMD', '/usr/bin/nc', '-z', 'localhost', '${PORT:-8545}']
12+
test: ["CMD", "/usr/bin/nc", "-z", "localhost", "${PORT:-8545}"]
1313
interval: 1s
1414
timeout: 1s
1515
retries: 3
@@ -27,15 +27,15 @@ services:
2727
<<: *anvil-defaults
2828
command: |
2929
sh -c '
30-
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$L2_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
30+
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$OP_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
3131
'
3232
environment:
33-
- L2_MAINNET_RPC_URL
33+
- OP_MAINNET_RPC_URL
3434
volumes:
3535
- l2-anvil-data:/var/lib/anvil
3636
- l2-anvil-cache:/root/.foundry/cache
3737
ports:
38-
- '${PORT:-8545}:${PORT:-8545}'
38+
- "${PORT:-8545}:${PORT:-8545}"
3939

4040
l2-deployer:
4141
<<: *deployer-defaults
@@ -81,15 +81,15 @@ services:
8181
<<: *anvil-defaults
8282
command: |
8383
sh -c '
84-
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$L1_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
84+
exec anvil --host 0.0.0.0 --port ${PORT:-8545} --rpc-url $$ETH_MAINNET_RPC_URL --state /var/lib/anvil/state --retries 3 --timeout 10000
8585
'
8686
environment:
87-
- L1_MAINNET_RPC_URL
87+
- ETH_MAINNET_RPC_URL
8888
volumes:
8989
- l1-anvil-data:/var/lib/anvil
9090
- l1-anvil-cache:/root/.foundry/cache
9191
ports:
92-
- '${PORT:-8546}:${PORT:-8545}'
92+
- "${PORT:-8546}:${PORT:-8545}"
9393

9494
l1-deployer:
9595
<<: *deployer-defaults

foundry.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ int_types = "long"
2828
multiline_func_header = "params_first"
2929

3030
[rpc_endpoints]
31-
l2_mainnet = "${L2_MAINNET_RPC_URL}"
32-
l1_mainnet = "${L1_MAINNET_RPC_URL}"
31+
base_mainnet = "${BASE_MAINNET_RPC_URL}"
32+
op_mainnet = "${OP_MAINNET_RPC_URL}"
33+
eth_mainnet = "${ETH_MAINNET_RPC_URL}"

script/DeployTierRegistry.s.sol

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity ^0.8.21;
3+
4+
import {Test} from "forge-std/Test.sol";
5+
import {TierRegistry} from "../src/TierRegistry.sol";
6+
import {console, ImmutableCreate2Deployer} from "./abstract/ImmutableCreate2Deployer.sol";
7+
8+
contract DeployTierRegistry is ImmutableCreate2Deployer, Test {
9+
address public constant BASE_USDC = address(0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913);
10+
uint256 public constant MIN_DAYS = 30;
11+
uint256 public constant MAX_DAYS = 365;
12+
uint256 public constant PRICE_PER_DAY = 328768;
13+
14+
struct Salts {
15+
bytes32 tierRegistry;
16+
}
17+
18+
struct DeploymentParams {
19+
address deployer;
20+
address vault;
21+
address owner;
22+
address migrator;
23+
Salts salts;
24+
}
25+
26+
struct Addresses {
27+
address tierRegistry;
28+
}
29+
30+
struct Contracts {
31+
TierRegistry tierRegistry;
32+
}
33+
34+
function run() public {
35+
runSetup(runDeploy(loadDeploymentParams()));
36+
}
37+
38+
function runDeploy(
39+
DeploymentParams memory params
40+
) public returns (Contracts memory) {
41+
return runDeploy(params, true);
42+
}
43+
44+
function runDeploy(DeploymentParams memory params, bool broadcast) public returns (Contracts memory) {
45+
Addresses memory addrs;
46+
addrs.tierRegistry = register(
47+
"TierRegistry",
48+
params.salts.tierRegistry,
49+
type(TierRegistry).creationCode,
50+
abi.encode(params.migrator, params.deployer)
51+
);
52+
deploy(broadcast);
53+
54+
return Contracts({tierRegistry: TierRegistry(addrs.tierRegistry)});
55+
}
56+
57+
function runSetup(Contracts memory contracts, DeploymentParams memory params, bool broadcast) public {
58+
if (deploymentChanged()) {
59+
console.log("Running setup");
60+
61+
if (broadcast) vm.startBroadcast();
62+
contracts.tierRegistry.setTier(1, BASE_USDC, MIN_DAYS, MAX_DAYS, PRICE_PER_DAY, params.vault);
63+
contracts.tierRegistry.transferOwnership(params.owner);
64+
if (broadcast) vm.stopBroadcast();
65+
} else {
66+
console.log("No changes, skipping setup");
67+
}
68+
}
69+
70+
function runSetup(
71+
Contracts memory contracts
72+
) public {
73+
DeploymentParams memory params = loadDeploymentParams();
74+
runSetup(contracts, params, true);
75+
}
76+
77+
function loadDeploymentParams() internal returns (DeploymentParams memory) {
78+
return DeploymentParams({
79+
deployer: vm.envAddress("DEPLOYER"),
80+
vault: vm.envAddress("TIER_REGISTRY_VAULT_ADDRESS"),
81+
owner: vm.envAddress("TIER_REGISTRY_OWNER_ADDRESS"),
82+
migrator: vm.envAddress("TIER_REGISTRY_MIGRATOR_ADDRESS"),
83+
salts: Salts({tierRegistry: vm.envOr("TIER_REGISTRY_CREATE2_SALT", bytes32(0))})
84+
});
85+
}
86+
}

src/TierRegistry.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
pragma solidity 0.8.29;
33

44
import {Migration} from "./abstract/Migration.sol";
5-
import "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5+
import {SafeERC20, IERC20} from "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
66

77
import {ITierRegistry} from "./interfaces/ITierRegistry.sol";
88

src/interfaces/ITierRegistry.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
pragma solidity 0.8.29;
33

44
import {IMigration} from "./abstract/IMigration.sol";
5-
import "openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5+
import {IERC20} from "openzeppelin/contracts/token/ERC20/IERC20.sol";
66

77
/**
88
* @title ITierRegistry

0 commit comments

Comments
 (0)