2026-01-06 01:46:25 -08:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# RPC failover and redundancy management
|
|
|
|
|
# Usage: ./rpc-failover.sh [primary|backup|test]
|
|
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
2026-02-12 15:46:57 -08:00
|
|
|
# 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
|
|
|
|
|
|
|
|
|
|
|
2026-01-06 01:46:25 -08:00
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
SOURCE_PROJECT="/home/intlc/projects/smom-dbis-138"
|
|
|
|
|
|
|
|
|
|
source "$SOURCE_PROJECT/.env" 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
# RPC endpoints (add backup endpoints here)
|
2026-02-12 15:46:57 -08:00
|
|
|
# Public RPC failover: VMID 2201 (8545)
|
|
|
|
|
PRIMARY_RPC="${RPC_URL_138_PUBLIC:-http://${RPC_PUBLIC_1:-192.168.11.221}:8545}"
|
|
|
|
|
BACKUP_RPC="${RPC_URL_138_BACKUP:-http://${RPC_PUBLIC_1:-192.168.11.221}:8545}"
|
2026-01-06 01:46:25 -08:00
|
|
|
HTTPS_RPC="https://rpc-core.d-bis.org"
|
|
|
|
|
|
|
|
|
|
ACTION="${1:-test}"
|
|
|
|
|
|
|
|
|
|
# Test RPC endpoint
|
|
|
|
|
test_rpc() {
|
|
|
|
|
local rpc_url="$1"
|
|
|
|
|
if cast block-number --rpc-url "$rpc_url" >/dev/null 2>&1; then
|
|
|
|
|
echo "✅ $rpc_url: Accessible"
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
echo "❌ $rpc_url: Not accessible"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Get working RPC endpoint
|
|
|
|
|
get_working_rpc() {
|
|
|
|
|
if test_rpc "$PRIMARY_RPC"; then
|
|
|
|
|
echo "$PRIMARY_RPC"
|
|
|
|
|
elif test_rpc "$HTTPS_RPC"; then
|
|
|
|
|
echo "$HTTPS_RPC"
|
|
|
|
|
elif test_rpc "$BACKUP_RPC"; then
|
|
|
|
|
echo "$BACKUP_RPC"
|
|
|
|
|
else
|
|
|
|
|
echo ""
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Test all endpoints
|
|
|
|
|
test_all() {
|
|
|
|
|
echo "=== Testing RPC Endpoints ==="
|
|
|
|
|
echo ""
|
|
|
|
|
test_rpc "$PRIMARY_RPC"
|
|
|
|
|
test_rpc "$HTTPS_RPC"
|
|
|
|
|
test_rpc "$BACKUP_RPC"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
WORKING_RPC=$(get_working_rpc)
|
|
|
|
|
if [ -n "$WORKING_RPC" ]; then
|
|
|
|
|
echo "✅ Working endpoint: $WORKING_RPC"
|
|
|
|
|
else
|
|
|
|
|
echo "❌ No working endpoints found"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Use primary endpoint
|
|
|
|
|
use_primary() {
|
|
|
|
|
export RPC_URL_138="$PRIMARY_RPC"
|
|
|
|
|
echo "Using primary RPC: $PRIMARY_RPC"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Use backup endpoint
|
|
|
|
|
use_backup() {
|
|
|
|
|
export RPC_URL_138="$BACKUP_RPC"
|
|
|
|
|
echo "Using backup RPC: $BACKUP_RPC"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Auto-failover
|
|
|
|
|
auto_failover() {
|
|
|
|
|
WORKING_RPC=$(get_working_rpc)
|
|
|
|
|
if [ -n "$WORKING_RPC" ]; then
|
|
|
|
|
export RPC_URL_138="$WORKING_RPC"
|
|
|
|
|
echo "Auto-selected RPC: $WORKING_RPC"
|
|
|
|
|
return 0
|
|
|
|
|
else
|
|
|
|
|
echo "ERROR: No working RPC endpoints"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case "$ACTION" in
|
|
|
|
|
test) test_all ;;
|
|
|
|
|
primary) use_primary ;;
|
|
|
|
|
backup) use_backup ;;
|
|
|
|
|
auto) auto_failover ;;
|
|
|
|
|
*)
|
|
|
|
|
echo "Usage: $0 [test|primary|backup|auto]"
|
|
|
|
|
exit 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|