Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- 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>
99 lines
3.3 KiB
Bash
Executable File
99 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Verify all RPC nodes have unique enode IDs
|
|
# This is critical - duplicate enode IDs will cause network issues
|
|
|
|
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
|
|
|
|
|
|
PROXMOX_HOST="${1:-192.168.11.10}"
|
|
|
|
# RPC VMID to IP mapping
|
|
declare -A RPC_NODES=(
|
|
["2101"]="${RPC_CORE_1}"
|
|
["2201"]="${RPC_PUBLIC_1}"
|
|
["2301"]="${RPC_PRIVATE_1}"
|
|
["2303"]="${RPC_NODE_233:-${RPC_NODE_233:-${RPC_NODE_233:-${RPC_NODE_233:-192.168.11.233}}}}"
|
|
["2304"]="${RPC_NODE_234:-${RPC_NODE_234:-${RPC_NODE_234:-${RPC_NODE_234:-192.168.11.234}}}}"
|
|
["2305"]="${RPC_NODE_235:-${RPC_NODE_235:-${RPC_NODE_235:-${RPC_NODE_235:-192.168.11.235}}}}"
|
|
["2306"]="${RPC_NODE_236:-${RPC_NODE_236:-${RPC_NODE_236:-${RPC_NODE_236:-192.168.11.236}}}}"
|
|
["2307"]="192.168.11.237"
|
|
["2308"]="192.168.11.238"
|
|
["2401"]="${RPC_THIRDWEB_1:-${RPC_THIRDWEB_1:-${RPC_THIRDWEB_1:-${RPC_THIRDWEB_1:-192.168.11.241}}}}"
|
|
["2402"]="${RPC_THIRDWEB_2:-${RPC_THIRDWEB_2:-${RPC_THIRDWEB_2:-${RPC_THIRDWEB_2:-192.168.11.242}}}}"
|
|
["2403"]="192.168.11.243"
|
|
)
|
|
|
|
echo "=== Verifying Unique Enode IDs for All RPC Nodes ==="
|
|
echo ""
|
|
|
|
declare -A enode_map
|
|
duplicates=0
|
|
|
|
for vmid in "${!RPC_NODES[@]}"; do
|
|
ip="${RPC_NODES[$vmid]}"
|
|
|
|
if ! ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@"$PROXMOX_HOST" \
|
|
"pct status $vmid 2>/dev/null | grep -q running"; then
|
|
echo "⚠ VMID $vmid ($ip): Container not running, skipping"
|
|
continue
|
|
fi
|
|
|
|
echo -n "VMID $vmid ($ip): "
|
|
|
|
# Get enode via RPC
|
|
enode=$(timeout 3 curl -s -X POST -H "Content-Type: application/json" \
|
|
--data '{"jsonrpc":"2.0","method":"admin_nodeInfo","params":[],"id":1}' \
|
|
http://$ip:8545 2>/dev/null | grep -o '"enode":"[^"]*"' | cut -d'"' -f4 || echo "")
|
|
|
|
if [ -z "$enode" ]; then
|
|
echo "⚠ RPC not responding - cannot verify enode"
|
|
continue
|
|
fi
|
|
|
|
# Extract enode ID (first 128 hex chars)
|
|
enode_id=$(echo "$enode" | grep -oP 'enode://\K[^@]+' | cut -c1-128 | tr '[:upper:]' '[:lower:]')
|
|
|
|
if [ -z "$enode_id" ] || [ ${#enode_id} -ne 128 ]; then
|
|
echo "⚠ Invalid enode format: $enode"
|
|
continue
|
|
fi
|
|
|
|
# Check for duplicates
|
|
if [ -n "${enode_map[$enode_id]:-}" ]; then
|
|
echo "❌ DUPLICATE ENODE ID!"
|
|
echo " This enode ID already exists:"
|
|
echo " First: ${enode_map[$enode_id]}"
|
|
echo " Duplicate: $enode"
|
|
duplicates=$((duplicates + 1))
|
|
else
|
|
enode_map[$enode_id]="$enode"
|
|
echo "✓ Unique (ID: ${enode_id:0:16}...)"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "=== Summary ==="
|
|
echo "Unique enode IDs found: ${#enode_map[@]}"
|
|
echo "Duplicates found: $duplicates"
|
|
|
|
if [ $duplicates -gt 0 ]; then
|
|
echo ""
|
|
echo "❌ ERROR: Duplicate enode IDs detected!"
|
|
echo "Each node MUST have a unique nodekey/enode ID."
|
|
echo "If nodes are clones, they may have copied the same nodekey."
|
|
echo ""
|
|
echo "Solution: Generate new unique nodekeys for duplicate nodes:"
|
|
echo " pct exec <vmid> -- rm /data/besu/nodekey"
|
|
echo " # Restart Besu - it will generate a new unique nodekey"
|
|
exit 1
|
|
else
|
|
echo ""
|
|
echo "✓ All enode IDs are unique!"
|
|
exit 0
|
|
fi
|