-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathdeploy_script.sh
executable file
·150 lines (139 loc) · 5.62 KB
/
deploy_script.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/bash
source .env
# Define valid actions and environments
valid_actions=("deploy" "upgrade" "configure")
valid_contracts=("callservice" "mock" "wormhole" "layerzero" "centralized")
valid_environments=("mainnet" "testnet" "local")
valid_mainnet_chains=("ethereum" "binance" "avalanche" "arbitrum" "optimism" "base" "polygon" "all")
valid_testnet_chains=("polygon_amoy" "sepolia" "bsctest" "fuji" "base_sepolia" "optimism_sepolia" "arbitrum_sepolia" "all")
valid_local_chains=("local" "all")
# Initialize variables
action=""
env=""
chains=()
contract=""
contractVersion=""
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case "$1" in
--contract)
shift
contract="$1"
;;
--version)
shift
contractVersion="$1"
;;
--deploy)
action="deploy"
;;
--upgrade)
action="upgrade"
;;
--configure)
action="configure"
;;
--env)
shift
env="$1"
;;
--chain)
shift
if [ "$action" = "configure" ]; then
if [ $# -lt 2 ]; then
echo "Configure action requires exactly two parameters for chain."
exit 1
fi
chains=("$1" "$2")
shift # Additional shift to consume the second chain parameter
else
chains=("$@") # For other actions, add chains to the array
break # Exit the loop since we've processed all arguments
fi
;;
*)
echo "Invalid option: $1"
exit 1
;;
esac
shift
done
if [[ ! " ${valid_contracts[@]} " =~ " ${contract} " ]]; then
echo "Invalid action. Allowed values are: ${valid_contracts[*]}"
exit 1
fi
if [[ ! " ${valid_actions[@]} " =~ " ${action} " ]]; then
echo "Invalid action. Allowed values are: ${valid_actions[*]}"
exit 1
fi
if [[ ! " ${valid_environments[@]} " =~ " ${env} " ]]; then
echo "Invalid env parameter. Allowed values are: ${valid_environments[*]}"
exit 1
fi
if [ "$action" == "upgrade" ]; then
if [ "$contractVersion" == "" ]; then
contractVersion="CallService.sol"
fi
fi
if [ ${#chains[@]} -eq 0 ]; then
chains=("all")
fi
if [[ " ${chains[@]} " =~ "all" ]]; then
if [ "$env" == "local" ]; then
chains=("local")
elif [ "$env" == "mainnet" ]; then
chains=("ethereum" "binance" "avalanche" "arbitrum" "optimism" "base")
elif [ "$env" == "testnet" ]; then
chains=("sepolia" "binance_testnet" "fuji" "arbitrum_goerli" "optimism_goerli" "base_goerli")
fi
fi
valid_chains=()
if [ "$env" == "mainnet" ]; then
valid_chains=("${valid_mainnet_chains[@]}")
elif [ "$env" == "testnet" ]; then
valid_chains=("${valid_testnet_chains[@]}")
elif [ "$env" == "local" ]; then
valid_chains=("${valid_local_chains[@]}")
fi
for chain in "${chains[@]}"; do
if [[ ! " ${valid_chains[@]} " =~ " ${chain} " ]]; then
echo "Invalid chain: $chain"
exit 1
fi
done
if [ "$action" == "deploy" ]; then
echo "Deploying $contract on $env:"
for chain in "${chains[@]}"; do
echo "Deploying on $chain"
rm -rf out
if [ "$chain" == "local" ] || [ "$chain" == "base_sepolia" ]; then
forge script DeployCallService -s "deployContract(string memory env, string memory chain, string memory contractA)" $env $chain $contract --fork-url $chain --broadcast --sender ${ADMIN} --ffi
else
forge script DeployCallService -s "deployContract(string memory env, string memory chain, string memory contractA)" $env $chain $contract --fork-url $chain --broadcast --sender ${ADMIN} --verify --etherscan-api-key $chain --ffi
fi
done
elif [ "$action" == "upgrade" ]; then
echo "Upgrading $contract on $env:"
for chain in "${chains[@]}"; do
rm -rf out
echo "Upgrading on $chain"
if [ "$contract" == "mock" ]; then
echo "Mock Contract is not upgradeable!"
elif [ "$chain" == "local" ] || [ "$chain" == "base_sepolia" ]; then
forge script DeployCallService -s "upgradeContract(string memory chain, string memory contractName, string memory contractA)" $chain $contractVersion $contract --fork-url $chain --broadcast --sender ${ADMIN} --ffi
else
forge script DeployCallService -s "upgradeContract(string memory chain, string memory contractName, string memory contractA)" $chain $contractVersion $contract --fork-url $chain --broadcast --sender ${ADMIN} --verify --etherscan-api-key $chain --ffi
fi
done
elif [ "$action" == "configure" ]; then
echo "Configuring $contract on $env:"
if [ "$contract" == "wormhole" ]; then
forge script DeployCallService -s "configureWormholeConnection(string memory chain1, string memory chain2)" ${chains[0]} ${chains[1]} --fork-url ${chains[0]} --broadcast
forge script DeployCallService -s "configureWormholeConnection(string memory chain1, string memory chain2)" ${chains[1]} ${chains[0]} --fork-url ${chains[1]} --broadcast
elif [ "$contract" == "layerzero" ]; then
forge script DeployCallService -s "configureLayerzeroConnection(string memory chain1, string memory chain2)" ${chains[0]} ${chains[1]} --fork-url ${chains[0]} --broadcast
forge script DeployCallService -s "configureLayerzeroConnection(string memory chain1, string memory chain2)" ${chains[1]} ${chains[0]} --fork-url ${chains[1]} --broadcast
else
echo "Contract $contract is not configurable!"
fi
fi