Skip to content

Commit 4bae93c

Browse files
dylandesrosierMcOso
authored andcommitted
feat: add simple scripts for verifying contracts on etherscan(s)
1 parent 669eb6b commit 4bae93c

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

script/verify-contract.sh

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/bin/bash
2+
3+
################################################################################
4+
# Verifies a contract across multiple chains
5+
# - Requires the contract to be at the same address on every chain
6+
# - Requires the appropriate API keys to be set in .env
7+
################################################################################
8+
9+
# Example usage:
10+
# CONTRACT=DelegationManager
11+
# ADDRESS=0x0000000000000000000000000000000000000000
12+
# CONSTRUCTOR="constructor(string,string,uint256,uint256)" "ForgeUSD" "FUSD" 18 1000000000000000000000
13+
14+
CONTRACT=NativeTokenPaymentEnforcer
15+
ADDRESS=0x87Fe18EbF99e42fcE8A03a25F1d20E119407f8e7
16+
CONSTRUCTOR_ARGS=$(cast abi-encode "constructor(address, address)" "0x56D56e07e3d6Ee5a24e30203A37a0a460f42D7A3" "0x7378dE585998d3E18Ce147867C335C25B3dB8Ee5")
17+
18+
# sepolia, linea-sepolia, linea, base, optimism, arbitrum, polygon
19+
CHAIN_IDS=(11155111 59141 59144 8453 10 42161 137)
20+
21+
set -o allexport
22+
source .env
23+
set +o allexport
24+
25+
# Function to get the appropriate API key based on chain ID
26+
get_api_key() {
27+
case $1 in
28+
11155111) echo "$ETHERSCAN_API_KEY" ;;
29+
59144) echo "$LINEASCAN_API_KEY" ;;
30+
59141) echo "$LINEASCAN_API_KEY" ;;
31+
8453) echo "$BASESCAN_API_KEY" ;;
32+
10) echo "$OPTIMISTIC_ETHERSCAN_API_KEY" ;;
33+
42161) echo "$ARBISCAN_API_KEY" ;;
34+
137) echo "$POLYGONSCAN_API_KEY" ;;
35+
*) echo "Unknown chain ID" && return 1 ;;
36+
esac
37+
}
38+
39+
for CHAIN_ID in "${CHAIN_IDS[@]}"
40+
do
41+
API_KEY=$(get_api_key $CHAIN_ID)
42+
43+
echo "Verifying $CONTRACT at $ADDRESS on $CHAIN_ID..."
44+
45+
forge verify-contract \
46+
--chain-id $CHAIN_ID \
47+
--num-of-optimizations 200 \
48+
--watch \
49+
--constructor-args $CONSTRUCTOR_ARGS \
50+
--etherscan-api-key $API_KEY \
51+
$ADDRESS \
52+
src/enforcers/$CONTRACT.sol:$CONTRACT
53+
54+
echo "Verification of $CONTRACT on $CHAIN_ID completed."
55+
echo "-------------------------------------------"
56+
done
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/bin/bash
2+
3+
################################################################################
4+
# Verifies contracts across multiple chains
5+
# - Requires contracts to be at the same address on every chain
6+
# - Requires the appropriate API keys to be set in .env
7+
# - Requires the contracts to have no constructor arguments
8+
################################################################################
9+
10+
# Note: Array lengths must line up
11+
ENFORCERS=()
12+
ADDRESSES=()
13+
14+
# sepolia, linea-sepolia, linea, base, optimism, arbitrum, polygon
15+
CHAIN_IDS=(11155111 59141 59144 8453 10 42161 137)
16+
17+
set -o allexport
18+
source .env
19+
set +o allexport
20+
21+
# Function to get the appropriate API key based on chain ID
22+
get_api_key() {
23+
case $1 in
24+
11155111) echo "$ETHERSCAN_API_KEY" ;;
25+
59144) echo "$LINEASCAN_API_KEY" ;;
26+
59141) echo "$LINEASCAN_API_KEY" ;;
27+
8453) echo "$BASESCAN_API_KEY" ;;
28+
10) echo "$OPTIMISTIC_ETHERSCAN_API_KEY" ;;
29+
42161) echo "$ARBISCAN_API_KEY" ;;
30+
137) echo "$POLYGONSCAN_API_KEY" ;;
31+
*) echo "Unknown chain ID" && return 1 ;;
32+
esac
33+
}
34+
for ((i=0; i<${#ENFORCERS[@]}; i++)); do
35+
echo "Iteration $i"
36+
echo "-------------------------------------------"
37+
38+
CONTRACT=${ENFORCERS[i]}
39+
ADDRESS=${ADDRESSES[i]}
40+
41+
for CHAIN_ID in "${CHAIN_IDS[@]}"
42+
do
43+
API_KEY=$(get_api_key $CHAIN_ID)
44+
45+
echo "Verifying $CONTRACT at $ADDRESS on $CHAIN_ID..."
46+
47+
forge verify-contract \
48+
--chain-id $CHAIN_ID \
49+
--num-of-optimizations 200 \
50+
--watch \
51+
--etherscan-api-key $API_KEY \
52+
$ADDRESS \
53+
src/enforcers/$CONTRACT.sol:$CONTRACT
54+
55+
echo "Verification of $CONTRACT on $CHAIN_ID completed."
56+
echo "-------------------------------------------"
57+
done
58+
done

0 commit comments

Comments
 (0)