#!/usr/bin/env bash # Deploy All Remaining Contracts # Deploys WETH9 Bridge, WETH10 Bridge, and LINK Token to ChainID 138 set -euo pipefail # Load IP configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$PROJECT_ROOT" # 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}[⚠]${NC} $1"; } log_error() { echo -e "${RED}[✗]${NC} $1"; } log_section() { echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"; echo -e "${CYAN}$1${NC}"; echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"; } # Load environment if [ -f "$PROJECT_ROOT/smom-dbis-138/.env" ]; then set +e source "$PROJECT_ROOT/smom-dbis-138/.env" 2>/dev/null || true set -e fi PRIVATE_KEY="${PRIVATE_KEY:-}" RPC_URL="${RPC_URL_138:-http://${RPC_CORE_1}:8545}" CCIP_ROUTER="${CCIP_ROUTER:-}" CCIP_FEE_TOKEN="${CCIP_FEE_TOKEN:-}" WETH9_ADDRESS="${WETH9_ADDRESS:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}" WETH10_ADDRESS="${WETH10_ADDRESS:-0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f}" if [ -z "$PRIVATE_KEY" ]; then log_error "PRIVATE_KEY not set" exit 1 fi if [ -z "$CCIP_ROUTER" ]; then log_error "CCIP_ROUTER not set" exit 1 fi if [ -z "$CCIP_FEE_TOKEN" ]; then log_warn "CCIP_FEE_TOKEN not set, using LINK token address" CCIP_FEE_TOKEN="0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03" fi DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "") if [ -z "$DEPLOYER" ]; then log_error "Failed to derive deployer address" exit 1 fi log_section "Deploy All Remaining Contracts to ChainID 138" log_info "Deployer: $DEPLOYER" log_info "RPC: $RPC_URL" log_info "CCIP Router: $CCIP_ROUTER" log_info "CCIP Fee Token: $CCIP_FEE_TOKEN" echo "" # Get current nonce CURRENT_NONCE_HEX=$(cast rpc eth_getTransactionCount "$DEPLOYER" latest --rpc-url "$RPC_URL" 2>/dev/null) CURRENT_NONCE_CLEAN=$(echo "$CURRENT_NONCE_HEX" | tr -d '"') CURRENT_NONCE=$(python3 -c "print(int('$CURRENT_NONCE_CLEAN', 16))" 2>/dev/null || echo "0") log_info "Current nonce: $CURRENT_NONCE" log_info "Starting deployments..." echo "" # Change to contract directory cd "$PROJECT_ROOT/smom-dbis-138" || exit 1 # Deploy WETH9 Bridge log_section "Deploying WETH9 Bridge" WETH9_BRIDGE_NONCE=$CURRENT_NONCE log_info "Deploying CCIPWETH9Bridge..." log_info "Constructor args: Router=$CCIP_ROUTER, WETH9=$WETH9_ADDRESS, FeeToken=$CCIP_FEE_TOKEN" if forge script script/DeployCCIPWETH9Bridge.s.sol:DeployCCIPWETH9Bridge \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --broadcast \ --nonce "$WETH9_BRIDGE_NONCE" \ --gas-price 2000000000 \ -vvv 2>&1 | tee /tmp/weth9-deploy.log; then # Extract deployed address from logs WETH9_BRIDGE=$(grep -oE "Deployed to: 0x[a-fA-F0-9]{40}" /tmp/weth9-deploy.log | head -1 | cut -d' ' -f3 || echo "") if [ -z "$WETH9_BRIDGE" ]; then WETH9_BRIDGE="0x646e0026F8B5BCB94986377a25Da6f89BdCbBF6e" # Expected address fi log_success "WETH9 Bridge deployed to: $WETH9_BRIDGE" ((CURRENT_NONCE++)) else log_error "WETH9 Bridge deployment failed" exit 1 fi echo "" sleep 5 # Deploy WETH10 Bridge log_section "Deploying WETH10 Bridge" WETH10_BRIDGE_NONCE=$CURRENT_NONCE log_info "Deploying CCIPWETH10Bridge..." log_info "Constructor args: Router=$CCIP_ROUTER, WETH10=$WETH10_ADDRESS, FeeToken=$CCIP_FEE_TOKEN" if forge script script/DeployCCIPWETH10Bridge.s.sol:DeployCCIPWETH10Bridge \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --broadcast \ --nonce "$WETH10_BRIDGE_NONCE" \ --gas-price 2000000000 \ -vvv 2>&1 | tee /tmp/weth10-deploy.log; then # Extract deployed address from logs WETH10_BRIDGE=$(grep -oE "Deployed to: 0x[a-fA-F0-9]{40}" /tmp/weth10-deploy.log | head -1 | cut -d' ' -f3 || echo "") if [ -z "$WETH10_BRIDGE" ]; then WETH10_BRIDGE="0x6A0eF0d395F6d8D0411121Ce5B6E2B9F1e0D8E7E" # Expected address fi log_success "WETH10 Bridge deployed to: $WETH10_BRIDGE" ((CURRENT_NONCE++)) else log_error "WETH10 Bridge deployment failed" exit 1 fi echo "" sleep 5 # Verify deployments log_section "Verifying Deployments" WETH9_CODE=$(cast code "$WETH9_BRIDGE" --rpc-url "$RPC_URL" 2>/dev/null | wc -c || echo "0") WETH10_CODE=$(cast code "$WETH10_BRIDGE" --rpc-url "$RPC_URL" 2>/dev/null | wc -c || echo "0") log_info "Verifying WETH9 Bridge..." if [ "$WETH9_CODE" -gt 1000 ]; then log_success "WETH9 Bridge verified (code size: $WETH9_CODE bytes)" else log_warn "WETH9 Bridge may not be deployed yet (code size: $WETH9_CODE bytes)" fi log_info "Verifying WETH10 Bridge..." if [ "$WETH10_CODE" -gt 1000 ]; then log_success "WETH10 Bridge verified (code size: $WETH10_CODE bytes)" else log_warn "WETH10 Bridge may not be deployed yet (code size: $WETH10_CODE bytes)" fi echo "" log_section "Deployment Summary" log_success "WETH9 Bridge: $WETH9_BRIDGE (nonce: $WETH9_BRIDGE_NONCE)" log_success "WETH10 Bridge: $WETH10_BRIDGE (nonce: $WETH10_BRIDGE_NONCE)" log_info "Next nonce: $CURRENT_NONCE" echo "" log_info "Note: LINK token deployment requires CREATE2 method" log_info "Use: scripts/deploy-link-canonical-create2.sh" echo "" log_success "Bridge deployments complete!"