2025-12-12 14:57:48 -08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# Verify Ethereum Mainnet contracts on Etherscan using Foundry
|
|
|
|
|
# This script provides the exact commands needed to verify contracts
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo "Ethereum Mainnet Contract Verification"
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Mainnet contract addresses
|
2026-03-24 22:49:50 -07:00
|
|
|
CCIPWETH9BRIDGE_MAINNET="${MAINNET_CCIP_WETH9_BRIDGE:-0xc9901ce2Ddb6490FAA183645147a87496d8b20B6}"
|
|
|
|
|
CCIPWETH10BRIDGE_MAINNET="${MAINNET_CCIP_WETH10_BRIDGE:-0x04E1e22B0D41e99f4275bd40A50480219bc9A223}"
|
2025-12-12 14:57:48 -08:00
|
|
|
|
|
|
|
|
# Constructor arguments
|
|
|
|
|
CCIP_ROUTER="${CCIP_MAINNET_ROUTER:-0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D}"
|
|
|
|
|
WETH9_MAINNET="${WETH9_MAINNET:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}"
|
|
|
|
|
WETH10_MAINNET="${WETH10_MAINNET:-0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f}"
|
|
|
|
|
LINK_TOKEN="${CCIP_MAINNET_LINK:-0x514910771AF9Ca656af840dff83E8264EcF986CA}"
|
|
|
|
|
|
|
|
|
|
if [ -z "${ETHERSCAN_API_KEY:-}" ]; then
|
|
|
|
|
echo "⚠️ ETHERSCAN_API_KEY not set in .env"
|
|
|
|
|
echo " Please add your Etherscan API key to .env"
|
|
|
|
|
echo ""
|
|
|
|
|
echo " Get API key from: https://etherscan.io/myapikey"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "Verifying CCIPWETH9Bridge..."
|
|
|
|
|
echo "Address: $CCIPWETH9BRIDGE_MAINNET"
|
|
|
|
|
echo "Constructor Args:"
|
|
|
|
|
echo " Router: $CCIP_ROUTER"
|
|
|
|
|
echo " WETH9: $WETH9_MAINNET"
|
|
|
|
|
echo " LINK: $LINK_TOKEN"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Encode constructor arguments
|
|
|
|
|
CONSTRUCTOR_ARGS=$(cast abi-encode "constructor(address,address,address)" "$CCIP_ROUTER" "$WETH9_MAINNET" "$LINK_TOKEN")
|
|
|
|
|
|
|
|
|
|
echo "Running verification..."
|
|
|
|
|
forge verify-contract \
|
|
|
|
|
--chain-id 1 \
|
|
|
|
|
--num-of-optimizations 200 \
|
|
|
|
|
--watch \
|
|
|
|
|
--constructor-args "$CONSTRUCTOR_ARGS" \
|
|
|
|
|
--etherscan-api-key "$ETHERSCAN_API_KEY" \
|
|
|
|
|
"$CCIPWETH9BRIDGE_MAINNET" \
|
|
|
|
|
"contracts/ccip/CCIPWETH9Bridge.sol:CCIPWETH9Bridge"
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
echo "Verifying CCIPWETH10Bridge..."
|
|
|
|
|
echo "Address: $CCIPWETH10BRIDGE_MAINNET"
|
|
|
|
|
echo "Constructor Args:"
|
|
|
|
|
echo " Router: $CCIP_ROUTER"
|
|
|
|
|
echo " WETH10: $WETH10_MAINNET"
|
|
|
|
|
echo " LINK: $LINK_TOKEN"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Encode constructor arguments
|
|
|
|
|
CONSTRUCTOR_ARGS=$(cast abi-encode "constructor(address,address,address)" "$CCIP_ROUTER" "$WETH10_MAINNET" "$LINK_TOKEN")
|
|
|
|
|
|
|
|
|
|
echo "Running verification..."
|
|
|
|
|
forge verify-contract \
|
|
|
|
|
--chain-id 1 \
|
|
|
|
|
--num-of-optimizations 200 \
|
|
|
|
|
--watch \
|
|
|
|
|
--constructor-args "$CONSTRUCTOR_ARGS" \
|
|
|
|
|
--etherscan-api-key "$ETHERSCAN_API_KEY" \
|
|
|
|
|
"$CCIPWETH10BRIDGE_MAINNET" \
|
|
|
|
|
"contracts/ccip/CCIPWETH10Bridge.sol:CCIPWETH10Bridge"
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo "Verification Complete"
|
|
|
|
|
echo "=========================================="
|
|
|
|
|
echo ""
|
|
|
|
|
echo "📄 View contracts:"
|
|
|
|
|
echo " • CCIPWETH9Bridge: https://etherscan.io/address/$CCIPWETH9BRIDGE_MAINNET"
|
|
|
|
|
echo " • CCIPWETH10Bridge: https://etherscan.io/address/$CCIPWETH10BRIDGE_MAINNET"
|
|
|
|
|
echo ""
|