#!/usr/bin/env bash # Fetch enode for a Besu VMID via admin_nodeInfo (RPC must be on 8545). # Usage: bash scripts/get-enode-for-vmid.sh [proxmox-host] # Example: bash scripts/get-enode-for-vmid.sh 2401 192.168.11.10 # Output: enode URL with correct IP (from config). Use to fix duplicate enode in node lists. set -euo pipefail VMID="${1:-}" HOST="${2:-}" 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 # VMID -> IP mapping (all 32 Besu nodes; see config/besu-node-lists and BESU_NODES_FILE_REFERENCE) case "$VMID" in 1000) IP="192.168.11.100" ;; 1001) IP="192.168.11.101" ;; 1002) IP="192.168.11.102" ;; 1003) IP="192.168.11.103" ;; 1004) IP="192.168.11.104" ;; 1500) IP="192.168.11.150" ;; 1501) IP="192.168.11.151" ;; 1502) IP="192.168.11.152" ;; 1503) IP="192.168.11.153" ;; 1504) IP="192.168.11.154" ;; 1505) IP="192.168.11.213" ;; 1506) IP="192.168.11.214" ;; 1507) IP="192.168.11.244" ;; 1508) IP="192.168.11.245" ;; 2101) IP="${RPC_CORE_1:-192.168.11.211}" ;; 2102) IP="${RPC_CORE_2:-192.168.11.212}" ;; 2201) IP="${RPC_PUBLIC_1:-192.168.11.221}" ;; 2301) IP="${RPC_PRIVATE_1:-192.168.11.232}" ;; 2303) IP="192.168.11.233" ;; 2304) IP="192.168.11.234" ;; 2305) IP="192.168.11.235" ;; 2306) IP="192.168.11.236" ;; 2400) IP="${RPC_THIRDWEB_PRIMARY:-192.168.11.240}" ;; 2401) IP="${RPC_THIRDWEB_1:-192.168.11.241}" ;; 2402) IP="192.168.11.242" ;; 2403) IP="192.168.11.243" ;; 2500) IP="192.168.11.172" ;; 2501) IP="192.168.11.173" ;; 2502) IP="192.168.11.174" ;; 2503) IP="192.168.11.246" ;; 2504) IP="192.168.11.247" ;; 2505) IP="192.168.11.248" ;; *) IP="" ;; esac if [[ -z "$VMID" ]]; then echo "Usage: $0 [proxmox-host]" >&2 echo "Example: $0 2401 192.168.11.10" >&2 exit 1 fi if [[ -z "$HOST" ]]; then # Per BESU_VMIDS_FROM_PROXMOX: r630-01 = 1000,1001,1002,1500-1502,2101,2500-2505; r630-02 = 2201,2303,2401; ml110 = rest if [[ "$VMID" =~ ^(1000|1001|1002|1500|1501|1502|2101|2500|2501|2502|2503|2504|2505)$ ]]; then HOST="${PROXMOX_R630_01:-192.168.11.11}" elif [[ "$VMID" =~ ^(2201|2303|2401)$ ]]; then HOST="${PROXMOX_R630_02:-192.168.11.12}" else HOST="${PROXMOX_ML110:-192.168.11.10}" fi fi ENODE=$(ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@$HOST "pct exec $VMID -- curl -s -X POST -H 'Content-Type: application/json' --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 2>/dev/null" | jq -r '.result.enode // empty' 2>/dev/null) [[ -z "$ENODE" ]] && ENODE=$(ssh -o ConnectTimeout=10 root@$HOST "pct exec $VMID -- curl -s -X POST -H 'Content-Type: application/json' --data '{\"jsonrpc\":\"2.0\",\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1}' http://127.0.0.1:8545 2>/dev/null" | grep -o '"enode":"[^"]*"' | cut -d'"' -f4) if [[ -z "$ENODE" ]]; then echo "Could not get enode from VMID $VMID on $HOST. Is Besu running and RPC on 8545?" >&2 exit 1 fi # Normalize IP in enode to expected IP if [[ -n "$IP" ]]; then ENODE=$(echo "$ENODE" | sed "s/@[0-9.]*:/@$IP:/") fi echo "$ENODE"