Files
proxmox/scripts/archive/consolidated/verify/verify-unique-enodes.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

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