Files
proxmox/scripts/verify-contract-etherscan.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

139 lines
4.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verify CCIPWETH9Bridge contract on Etherscan
# Usage: ./verify-contract-etherscan.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SOURCE_PROJECT="/home/intlc/projects/smom-dbis-138"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# Load environment
if [ -f "$SOURCE_PROJECT/.env" ]; then
source "$SOURCE_PROJECT/.env"
else
log_error ".env file not found in $SOURCE_PROJECT"
exit 1
fi
# Contract details
CONTRACT="0x89dd12025bfCD38A168455A44B400e913ED33BE2"
CONTRACT_NAME="CCIPWETH9Bridge"
CONTRACT_PATH="contracts/ccip/CCIPWETH9Bridge.sol"
# Check if contract exists on Ethereum Mainnet
MAINNET_RPC="${ETHEREUM_MAINNET_RPC:-}"
if [ -z "$MAINNET_RPC" ]; then
log_error "ETHEREUM_MAINNET_RPC not set in .env"
exit 1
fi
log_info "=== Verifying Contract on Etherscan ==="
log_info ""
log_info "Contract: $CONTRACT"
log_info "Name: $CONTRACT_NAME"
log_info ""
# Check if contract exists
log_info "1. Checking if contract exists on Ethereum Mainnet..."
CODE=$(cast code "$CONTRACT" --rpc-url "$MAINNET_RPC" 2>/dev/null || echo "")
if [ -z "$CODE" ] || [ "$CODE" = "0x" ]; then
log_error "Contract not found on Ethereum Mainnet at $CONTRACT"
exit 1
fi
log_success "Contract exists on Ethereum Mainnet"
# Get constructor arguments from Chain 138
log_info ""
log_info "2. Getting constructor arguments from Chain 138 contract..."
RPC_URL_138="${RPC_URL_138:-http://192.168.11.250:8545}"
# Get full addresses (cast returns padded addresses)
CCIP_ROUTER_RAW=$(cast call "$CONTRACT" "ccipRouter()" --rpc-url "$RPC_URL_138" 2>/dev/null || echo "")
WETH9_RAW=$(cast call "$CONTRACT" "weth9()" --rpc-url "$RPC_URL_138" 2>/dev/null || echo "")
FEE_TOKEN_RAW=$(cast call "$CONTRACT" "feeToken()" --rpc-url "$RPC_URL_138" 2>/dev/null || echo "")
# Extract addresses (last 40 hex chars)
CCIP_ROUTER=$(echo "$CCIP_ROUTER_RAW" | grep -oE "0x[a-fA-F0-9]{40}" | tail -1 || echo "$CCIP_ROUTER_RAW" | sed 's/0x//' | tail -c 41 | sed 's/^/0x/')
WETH9=$(echo "$WETH9_RAW" | grep -oE "0x[a-fA-F0-9]{40}" | tail -1 || echo "$WETH9_RAW" | sed 's/0x//' | tail -c 41 | sed 's/^/0x/')
FEE_TOKEN=$(echo "$FEE_TOKEN_RAW" | grep -oE "0x[a-fA-F0-9]{40}" | tail -1 || echo "$FEE_TOKEN_RAW" | sed 's/0x//' | tail -c 41 | sed 's/^/0x/')
# If extraction failed, try alternative method
if [ ${#CCIP_ROUTER} -lt 42 ] || [ ${#WETH9} -lt 42 ] || [ ${#FEE_TOKEN} -lt 42 ]; then
log_warn "Could not extract full addresses, trying alternative method..."
# Use known addresses from deployment
CCIP_ROUTER="0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"
WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
FEE_TOKEN="0x514910771AF9Ca656af840dff83E8264EcF986CA"
log_info "Using known deployment addresses"
fi
log_info " CCIP Router: $CCIP_ROUTER"
log_info " WETH9: $WETH9"
log_info " Fee Token: $FEE_TOKEN"
# Compiler settings
log_info ""
log_info "3. Compiler settings:"
log_info " Solidity: 0.8.20"
log_info " Optimizer: Enabled (runs: 200)"
log_info " Via IR: false (Etherscan may not support via-ir)"
# Verify contract
log_info ""
log_info "4. Verifying contract on Etherscan..."
cd "$SOURCE_PROJECT"
# Check if Etherscan API key is set
if [ -z "${ETHERSCAN_API_KEY:-}" ]; then
log_error "ETHERSCAN_API_KEY not set in .env"
exit 1
fi
# Verify using forge
log_info "Running forge verify-contract..."
# Encode constructor arguments
CONSTRUCTOR_ARGS=$(cast abi-encode "constructor(address,address,address)" "$CCIP_ROUTER" "$WETH9" "$FEE_TOKEN")
log_info " Constructor args: $CONSTRUCTOR_ARGS"
# Try verification without via-ir first (Etherscan may not support it)
log_info "Attempting verification (without via-ir flag - Etherscan handles this)..."
if forge verify-contract \
"$CONTRACT" \
"$CONTRACT_PATH:$CONTRACT_NAME" \
--chain-id 1 \
--etherscan-api-key "$ETHERSCAN_API_KEY" \
--constructor-args "$CONSTRUCTOR_ARGS" \
--compiler-version "0.8.20" \
--num-of-optimizations 200 \
--watch; then
log_success "✓ Contract verified successfully!"
log_info ""
log_info "View on Etherscan:"
log_info " https://etherscan.io/address/$CONTRACT#code"
else
log_error "Contract verification failed"
log_info ""
log_info "Troubleshooting:"
log_info " 1. Check constructor arguments match deployment"
log_info " 2. Verify compiler settings (0.8.20, optimizer: 200, via-ir: true)"
log_info " 3. Ensure contract source matches deployed bytecode"
exit 1
fi