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>
93 lines
2.7 KiB
Bash
Executable File
93 lines
2.7 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
|
|
|
|
PROXMOX_HOST="${1:-192.168.11.10}"
|
|
|
|
# RPC VMID to IP mapping
|
|
declare -A RPC_NODES=(
|
|
["2101"]="192.168.11.211"
|
|
["2201"]="192.168.11.221"
|
|
["2301"]="192.168.11.232"
|
|
["2303"]="192.168.11.233"
|
|
["2304"]="192.168.11.234"
|
|
["2305"]="192.168.11.235"
|
|
["2306"]="192.168.11.236"
|
|
["2307"]="192.168.11.237"
|
|
["2308"]="192.168.11.238"
|
|
["2401"]="192.168.11.241"
|
|
["2402"]="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
|