190 lines
6.8 KiB
Bash
Executable File
190 lines
6.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Complete CCIP Deployment Script for ChainID 138
|
|
# This script performs the complete CCIP deployment and configuration
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/../lib/init.sh"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Load environment
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
source "$PROJECT_ROOT/.env"
|
|
fi
|
|
|
|
RPC_URL="${RPC_URL_138:-${CHAIN138_RPC_URL:-http://localhost:8545}}"
|
|
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
|
|
|
if [ -z "$PRIVATE_KEY" ]; then
|
|
log_error "Error: PRIVATE_KEY environment variable not set"
|
|
exit 1
|
|
fi
|
|
|
|
log_info "=== CCIP Complete Deployment for ChainID 138 ==="
|
|
echo "RPC URL: $RPC_URL"
|
|
echo ""
|
|
|
|
# Verify RPC connectivity
|
|
if ! cast block-number --rpc-url "$RPC_URL" &>/dev/null; then
|
|
log_error "Error: Cannot connect to RPC at $RPC_URL"
|
|
exit 1
|
|
fi
|
|
|
|
CHAIN_ID=$(cast chain-id --rpc-url "$RPC_URL" 2>/dev/null || echo "unknown")
|
|
if [ "$CHAIN_ID" != "138" ]; then
|
|
log_warn "⚠️ Warning: Chain ID is $CHAIN_ID, expected 138"
|
|
read -p "Continue anyway? (y/N) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "Chain ID: $CHAIN_ID"
|
|
echo ""
|
|
|
|
# Step 1: Calculate Chain Selector
|
|
log_info "Step 1: Calculating chain selector..."
|
|
if [ -f "$PROJECT_ROOT/scripts/ccip/calculate-chain-selector.sh" ]; then
|
|
bash "$PROJECT_ROOT/scripts/ccip/calculate-chain-selector.sh"
|
|
log_success "✅ Chain selector calculated"
|
|
else
|
|
log_warn "⚠️ Chain selector script not found, using default: 138"
|
|
CHAIN138_SELECTOR="${CHAIN138_SELECTOR:-138}"
|
|
fi
|
|
|
|
# Step 2: Deploy CCIP Router
|
|
log_info "Step 2: Deploying CCIP Router..."
|
|
CCIP_ROUTER="${CCIP_CHAIN138_ROUTER:-}"
|
|
|
|
if [ -z "$CCIP_ROUTER" ] || [ "$CCIP_ROUTER" = "" ]; then
|
|
log_info "Deploying CCIP Router..."
|
|
|
|
# Set default fee configuration if not set
|
|
export CCIP_FEE_TOKEN="${CCIP_CHAIN138_LINK_TOKEN:-0x0000000000000000000000000000000000000000}"
|
|
export CCIP_BASE_FEE="${CCIP_BASE_FEE:-1000000000000000}"
|
|
export CCIP_DATA_FEE_PER_BYTE="${CCIP_DATA_FEE_PER_BYTE:-100000000}"
|
|
|
|
ROUTER_OUTPUT=$(forge script script/DeployCCIPRouter.s.sol \
|
|
--rpc-url "$RPC_URL" \
|
|
--broadcast \
|
|
--private-key "$PRIVATE_KEY" 2>&1 || true)
|
|
|
|
ROUTER_ADDRESS=$(echo "$ROUTER_OUTPUT" | grep -E "CCIP Router deployed at:|deployed at:" | tail -1 | sed 's/.*at: //' | awk '{print $1}' | tr -d '\n' || echo "")
|
|
|
|
if [ -n "$ROUTER_ADDRESS" ] && [ "$ROUTER_ADDRESS" != "" ]; then
|
|
CCIP_ROUTER="$ROUTER_ADDRESS"
|
|
log_success "✅ CCIP Router deployed at: $CCIP_ROUTER"
|
|
|
|
# Update .env
|
|
if grep -q "^CCIP_CHAIN138_ROUTER=" "$PROJECT_ROOT/.env" 2>/dev/null; then
|
|
sed -i.bak "s|^CCIP_CHAIN138_ROUTER=.*|CCIP_CHAIN138_ROUTER=$CCIP_ROUTER|" "$PROJECT_ROOT/.env"
|
|
else
|
|
echo "CCIP_CHAIN138_ROUTER=$CCIP_ROUTER" >> "$PROJECT_ROOT/.env"
|
|
fi
|
|
|
|
# Configure router
|
|
log_info "Configuring CCIP Router..."
|
|
export CCIP_CHAIN138_ROUTER="$CCIP_ROUTER"
|
|
bash "$PROJECT_ROOT/scripts/deployment/configure-ccip-router.sh" || log_warn "⚠️ Router configuration had issues"
|
|
else
|
|
log_error "❌ Failed to deploy CCIP Router"
|
|
exit 1
|
|
fi
|
|
else
|
|
log_success "✅ CCIP Router already deployed: $CCIP_ROUTER"
|
|
fi
|
|
|
|
# Step 3: Deploy CCIPWETH9Bridge
|
|
log_info "Step 3: Deploying CCIPWETH9Bridge..."
|
|
WETH9_BRIDGE="${CCIPWETH9_BRIDGE_CHAIN138:-}"
|
|
|
|
if [ -z "$WETH9_BRIDGE" ] || [ "$WETH9_BRIDGE" = "" ]; then
|
|
log_info "Deploying CCIPWETH9Bridge..."
|
|
|
|
export CCIP_ROUTER="$CCIP_ROUTER"
|
|
export CCIP_FEE_TOKEN="${CCIP_CHAIN138_LINK_TOKEN:-0x0000000000000000000000000000000000000000}"
|
|
|
|
BRIDGE9_OUTPUT=$(forge script script/DeployCCIPWETH9Bridge.s.sol \
|
|
--rpc-url "$RPC_URL" \
|
|
--broadcast \
|
|
--private-key "$PRIVATE_KEY" 2>&1 || true)
|
|
|
|
BRIDGE9_ADDRESS=$(echo "$BRIDGE9_OUTPUT" | grep -E "CCIPWETH9Bridge deployed at:|deployed at:" | tail -1 | sed 's/.*at: //' | awk '{print $1}' | tr -d '\n' || echo "")
|
|
|
|
if [ -n "$BRIDGE9_ADDRESS" ] && [ "$BRIDGE9_ADDRESS" != "" ]; then
|
|
WETH9_BRIDGE="$BRIDGE9_ADDRESS"
|
|
log_success "✅ CCIPWETH9Bridge deployed at: $WETH9_BRIDGE"
|
|
|
|
# Update .env
|
|
if grep -q "^CCIPWETH9_BRIDGE_CHAIN138=" "$PROJECT_ROOT/.env" 2>/dev/null; then
|
|
sed -i.bak "s|^CCIPWETH9_BRIDGE_CHAIN138=.*|CCIPWETH9_BRIDGE_CHAIN138=$WETH9_BRIDGE|" "$PROJECT_ROOT/.env"
|
|
else
|
|
echo "CCIPWETH9_BRIDGE_CHAIN138=$WETH9_BRIDGE" >> "$PROJECT_ROOT/.env"
|
|
fi
|
|
else
|
|
log_error "❌ Failed to deploy CCIPWETH9Bridge"
|
|
exit 1
|
|
fi
|
|
else
|
|
log_success "✅ CCIPWETH9Bridge already deployed: $WETH9_BRIDGE"
|
|
fi
|
|
|
|
# Step 4: Deploy CCIPWETH10Bridge
|
|
log_info "Step 4: Deploying CCIPWETH10Bridge..."
|
|
WETH10_BRIDGE="${CCIPWETH10_BRIDGE_CHAIN138:-}"
|
|
|
|
if [ -z "$WETH10_BRIDGE" ] || [ "$WETH10_BRIDGE" = "" ]; then
|
|
log_info "Deploying CCIPWETH10Bridge..."
|
|
|
|
export CCIP_ROUTER="$CCIP_ROUTER"
|
|
export CCIP_FEE_TOKEN="${CCIP_CHAIN138_LINK_TOKEN:-0x0000000000000000000000000000000000000000}"
|
|
|
|
BRIDGE10_OUTPUT=$(forge script script/DeployCCIPWETH10Bridge.s.sol \
|
|
--rpc-url "$RPC_URL" \
|
|
--broadcast \
|
|
--private-key "$PRIVATE_KEY" 2>&1 || true)
|
|
|
|
BRIDGE10_ADDRESS=$(echo "$BRIDGE10_OUTPUT" | grep -E "CCIPWETH10Bridge deployed at:|deployed at:" | tail -1 | sed 's/.*at: //' | awk '{print $1}' | tr -d '\n' || echo "")
|
|
|
|
if [ -n "$BRIDGE10_ADDRESS" ] && [ "$BRIDGE10_ADDRESS" != "" ]; then
|
|
WETH10_BRIDGE="$BRIDGE10_ADDRESS"
|
|
log_success "✅ CCIPWETH10Bridge deployed at: $WETH10_BRIDGE"
|
|
|
|
# Update .env
|
|
if grep -q "^CCIPWETH10_BRIDGE_CHAIN138=" "$PROJECT_ROOT/.env" 2>/dev/null; then
|
|
sed -i.bak "s|^CCIPWETH10_BRIDGE_CHAIN138=.*|CCIPWETH10_BRIDGE_CHAIN138=$WETH10_BRIDGE|" "$PROJECT_ROOT/.env"
|
|
else
|
|
echo "CCIPWETH10_BRIDGE_CHAIN138=$WETH10_BRIDGE" >> "$PROJECT_ROOT/.env"
|
|
fi
|
|
else
|
|
log_error "❌ Failed to deploy CCIPWETH10Bridge"
|
|
exit 1
|
|
fi
|
|
else
|
|
log_success "✅ CCIPWETH10Bridge already deployed: $WETH10_BRIDGE"
|
|
fi
|
|
|
|
# Step 5: Verify Deployment
|
|
log_info "Step 5: Verifying deployment..."
|
|
bash "$PROJECT_ROOT/scripts/deployment/verify-ccip-deployment.sh" || log_warn "⚠️ Verification had issues"
|
|
|
|
# Step 6: Summary
|
|
echo ""
|
|
log_success "=== Deployment Summary ==="
|
|
echo "CCIP Router: $CCIP_ROUTER"
|
|
echo "CCIPWETH9Bridge: $WETH9_BRIDGE"
|
|
echo "CCIPWETH10Bridge: $WETH10_BRIDGE"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Configure bridge destinations:"
|
|
echo " ./scripts/deployment/configure-weth9-bridge.sh"
|
|
echo " ./scripts/deployment/configure-weth10-bridge.sh"
|
|
echo "2. Verify on explorer"
|
|
echo "3. Test cross-chain transfers"
|
|
echo "4. Update documentation with deployed addresses"
|
|
|
|
log_success "✅ CCIP deployment complete!"
|
|
|