Files
proxmox/scripts/phase3-extract-bridge-state.sh
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

128 lines
4.9 KiB
Bash
Executable File

#!/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
# 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)"
# 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://${RPC_CORE_1}: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://${RPC_PUBLIC_1:-192.168.11.221}: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."