#!/usr/bin/env bash 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 # Final Fix: Remove Old Nodes, Keep Valid, Collect Missing # Simplified approach to clean and update node lists set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" STATIC_NODES_FILE="$PROJECT_ROOT/smom-dbis-138/config/static-nodes.json" PERMISSIONED_NODES_FILE="$PROJECT_ROOT/smom-dbis-138-proxmox/config/permissioned-nodes.json" # Valid IPs to keep (current configuration) VALID_IPS=( "${IP_VALIDATOR_0:-${IP_VALIDATOR_0:-${IP_VALIDATOR_0:-${IP_VALIDATOR_0:-192.168.11.100}}}}" # Validator 1000 "${IP_VALIDATOR_1:-${IP_VALIDATOR_1:-${IP_VALIDATOR_1:-${IP_VALIDATOR_1:-192.168.11.101}}}}" # Validator 1001 "${IP_VALIDATOR_2:-${IP_VALIDATOR_2:-${IP_VALIDATOR_2:-${IP_VALIDATOR_2:-192.168.11.102}}}}" # Validator 1002 "${IP_VALIDATOR_3:-${IP_VALIDATOR_3:-${IP_VALIDATOR_3:-${IP_VALIDATOR_3:-192.168.11.103}}}}" # Validator 1003 "${IP_VALIDATOR_4:-${IP_VALIDATOR_4:-${IP_VALIDATOR_4:-${IP_VALIDATOR_4:-192.168.11.104}}}}" # Validator 1004 "${IP_BESU_RPC_0:-${IP_BESU_RPC_0:-${IP_BESU_RPC_0:-${IP_BESU_RPC_0:-192.168.11.150}}}}" # Sentry 1500 "${IP_BESU_RPC_1:-${IP_BESU_RPC_1:-${IP_BESU_RPC_1:-${IP_BESU_RPC_1:-192.168.11.151}}}}" # Sentry 1501 "${IP_BESU_RPC_2:-${IP_BESU_RPC_2:-${IP_BESU_RPC_2:-${IP_BESU_RPC_2:-192.168.11.152}}}}" # Sentry 1502 "${IP_BESU_RPC_3:-${IP_BESU_RPC_3:-${IP_BESU_RPC_3:-${IP_BESU_RPC_3:-192.168.11.153}}}}" # Sentry 1503 "${RPC_CORE_1:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-192.168.11.21}}}1}" # RPC 2101 "${RPC_THIRDWEB_PRIMARY:-192.168.11.240}" # RPC 2400 "${RPC_THIRDWEB_1:-${RPC_THIRDWEB_1:-${RPC_THIRDWEB_1:-${RPC_THIRDWEB_1:-192.168.11.241}}}}" # RPC 2401 "${RPC_THIRDWEB_2:-${RPC_THIRDWEB_2:-${RPC_THIRDWEB_2:-${RPC_THIRDWEB_2:-192.168.11.242}}}}" # RPC 2402 "${RPC_ALLTRA_1:-192.168.11.250}" # RPC 2500 "${RPC_ALI_1:-${RPC_ALI_1:-${RPC_ALI_1:-${RPC_ALI_1:-192.168.11.251}}}}" # RPC 2501 "${RPC_ALI_2:-${RPC_ALI_2:-${RPC_ALI_2:-${RPC_ALI_2:-192.168.11.252}}}}" # RPC 2502 "192.168.11.253" # RPC 2503 "192.168.11.254" # RPC 2504 "${IP_VAULT_PHOENIX_2:-192.168.11.201}" # RPC 2505 "192.168.11.202" # RPC 2506 "192.168.11.203" # RPC 2507 "192.168.11.204" # RPC 2508 ) echo "=== Filtering Node Lists ===" echo "" # Create associative array of valid IPs declare -A VALID_IP_MAP for ip in "${VALID_IPS[@]}"; do VALID_IP_MAP["$ip"]=1 done # Parse current file and keep only valid IPs declare -A KEPT_ENODES KEPT_COUNT=0 REMOVED_COUNT=0 while IFS= read -r line; do enode=$(echo "$line" | grep -o 'enode://[^"]*' || echo "") if [ -n "$enode" ]; then ip=$(echo "$enode" | sed -n 's/.*@\([0-9.]*\):.*/\1/p') if [ -n "${VALID_IP_MAP[$ip]}" ]; then KEPT_ENODES["$ip"]="$enode" ((KEPT_COUNT++)) else echo "Removing old/migrated IP: $ip" ((REMOVED_COUNT++)) fi fi done < <(cat "$STATIC_NODES_FILE" | jq -r '.[]' 2>/dev/null || grep -o 'enode://[^"]*' "$STATIC_NODES_FILE" 2>/dev/null || echo "") echo "" echo "Kept: $KEPT_COUNT enodes" echo "Removed: $REMOVED_COUNT old/migrated enodes" echo "" # Generate cleaned file OUTPUT_FILE="${STATIC_NODES_FILE}.fixed" echo "[" > "$OUTPUT_FILE" FIRST=true for ip in "${VALID_IPS[@]}"; do if [ -n "${KEPT_ENODES[$ip]}" ]; then if [ "$FIRST" = false ]; then echo "," >> "$OUTPUT_FILE" fi echo -n " \"${KEPT_ENODES[$ip]}\"" >> "$OUTPUT_FILE" FIRST=false fi done echo "" >> "$OUTPUT_FILE" echo "]" >> "$OUTPUT_FILE" # Verify and update if jq empty "$OUTPUT_FILE" 2>/dev/null; then BACKUP="${STATIC_NODES_FILE}.backup.$(date +%Y%m%d_%H%M%S)" cp "$STATIC_NODES_FILE" "$BACKUP" cp "$OUTPUT_FILE" "$STATIC_NODES_FILE" cp "$OUTPUT_FILE" "$PERMISSIONED_NODES_FILE" echo "✓ Files updated (backup: $BACKUP)" echo "✓ Kept $KEPT_COUNT enodes, removed $REMOVED_COUNT old entries" else echo "✗ Generated invalid JSON" exit 1 fi