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>
125 lines
3.5 KiB
Bash
125 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
source "${PROJECT_ROOT}/scripts/lib/vmid-ip-maps.sh" 2>/dev/null || true
|
|
|
|
# Collect Missing Enodes from Running Nodes
|
|
# Queries all running nodes to collect their enodes and update node lists
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
log_section() { echo -e "\n${CYAN}=== $1 ===${NC}"; }
|
|
|
|
# EXPECTED_NODES = VMID_CURRENT_NODES from scripts/lib/vmid-ip-maps.sh
|
|
declare -gA EXPECTED_NODES=()
|
|
for k in "${!VMID_CURRENT_NODES[@]}"; do EXPECTED_NODES["$k"]="${VMID_CURRENT_NODES[$k]}"; done
|
|
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
|
|
RPC_PORT=8545
|
|
|
|
log_section "Collecting Enodes from All Nodes"
|
|
|
|
declare -A COLLECTED_ENODES=()
|
|
declare -A FAILED_NODES=()
|
|
|
|
# Function to get enode from a node
|
|
get_enode() {
|
|
local vmid=$1
|
|
local ip=$2
|
|
|
|
log_info "Querying VMID $vmid ($ip)..."
|
|
|
|
# Check if node is running
|
|
local status=$(ssh -o ConnectTimeout=2 root@"$PROXMOX_HOST" "pct status $vmid 2>/dev/null" | awk '{print $2}' || echo "unknown")
|
|
|
|
if [ "$status" != "running" ]; then
|
|
log_warn " ⚠ Not running (status: $status) - skipping"
|
|
FAILED_NODES[$vmid]="$ip (not running)"
|
|
return 1
|
|
fi
|
|
|
|
# Try to get enode via admin_nodeInfo
|
|
local rpc_url="http://${ip}:${RPC_PORT}"
|
|
local enode=$(cast rpc admin_nodeInfo "$rpc_url" 2>/dev/null | jq -r '.enode' 2>/dev/null || echo "")
|
|
|
|
if [ -z "$enode" ] || [ "$enode" = "null" ]; then
|
|
log_warn " ⚠ Failed to get enode (admin API may not be available)"
|
|
FAILED_NODES[$vmid]="$ip (RPC failed)"
|
|
return 1
|
|
fi
|
|
|
|
# Verify IP matches
|
|
local enode_ip=$(echo "$enode" | sed -n 's/.*@\([0-9.]*\):.*/\1/p')
|
|
if [ "$enode_ip" != "$ip" ]; then
|
|
log_warn " ⚠ IP mismatch: enode has $enode_ip but expected $ip"
|
|
else
|
|
log_success " ✓ Enode collected: $enode"
|
|
fi
|
|
|
|
COLLECTED_ENODES["$ip"]="$enode"
|
|
return 0
|
|
}
|
|
|
|
# Collect from all expected nodes
|
|
for vmid in "${!EXPECTED_NODES[@]}"; do
|
|
get_enode "$vmid" "${EXPECTED_NODES[$vmid]}" || true
|
|
done
|
|
|
|
# Summary
|
|
log_section "Collection Summary"
|
|
|
|
log_info "Successfully collected: ${#COLLECTED_ENODES[@]} enodes"
|
|
log_info "Failed/Not running: ${#FAILED_NODES[@]} nodes"
|
|
|
|
if [ ${#FAILED_NODES[@]} -gt 0 ]; then
|
|
log_warn "Failed nodes:"
|
|
for vmid in "${!FAILED_NODES[@]}"; do
|
|
log_warn " VMID $vmid: ${FAILED_NODES[$vmid]}"
|
|
done
|
|
fi
|
|
|
|
# Generate updated static-nodes.json
|
|
log_section "Generating Updated static-nodes.json"
|
|
|
|
OUTPUT_FILE="$PROJECT_ROOT/smom-dbis-138/config/static-nodes.json.new"
|
|
|
|
# Sort IPs for consistent output
|
|
declare -a SORTED_IPS
|
|
for ip in "${!COLLECTED_ENODES[@]}"; do
|
|
SORTED_IPS+=("$ip")
|
|
done
|
|
|
|
IFS=$'\n' SORTED_IPS=($(sort <<<"${SORTED_IPS[*]}"))
|
|
unset IFS
|
|
|
|
echo "[" > "$OUTPUT_FILE"
|
|
FIRST=true
|
|
for ip in "${SORTED_IPS[@]}"; do
|
|
if [ "$FIRST" = true ]; then
|
|
FIRST=false
|
|
else
|
|
echo "," >> "$OUTPUT_FILE"
|
|
fi
|
|
echo -n " \"${COLLECTED_ENODES[$ip]}\"" >> "$OUTPUT_FILE"
|
|
done
|
|
|
|
echo "" >> "$OUTPUT_FILE"
|
|
echo "]" >> "$OUTPUT_FILE"
|
|
|
|
log_success "Generated: $OUTPUT_FILE"
|
|
log_info "Contains ${#COLLECTED_ENODES[@]} enodes"
|
|
|
|
log_info ""
|
|
log_info "Review the file and update static-nodes.json and permissioned-nodes.json"
|