#!/usr/bin/env bash # Phase 3.1 & 3.3: Extract Bridge State from Old Contracts # This script extracts state from old bridge contracts to prepare for migration 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' 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"; } # Configuration CHAIN138_RPC="http://192.168.11.211:8545" WETH9_BRIDGE_OLD="0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6" WETH10_BRIDGE_OLD="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e" WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" WETH10_ADDRESS="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f" log_section "Phase 3.1 & 3.3: Extract Bridge State" # Test RPC connection CHAIN_ID=$(cast chain-id --rpc-url "$CHAIN138_RPC" 2>/dev/null || echo "") if [ -z "$CHAIN_ID" ]; then log_warn "Failed to connect to $CHAIN138_RPC, trying alternative..." CHAIN138_RPC="http://192.168.11.250:8545" CHAIN_ID=$(cast chain-id --rpc-url "$CHAIN138_RPC" 2>/dev/null || echo "") if [ -z "$CHAIN_ID" ]; then log_error "Failed to connect to RPC endpoints" exit 1 fi fi log_success "RPC connection successful (ChainID: $CHAIN_ID)" log_info "" # Function to extract state from a bridge extract_bridge_state() { local BRIDGE_ADDRESS=$1 local BRIDGE_NAME=$2 log_section "Extracting State from $BRIDGE_NAME Bridge" log_info "Bridge Address: $BRIDGE_ADDRESS" log_info "" # Extract admin (we know this works) log_info "Extracting admin..." ADMIN=$(cast call "$BRIDGE_ADDRESS" "admin()(address)" --rpc-url "$CHAIN138_RPC" 2>/dev/null || echo "") if [ -n "$ADMIN" ] && [ "$ADMIN" != "0x0000000000000000000000000000000000000000" ]; then log_success " Admin: $ADMIN" else # Known from resolution plan ADMIN="0x4a666f96fc8764181194447a7dfdb7d471b301c8" log_warn " Admin: $ADMIN (from known value)" fi # Try to read storage slots directly log_info "" log_info "Reading storage slots..." # Storage slot 0: likely router (from resolution plan: 0x99b3511a2d315a497c8112c1fdd8d508d4b1e506) SLOT0=$(cast storage "$BRIDGE_ADDRESS" "0x0000000000000000000000000000000000000000000000000000000000000000" --rpc-url "$CHAIN138_RPC" 2>/dev/null || echo "") if [ -n "$SLOT0" ] && [ "$SLOT0" != "0x0000000000000000000000000000000000000000000000000000000000000000" ]; then # Extract address (last 20 bytes) ROUTER_CANDIDATE="0x$(echo "$SLOT0" | cut -c 27-)" log_info " Slot 0 (potential router): $ROUTER_CANDIDATE" fi # Storage slot 1: admin (should match) SLOT1=$(cast storage "$BRIDGE_ADDRESS" "0x0000000000000000000000000000000000000000000000000000000000000001" --rpc-url "$CHAIN138_RPC" 2>/dev/null || echo "") if [ -n "$SLOT1" ] && [ "$SLOT1" != "0x0000000000000000000000000000000000000000000000000000000000000000" ]; then ADMIN_SLOT="0x$(echo "$SLOT1" | cut -c 27-)" log_info " Slot 1 (admin): $ADMIN_SLOT" if [ "$ADMIN_SLOT" = "$ADMIN" ]; then log_success " ✓ Admin matches storage slot" fi fi # Output state for deployment script log_info "" log_info "State Summary for $BRIDGE_NAME:" echo " ADMIN=$ADMIN" if [ -n "$ROUTER_CANDIDATE" ]; then echo " ROUTER=$ROUTER_CANDIDATE" fi echo " WETH9=$WETH9_ADDRESS" if [ "$BRIDGE_NAME" = "WETH10" ]; then echo " WETH10=$WETH10_ADDRESS" fi log_info "" } # Extract state from both bridges extract_bridge_state "$WETH9_BRIDGE_OLD" "WETH9" extract_bridge_state "$WETH10_BRIDGE_OLD" "WETH10" log_section "State Extraction Complete" log_warn "⚠ IMPORTANT NOTES:" log_info "1. Router address needs to be verified from deployment records or environment" log_info "2. Fee token (LINK) address needs to be confirmed" log_info "3. These values will be used to deploy new contracts with same parameters" log_info "" # Try to get LINK token address from common locations LINK_TOKEN="0x514910771AF9Ca656af840dff83E8264EcF986CA" log_info "Expected LINK token address: $LINK_TOKEN" log_info "" log_success "State extraction complete. Review values above for deployment."