|
| 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 |
0 commit comments