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>
62 lines
2.4 KiB
Bash
Executable File
62 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Extract enode from running Besu node via JSON-RPC
|
|
# Usage: RPC_URL=http://${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-192.168.11.13}}}}}}:8545 NODE_IP=${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-${IP_SERVICE_13:-192.168.11.13}}}}}} bash extract-enode-from-rpc.sh
|
|
|
|
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
|
|
|
|
|
|
RPC_URL="${RPC_URL:-http://localhost:8545}"
|
|
NODE_IP="${NODE_IP:-}"
|
|
|
|
# Get node info via JSON-RPC
|
|
RESPONSE=$(curl -s -X POST \
|
|
-H "Content-Type: application/json" \
|
|
--data '{"jsonrpc":"2.0","method":"admin_nodeInfo","params":[],"id":1}' \
|
|
"${RPC_URL}")
|
|
|
|
# Check for errors
|
|
if echo "$RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); sys.exit(0 if 'error' not in data else 1)" 2>/dev/null; then
|
|
ERROR_MSG=$(echo "$RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('error', {}).get('message', 'Unknown error'))" 2>/dev/null)
|
|
if [[ -n "$ERROR_MSG" ]]; then
|
|
echo "ERROR: JSON-RPC error: $ERROR_MSG" >&2
|
|
echo "NOTE: Ensure RPC is enabled with --rpc-http-api=ADMIN,NET" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Extract enode
|
|
ENODE=$(echo "$RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('result', {}).get('enode', ''))" 2>/dev/null)
|
|
|
|
if [[ -z "$ENODE" ]] || [[ "$ENODE" == "None" ]] || [[ "$ENODE" == "null" ]]; then
|
|
echo "ERROR: Could not extract enode from admin_nodeInfo" >&2
|
|
echo "Response: $RESPONSE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Extract and validate node ID
|
|
NODE_ID=$(echo "$ENODE" | sed 's|^enode://||' | cut -d'@' -f1 | tr '[:upper:]' '[:lower:]')
|
|
NODE_ID_LEN=${#NODE_ID}
|
|
|
|
if [[ "$NODE_ID_LEN" -ne 128 ]]; then
|
|
echo "ERROR: Invalid node ID length: $NODE_ID_LEN (expected 128)" >&2
|
|
echo "Enode: $ENODE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Extract IP and port
|
|
ENODE_IP=$(echo "$ENODE" | sed 's|.*@||' | cut -d':' -f1)
|
|
ENODE_PORT=$(echo "$ENODE" | sed 's|.*:||')
|
|
|
|
# Verify IP if provided
|
|
if [[ -n "$NODE_IP" ]] && [[ "$ENODE_IP" != "$NODE_IP" ]]; then
|
|
echo "WARNING: Enode IP ($ENODE_IP) does not match expected IP ($NODE_IP)" >&2
|
|
echo "NOTE: Check --p2p-host and --nat-method configuration" >&2
|
|
fi
|
|
|
|
echo "$ENODE"
|