- Resolve stash: merge load_deployment_env path with secure-secrets and CR/LF RPC strip - create-pmm-full-mesh-chain138.sh delegates to sync-chain138-pmm-pools-from-json.sh - env.additions.example: canonical PMM pool defaults (cUSDT/USDT per crosscheck) - Include Chain138 scripts, official mirror deploy scaffolding, and prior staged changes Made-with: Cursor
136 lines
3.8 KiB
Bash
Executable File
136 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Verify contract deployments in parallel
|
|
# Uses .env file for configuration
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
|
|
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
|
|
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
|
|
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$PROJECT_ROOT/.env"
|
|
set +a
|
|
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$REPO_ROOT/.env"
|
|
set +a
|
|
fi
|
|
|
|
# Load environment variables
|
|
if [ ! -f .env ]; then
|
|
log_error "Error: .env file not found"
|
|
echo "Please create .env file with required variables"
|
|
exit 1
|
|
fi
|
|
|
|
source .env
|
|
|
|
# Check required variables
|
|
if [ -z "$RPC_URL" ]; then
|
|
log_error "Error: RPC_URL not set in .env"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v cast &> /dev/null; then
|
|
log_error "Error: cast (Foundry) not found. Install Foundry to verify on-chain deployments."
|
|
exit 1
|
|
fi
|
|
|
|
# Function to verify contract
|
|
verify_contract() {
|
|
local name=$1
|
|
local address=$2
|
|
local output_file=$3
|
|
|
|
if [ -z "$address" ] || [ "$address" = "0x0000000000000000000000000000000000000000" ] || [ "$address" = "" ]; then
|
|
echo "[${name}] ⚠️ Address not set" >> "$output_file"
|
|
return 1
|
|
fi
|
|
|
|
CODE=$(cast code "$address" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$CODE" ] && [ "$CODE" != "0x" ] && [ ${#CODE} -gt 2 ]; then
|
|
echo "[${name}] ✅ Deployed at: $address (code length: ${#CODE} chars)" >> "$output_file"
|
|
return 0
|
|
else
|
|
echo "[${name}] ❌ Not found at: $address" >> "$output_file"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
log_success "=== Parallel Contract Verification ==="
|
|
log_warn "Verifying contracts on RPC: $RPC_URL"
|
|
echo ""
|
|
|
|
# Create temp directory for parallel outputs
|
|
TEMP_DIR=$(mktemp -d)
|
|
declare -A VERIFY_PIDS
|
|
FAILED=0
|
|
|
|
# Verify all contracts in parallel
|
|
CONTRACTS=(
|
|
"MULTICALL_ADDRESS:Multicall"
|
|
"WETH9_ADDRESS:WETH9"
|
|
"WETH10_ADDRESS:WETH10"
|
|
"CCIP_ROUTER:CCIP Router"
|
|
"CCIPWETH9BRIDGE_ADDRESS:CCIPWETH9Bridge"
|
|
"CCIPWETH10BRIDGE_ADDRESS:CCIPWETH10Bridge"
|
|
"ORACLE_AGGREGATOR_ADDRESS:Oracle Aggregator"
|
|
"ORACLE_PROXY_ADDRESS:Oracle Proxy"
|
|
"MULTISIG_ADDRESS:MultiSig"
|
|
)
|
|
|
|
for contract_info in "${CONTRACTS[@]}"; do
|
|
IFS=':' read -r env_var name <<< "$contract_info"
|
|
address="${!env_var}"
|
|
|
|
if [ -n "$address" ]; then
|
|
output_file="${TEMP_DIR}/${env_var}.out"
|
|
(
|
|
verify_contract "$name" "$address" "$output_file"
|
|
) &
|
|
VERIFY_PIDS["$env_var"]=$!
|
|
fi
|
|
done
|
|
|
|
# Wait for all verifications to complete
|
|
for env_var in "${!VERIFY_PIDS[@]}"; do
|
|
if ! wait "${VERIFY_PIDS[$env_var]}"; then
|
|
((FAILED++))
|
|
fi
|
|
done
|
|
|
|
# Display results
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
for contract_info in "${CONTRACTS[@]}"; do
|
|
IFS=':' read -r env_var name <<< "$contract_info"
|
|
output_file="${TEMP_DIR}/${env_var}.out"
|
|
if [ -f "$output_file" ]; then
|
|
cat "$output_file"
|
|
fi
|
|
done
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# Cleanup
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
# Summary
|
|
TOTAL=${#VERIFY_PIDS[@]}
|
|
if [ $FAILED -eq 0 ]; then
|
|
log_success "✅ All ${TOTAL} contract(s) verified successfully"
|
|
exit 0
|
|
else
|
|
log_error "❌ ${FAILED} out of ${TOTAL} contract(s) failed verification"
|
|
exit 1
|
|
fi
|
|
|