150 lines
4.9 KiB
Bash
Executable File
150 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# End-to-End Bridge Test
|
|
# Task 119: Create End-to-End Test Script
|
|
# Usage: ./test-end-to-end-bridge.sh [amount_eth]
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# 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 variables if .env exists
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
source "$PROJECT_ROOT/.env"
|
|
elif [ -f "$PROJECT_ROOT/../.env" ]; then
|
|
source "$PROJECT_ROOT/../.env"
|
|
fi
|
|
|
|
# Configuration
|
|
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
|
|
AMOUNT_ETH="${1:-0.001}"
|
|
DESTINATION_SELECTOR="5009297550715157269" # Ethereum Mainnet
|
|
|
|
log_info "========================================="
|
|
log_info "End-to-End Bridge Test"
|
|
log_info "========================================="
|
|
log_info ""
|
|
log_info "Amount: $AMOUNT_ETH ETH"
|
|
log_info "Destination: Ethereum Mainnet ($DESTINATION_SELECTOR)"
|
|
log_info "RPC URL: $RPC_URL"
|
|
log_info ""
|
|
|
|
# Step 1: Pre-flight checks
|
|
log_info "Step 1: Pre-flight Checks"
|
|
log_info ""
|
|
|
|
# Check RPC connectivity
|
|
log_info " Checking RPC connectivity..."
|
|
BLOCK_NUMBER=$(cast block-number --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -z "$BLOCK_NUMBER" ]; then
|
|
log_error " RPC not accessible"
|
|
exit 1
|
|
fi
|
|
log_success " RPC accessible (block: $BLOCK_NUMBER)"
|
|
|
|
# Check bridge configuration
|
|
log_info " Checking bridge configuration..."
|
|
WETH9_BRIDGE="0x971cD9D156f193df8051E48043C476e53ECd4693"
|
|
DEST=$(cast call "$WETH9_BRIDGE" "destinations(uint64)" "$DESTINATION_SELECTOR" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
DEST_CLEAN=$(echo "$DEST" | grep -oE "^0x[0-9a-fA-F]{40}$" | head -1 || echo "")
|
|
if [ -z "$DEST_CLEAN" ] || echo "$DEST_CLEAN" | grep -qE "^0x0+$"; then
|
|
log_error " Ethereum Mainnet destination not configured"
|
|
log_info " Run: ./scripts/fix-bridge-errors.sh <private_key> <bridge_address>"
|
|
exit 1
|
|
fi
|
|
log_success " Bridge destination configured: $DEST_CLEAN"
|
|
|
|
# Step 2: Verify token mechanism
|
|
log_info ""
|
|
log_info "Step 2: Verify Token Mechanism"
|
|
log_info ""
|
|
|
|
WETH9="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
|
|
WETH9_BALANCE=$(cast balance "$WETH9" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
WETH9_SUPPLY=$(cast call "$WETH9" "totalSupply()" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
if [ "$WETH9_BALANCE" = "$WETH9_SUPPLY" ]; then
|
|
log_success " WETH9 1:1 ratio verified"
|
|
else
|
|
log_warn " WETH9 1:1 ratio: Balance=$WETH9_BALANCE, Supply=$WETH9_SUPPLY"
|
|
fi
|
|
|
|
# Step 3: Check account balance
|
|
log_info ""
|
|
log_info "Step 3: Check Account Balance"
|
|
log_info ""
|
|
|
|
if [ -z "${PRIVATE_KEY:-}" ]; then
|
|
log_warn " Private key not set, skipping balance check"
|
|
log_info " Set PRIVATE_KEY in .env to test with actual transactions"
|
|
else
|
|
ACCOUNT=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
|
if [ -n "$ACCOUNT" ]; then
|
|
ETH_BALANCE=$(cast balance "$ACCOUNT" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
|
ETH_BALANCE_ETH=$(cast --from-wei "$ETH_BALANCE" ether 2>/dev/null || echo "")
|
|
log_info " Account: $ACCOUNT"
|
|
log_info " ETH Balance: ${ETH_BALANCE_ETH:-$ETH_BALANCE} ETH"
|
|
|
|
AMOUNT_WEI=$(cast --to-wei "$AMOUNT_ETH" ether 2>/dev/null || echo "")
|
|
if [ -n "$AMOUNT_WEI" ] && [ "$ETH_BALANCE" -lt "$AMOUNT_WEI" ]; then
|
|
log_error " Insufficient balance for test"
|
|
exit 1
|
|
fi
|
|
log_success " Sufficient balance for test"
|
|
fi
|
|
fi
|
|
|
|
# Step 4: Verify fee calculation
|
|
log_info ""
|
|
log_info "Step 4: Verify Fee Calculation"
|
|
log_info ""
|
|
|
|
CCIP_ROUTER="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
|
|
FEE_RESULT=$(cast call "$CCIP_ROUTER" "getFee(uint64,bytes)" "$DESTINATION_SELECTOR" "0x" --rpc-url "$RPC_URL" 2>/dev/null || echo "")
|
|
if [ -n "$FEE_RESULT" ] && [ "$FEE_RESULT" != "0x" ]; then
|
|
FEE_WEI=$(echo "$FEE_RESULT" | grep -oE "[0-9]+" | head -1 || echo "")
|
|
if [ -n "$FEE_WEI" ]; then
|
|
log_success " Fee calculation working: $FEE_WEI wei"
|
|
else
|
|
log_warn " Fee calculation returned: $FEE_RESULT"
|
|
fi
|
|
else
|
|
log_warn " Fee calculation not accessible"
|
|
fi
|
|
|
|
# Step 5: Summary
|
|
log_info ""
|
|
log_info "========================================="
|
|
log_info "Test Summary"
|
|
log_info "========================================="
|
|
log_info ""
|
|
|
|
if [ -z "${PRIVATE_KEY:-}" ]; then
|
|
log_warn "⚠ Private key not set - dry run only"
|
|
log_info ""
|
|
log_info "To run actual test:"
|
|
log_info " 1. Set PRIVATE_KEY in .env"
|
|
log_info " 2. Run: ./scripts/wrap-and-bridge-to-ethereum.sh $AMOUNT_ETH"
|
|
else
|
|
log_info "Ready for end-to-end test"
|
|
log_info ""
|
|
log_info "To execute test:"
|
|
log_info " ./scripts/wrap-and-bridge-to-ethereum.sh $AMOUNT_ETH"
|
|
fi
|
|
|
|
log_info ""
|
|
log_success "✓ Pre-flight checks completed"
|
|
log_info ""
|
|
|