Files
smom-dbis-138/scripts/deployment/verify-deployed-contracts.sh
2026-03-02 12:14:09 -08:00

73 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verify deployed contracts on Avalanche, Arbitrum, Cronos.
# Requires ETHERSCAN_API_KEY (or SNOWTRACE_API_KEY, ARBISCAN_API_KEY, CRONOSCAN_API_KEY per chain).
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
source .env 2>/dev/null || true
if [ -z "${ETHERSCAN_API_KEY:-}" ]; then
echo "ERROR: ETHERSCAN_API_KEY not set. Set in .env or export."
exit 1
fi
export SNOWTRACE_API_KEY="${SNOWTRACE_API_KEY:-$ETHERSCAN_API_KEY}"
export ARBISCAN_API_KEY="${ARBISCAN_API_KEY:-$ETHERSCAN_API_KEY}"
# Cronos not in Etherscan V2; needs separate CRONOSCAN_API_KEY from cronoscan.com (no fallback)
verify_one() {
local addr="$1"
local contract="$2"
local chain_arg="$3"
local chain_name="$4"
echo "Verifying $contract at $addr on $chain_name..."
# shellcheck disable=SC2086
forge verify-contract "$addr" "$contract" $chain_arg \
--etherscan-api-key "${ETHERSCAN_API_KEY}" \
--watch 2>/dev/null || echo " (may already be verified or need chain-specific API key)"
}
# Avalanche 43114
for addr in 0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08 0x89dd12025bfCD38A168455A44B400e913ED33BE2 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7; do
case "$addr" in
0xa4B9DD039565AeD9641D45b57061f99d9cA6Df08) c="contracts/tokens/WETH.sol:WETH" ;;
0x89dd12025bfCD38A168455A44B400e913ED33BE2) c="contracts/tokens/WETH10.sol:WETH10" ;;
0xe0E93247376aa097dB308B92e6Ba36bA015535D0) c="contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" ;;
0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7) c="contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge" ;;
esac
verify_one "$addr" "$c" "--chain avalanche" "Avalanche"
done
# Arbitrum 42161
for addr in 0x89dd12025bfCD38A168455A44B400e913ED33BE2 0xe0E93247376aa097dB308B92e6Ba36bA015535D0 0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7 0xa780ef19A041745d353c9432f2a7f5A241335ffE; do
case "$addr" in
0x89dd12025bfCD38A168455A44B400e913ED33BE2) c="contracts/tokens/WETH.sol:WETH" ;;
0xe0E93247376aa097dB308B92e6Ba36bA015535D0) c="contracts/tokens/WETH10.sol:WETH10" ;;
0xAb57BF30F1354CA0590af22D8974c7f24DB2DbD7) c="contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge" ;;
0xa780ef19A041745d353c9432f2a7f5A241335ffE) c="contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge" ;;
esac
verify_one "$addr" "$c" "--chain arbitrum" "Arbitrum"
done
# Cronos 25 — API: explorer-api.cronos.org/mainnet. Forge Blockscout verifier incompatible.
# Try: ./scripts/deployment/verify-cronos-contracts.sh (may fail; use manual fallback)
# See docs/04-configuration/CRONOS_EXPLORER_OPERATIONS.md
if [ -n "${CRONOSCAN_API_KEY:-}" ]; then
echo ""
echo "Cronos contracts: run ./scripts/deployment/verify-cronos-contracts.sh"
echo "If that fails, manual verification: export-cronos-verification-sources.sh then CRONOS_VERIFICATION_RUNBOOK.md"
echo " WETH9: 0x99B3511A2d315A497C8112C1fdd8D508d4B1E506"
echo " WETH10: 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6"
echo " CCIPWETH9: 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
echo " CCIPWETH10: 0x105F8A15b819948a89153505762444Ee9f324684"
echo ""
else
echo "Skipping Cronos: set CRONOSCAN_API_KEY (from explorer.cronos.org) for manual verification."
fi
echo "Verification complete."