Skip to content

Commit eccba17

Browse files
committed
Support Multi Deployment
1 parent 27cdcd0 commit eccba17

15 files changed

Lines changed: 214 additions & 172 deletions

.env.template

Lines changed: 0 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -2,111 +2,7 @@ DEPLOYER_PRIVATE_KEY=
22
DEPLOYER_PRIVATE_LOCAL_KEY=
33
DEPLOYER_PRIVATE_TESTNET_KEY=
44

5-
# ETHERSCAN
65
ETHERSCAN_KEY=
76

8-
# Ethereum
97
RPC_MAINNET=
108
RPC_SEPOLIA=
11-
RPC_HOLESKY=
12-
13-
# Arbitrum
14-
RPC_ARBITRUM=
15-
RPC_ARBITRUM_SEPOLIA=
16-
RPC_NOVA_ARBISCAN=
17-
18-
# BSC
19-
RPC_BSC=
20-
RPC_BSC_TESTNET=
21-
22-
# Polygon
23-
RPC_POLYGON=
24-
RPC_POLYGON_TESTNET=
25-
26-
# zkEVM
27-
RPC_ZKEVM=
28-
RPC_ZKEVM_TESTNET=
29-
30-
# Base
31-
RPC_BASE=
32-
RPC_BASE_TESTNET=
33-
34-
# Linea
35-
RPC_LINEA=
36-
RPC_LINEA_TESTNET=
37-
38-
# Fantom
39-
RPC_FTM=
40-
RPC_FTM_TESTNET=
41-
42-
# Blast
43-
RPC_BLAST=
44-
RPC_BLAST_TESTNET=
45-
46-
# Optimism
47-
RPC_OPTIMISTIC=
48-
RPC_OPTIMISTIC_SEPOLIA=
49-
50-
# Avalanche
51-
RPC_SNOW=
52-
RPC_SNOW_TESTNET=
53-
54-
# BTTC
55-
RPC_BTTC=
56-
RPC_DONAU_BTTC=
57-
58-
# Celo
59-
RPC_CELO=
60-
RPC_ALFAJORES_CELO=
61-
62-
# Cronos
63-
RPC_CRONOS=
64-
65-
# Frax
66-
RPC_FRAX=
67-
RPC_FRAX_TESTNET=
68-
69-
# Gnosis
70-
RPC_GNOSIS=
71-
72-
# Kroma
73-
RPC_KROMA=
74-
RPC_KROMA_TESTNET=
75-
76-
# Mantle
77-
RPC_MANTLE=
78-
RPC_MANTLE_TESTNET=
79-
80-
# Moonbeam
81-
RPC_MOONBEAM=
82-
83-
# Moonriver
84-
RPC_MOONRIVER=
85-
86-
# Moonbase
87-
RPC_MOONBASE=
88-
89-
# opBNB
90-
RPC_OPBNB=
91-
RPC_OPBNB_TESTNET=
92-
93-
# Scroll
94-
RPC_SCROLL=
95-
RPC_SCROLL_TESTNET=
96-
97-
# Taiko
98-
RPC_TAIKO=
99-
RPC_TAIKO_TESTNET=
100-
101-
# Wemix
102-
RPC_WEMIX=
103-
RPC_WEMIX_TESTNET=
104-
105-
# zkSync
106-
RPC_ZKSYNC=
107-
RPC_ZKSYNC_TESTNET=
108-
109-
# Xai
110-
RPC_XAI=
111-
RPC_XAI_SEPOLIA=
112-

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ snapshot-fork :; forge snapshot --snap .gas-snapshot-fork $(RPC) $(EXTRA)
2727
#Analytic Tools
2828
slither :; slither --config-file ./slither-config.json src/
2929

30-
deploy :; forge script $(SCRIPT_NAME) --rpc-url $(RPC) --sig "run()" --broadcast --verify -vvvv $(EXTRA)
31-
simulate-deploy :; forge script $(SCRIPT_NAME) --rpc-url $(RPC) --sig "run()" -vvvv $(EXTRA)
30+
deploy :; forge script $(SCRIPT_NAME) --rpc-url $(RPC) --broadcast --slow --verify -vvvv $(EXTRA)
31+
simulate-deploy :; forge script $(SCRIPT_NAME) --rpc-url $(RPC) -vvvv $(EXTRA)

deploy.sh

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,21 @@ while true; do
3232
IFS=$'\n' read -r -d '' -a endpoint_array <<<"$endpoints"
3333

3434
echo "Please select an RPC endpoint:"
35-
select network in "${endpoint_array[@]}"; do
35+
select network in "multichain" "${endpoint_array[@]}"; do
3636
if [ -n "$network" ]; then
37-
# Extract the value of the selected key from the environment variables
38-
RPC_URL=$(awk -v key="$network" -F' *= *' '$1 == key {gsub(/"/, "", $2); print $2; exit}' foundry.toml)
39-
40-
# Check if the value contains ${} pattern
41-
if [[ "$RPC_URL" =~ \$\{.*\} ]]; then
42-
RPC_URL=$(echo "$RPC_URL" | sed 's/\${//;s/}//')
43-
RPC_URL=$(get_env_value "$RPC_URL")
37+
if [ "$network" == "multichain" ]; then
38+
RPC_URL="multichain"
39+
is_multichain=true
40+
else
41+
is_multichain=false
42+
# Extract the value of the selected key from the environment variables
43+
RPC_URL=$(awk -v key="$network" -F' *= *' '$1 == key {gsub(/"/, "", $2); print $2; exit}' foundry.toml)
44+
45+
# Check if the value contains ${} pattern
46+
if [[ "$RPC_URL" =~ \$\{.*\} ]]; then
47+
RPC_URL=$(echo "$RPC_URL" | sed 's/\${//;s/}//')
48+
RPC_URL=$(get_env_value "$RPC_URL")
49+
fi
4450
fi
4551
break
4652
else
@@ -49,22 +55,6 @@ while true; do
4955
done
5056
echo
5157

52-
#
53-
# Create missing json deployment file
54-
#
55-
56-
mkdir -p "./deployment"
57-
58-
file="./deployment/"$network".json"
59-
60-
if [ -e "$file" ]; then
61-
echo "$file found"
62-
else
63-
touch "$file"
64-
echo "$file created."
65-
fi
66-
echo
67-
6858
#
6959
# Select a script from ./script/deploy/
7060
#
@@ -104,13 +94,24 @@ while true; do
10494
#
10595
# Deployment
10696
#
107-
108-
if $is_simulation; then
109-
make simulate-deploy SCRIPT_NAME=$script_name RPC=$RPC_URL
97+
command="forge script $script_name"
98+
if [[ $is_multichain == true ]]; then
99+
command+=" --multi"
100+
if [[ $is_simulation == false ]]; then
101+
command+=" --slow"
102+
fi
110103
else
111-
make deploy SCRIPT_NAME=$script_name RPC=$RPC_URL
104+
command+=" --rpc-url $RPC_URL"
112105
fi
113106

107+
if [[ $is_simulation == false ]]; then
108+
command+=" --broadcast"
109+
fi
110+
command+=" -vvvv"
111+
112+
echo $command
113+
eval $command
114+
114115
#
115116
# Repeat
116117
#

deployment/localhost.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

deployment/sepolia.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"contractAddress": "0xbbdA47f06dCA29f417F472Aa9Aa5f8C53d25d353",
4+
"contractName": "HelloWorld"
5+
}
6+
]

deployment/sonicTestnet.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"contractAddress": "0x588A91e255e79373a51348F43e69190C8d541373",
4+
"contractName": "HelloWorld"
5+
}
6+
]

foundry.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"lib/forge-std": {
3+
"rev": "1eea5bae12ae557d589f9f0f0edae2faa47cb262"
4+
}
5+
}

foundry.toml

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[profile.default]
22
fs_permissions = [{ access = "read-write", path = "./"}]
3-
solc = '0.8.25'
3+
solc = '0.8.30'
44
src = 'src'
55
test = 'test'
66
out = 'out'
@@ -25,28 +25,12 @@ match_path = "test/unit/*"
2525
localhost = "http://127.0.0.1:8545"
2626
mainnet = "${RPC_MAINNET}"
2727
sepolia = "${RPC_SEPOLIA}"
28-
arbitrum = "${RPC_ARBITRUM}"
29-
arbitrumTestnet = "${RPC_ARBITRUM_SEPOLIA}"
30-
bsc = "${RPC_BSC}"
31-
bscTestnet = "${RPC_BSC_TESTNET}"
32-
polygon = "${RPC_POLYGON}"
33-
polygonTestnet = "${RPC_POLYGON_TESTNET}"
34-
gnosis = "${RPC_GNOSIS}"
35-
gnosisTestnet = "${RPC_GNOSIS_TESTNET}"
28+
sonicTestnet = "${RPC_SONIC_TESTNET}"
3629

3730
[etherscan]
3831
ethereum = { key = "${ETHERSCAN_KEY}", chain = 1 }
3932
sepolia = { key = "${ETHERSCAN_KEY}", chain = 11155111 }
40-
bsc = { key = "${ETHERSCAN_KEY}", chain = 56 }
41-
bscTestnet = { key = "${ETHERSCAN_KEY}", chain = 97 }
42-
polygon = { key = "${ETHERSCAN_KEY}", chain = 137 }
43-
polygonTestnet = { key = "${ETHERSCAN_KEY}", chain = 80001 }
44-
optimistic = { key = "${ETHERSCAN_KEY}", chain = 10 }
45-
optimismTestnet = { key = "${ETHERSCAN_KEY}", chain = 420 }
46-
arbitrum = { key = "${ETHERSCAN_KEY}", chain = 42161 }
47-
arbitrumSepolia = { key = "${ETHERSCAN_KEY}", chain = 421614 }
48-
gnosis = { key = "${ETHERSCAN_KEY}", chain = 100 }
49-
gnosisTestnet = { key = "${ETHERSCAN_KEY}", chain = 10200 }
33+
sonicTestnet = { key = "${ETHERSCAN_KEY}", chain = 146 }
5034

5135
[fmt]
5236
line_length = 90

0 commit comments

Comments
 (0)