Files
proxmox/scripts/verify-all-contracts.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

219 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verify all deployed contracts on Blockscout
# Usage: ./verify-all-contracts.sh [compiler-version]
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
SOURCE_PROJECT="${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'
CYAN='\033[0;36m'
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"; }
log_section() { echo -e "${CYAN}════════════════════════════════════════${NC}"; }
# Configuration
RPC_URL="https://rpc-core.d-bis.org"
VERIFIER_URL="https://explorer.d-bis.org/api"
COMPILER_VERSION="${1:-0.8.20}"
CHAIN_ID=138
# Load environment
if [ -f "$SOURCE_PROJECT/.env" ]; then
source "$SOURCE_PROJECT/.env" 2>/dev/null || true
fi
PRIVATE_KEY="${PRIVATE_KEY:-}"
if [ -z "$PRIVATE_KEY" ]; then
log_error "PRIVATE_KEY not set. Set it in $SOURCE_PROJECT/.env or export it."
exit 1
fi
# Ensure PRIVATE_KEY has 0x prefix
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
export PRIVATE_KEY="0x$PRIVATE_KEY"
fi
log_section
log_info "Contract Verification on Blockscout"
log_info "ChainID: $CHAIN_ID"
log_info "Compiler Version: $COMPILER_VERSION"
log_section
echo ""
# Contract addresses to verify
declare -A CONTRACTS=(
["Oracle Proxy"]="0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6"
["Oracle Aggregator"]="0x99b3511a2d315a497c8112c1fdd8d508d4b1e506"
["CCIP Router"]="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
["CCIP Sender"]="0x105F8A15b819948a89153505762444Ee9f324684"
["CCIPWETH9Bridge"]="0x89dd12025bfCD38A168455A44B400e913ED33BE2"
["CCIPWETH10Bridge"]="0xe0E93247376aa097dB308B92e6Ba36bA015535D0"
["Price Feed Keeper"]="0xD3AD6831aacB5386B8A25BB8D8176a6C8a026f04"
)
# Pre-deployed contracts (not verified)
declare -A PREDEPLOYED=(
["WETH9"]="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
["WETH10"]="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f"
["Multicall"]="0x99b3511a2d315a497c8112c1fdd8d508d4b1e506"
)
# Check if contract is already verified on Blockscout
check_verification_status() {
local address="$1"
local name="$2"
log_info "Checking verification status for $name ($address)..."
# Check Blockscout API for verification status
local response=$(curl -s "${VERIFIER_URL%/api}/api/v2/smart-contracts/${address}" 2>/dev/null || echo "")
if echo "$response" | grep -q '"is_verified":true' || echo "$response" | grep -q '"verified":true'; then
log_success "$name is already verified"
return 0
else
log_warn "$name is not verified"
return 1
fi
}
# Verify a contract
verify_contract() {
local name="$1"
local address="$2"
local contract_name="$3"
local constructor_args="${4:-}"
log_info ""
log_section
log_info "Verifying: $name"
log_info "Address: $address"
log_info "Contract: $contract_name"
log_section
echo ""
# Check if already verified
if check_verification_status "$address" "$name"; then
return 0
fi
# Build verify command
local verify_cmd="forge verify-contract \
$address \
$contract_name \
--chain-id $CHAIN_ID \
--rpc-url $RPC_URL \
--verifier blockscout \
--verifier-url $VERIFIER_URL \
--compiler-version $COMPILER_VERSION"
if [ -n "$constructor_args" ]; then
verify_cmd="$verify_cmd --constructor-args $constructor_args"
fi
log_info "Running verification command..."
log_info "Command: $verify_cmd"
echo ""
# Run verification
if eval "$verify_cmd"; then
log_success "$name verification successful!"
return 0
else
log_error "$name verification failed"
return 1
fi
}
# Main verification process
cd "$SOURCE_PROJECT" || exit 1
VERIFIED_COUNT=0
FAILED_COUNT=0
SKIPPED_COUNT=0
log_info "Starting contract verification process..."
log_info "Total contracts to check: ${#CONTRACTS[@]}"
echo ""
# Verify each contract
for contract_name in "${!CONTRACTS[@]}"; do
address="${CONTRACTS[$contract_name]}"
# Map contract names to Solidity contract names
case "$contract_name" in
"Oracle Proxy")
solidity_name="Proxy"
;;
"Oracle Aggregator")
solidity_name="Aggregator"
;;
"CCIP Router")
solidity_name="Router"
log_warn "CCIP Router may require special verification (using official Chainlink contracts)"
continue
;;
"CCIP Sender")
solidity_name="CCIPSender"
;;
"CCIPWETH9Bridge")
solidity_name="CCIPWETH9Bridge"
;;
"CCIPWETH10Bridge")
solidity_name="CCIPWETH10Bridge"
;;
"Price Feed Keeper")
solidity_name="PriceFeedKeeper"
;;
*)
log_warn "Unknown contract type: $contract_name, skipping..."
SKIPPED_COUNT=$((SKIPPED_COUNT + 1))
continue
;;
esac
if verify_contract "$contract_name" "$address" "$solidity_name"; then
VERIFIED_COUNT=$((VERIFIED_COUNT + 1))
else
FAILED_COUNT=$((FAILED_COUNT + 1))
fi
# Small delay between verifications
sleep 2
done
# Summary
log_section
log_info "Verification Summary"
log_section
log_success "Verified: $VERIFIED_COUNT"
if [ $FAILED_COUNT -gt 0 ]; then
log_error "Failed: $FAILED_COUNT"
fi
if [ $SKIPPED_COUNT -gt 0 ]; then
log_warn "Skipped: $SKIPPED_COUNT"
fi
log_info ""
log_info "Pre-deployed contracts (not verified):"
for contract_name in "${!PREDEPLOYED[@]}"; do
log_info " - $contract_name: ${PREDEPLOYED[$contract_name]}"
done
echo ""
log_info "View contracts on Blockscout:"
log_info " https://explorer.d-bis.org/address/<CONTRACT_ADDRESS>"
echo ""