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>
152 lines
5.1 KiB
Bash
Executable File
152 lines
5.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Confirm Besu version >= 24.1.0 on all nodes (required for EIP-7702 / Cancun)
|
|
# Usage: PROXMOX_HOST=${PROXMOX_HOST_ML110:-192.168.11.10} ./scripts/check-besu-version-all-nodes.sh
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# Optional: load IP config for PROXMOX_HOST_ML110 etc.
|
|
if [ -f "$PROJECT_ROOT/config/ip-addresses.conf" ]; then
|
|
# shellcheck source=../config/ip-addresses.conf
|
|
source "$PROJECT_ROOT/config/ip-addresses.conf"
|
|
fi
|
|
|
|
PROXMOX_HOST="${PROXMOX_HOST:-${PROXMOX_HOST_ML110:-192.168.11.10}}"
|
|
MIN_VERSION="24.1.0"
|
|
|
|
# All known Besu node VMIDs (validators, sentries, RPC). Override with BESU_VMIDS="2101 2400 2401 2402" for quick check.
|
|
if [ -n "${BESU_VMIDS:-}" ]; then
|
|
read -ra BESU_VMIDS <<< "$BESU_VMIDS"
|
|
else
|
|
BESU_VMIDS=(1000 1001 1002 1003 1004 1500 1501 1502 1503 2101 2201 2301 2303 2304 2305 2306 2307 2308 2400 2401 2402 2403)
|
|
fi
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_ok() { echo -e "${GREEN}[OK]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
log_fail() { echo -e "${RED}[FAIL]${NC} $1"; }
|
|
|
|
# Compare semantic versions: return 0 if $1 >= $2, else 1
|
|
version_gte() {
|
|
local a="${1:-0}"
|
|
local b="${2:-0}"
|
|
[ "$a" = "$b" ] && return 0
|
|
local win
|
|
win=$(echo -e "${a}\n${b}" | sort -V | tail -n1)
|
|
[ "$win" = "$a" ] && return 0
|
|
return 1
|
|
}
|
|
|
|
# Get Besu version from node: try RPC web3_clientVersion first, then CLI
|
|
get_besu_version() {
|
|
local vmid=$1
|
|
local host=$2
|
|
local version=""
|
|
local raw
|
|
|
|
# 1) RPC (actual running client)
|
|
raw=$(ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=accept-new root@"$host" \
|
|
"pct exec $vmid -- curl -s -m 3 -X POST -H 'Content-Type: application/json' \
|
|
--data '{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":1}' \
|
|
http://127.0.0.1:8545 2>/dev/null" || true)
|
|
if [ -n "$raw" ]; then
|
|
if echo "$raw" | grep -q '"result"'; then
|
|
version=$(echo "$raw" | sed -n 's/.*"result":"[^/]*\/v\([^\/"]*\).*/\1/p')
|
|
[ -z "$version" ] && version=$(echo "$raw" | sed -n 's/.*"result":"\([^"]*\)".*/\1/p')
|
|
fi
|
|
fi
|
|
|
|
# 2) CLI fallback
|
|
if [ -z "$version" ]; then
|
|
raw=$(ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=accept-new root@"$host" \
|
|
"pct exec $vmid -- /opt/besu/bin/besu --version 2>/dev/null || pct exec $vmid -- besu --version 2>/dev/null" || true)
|
|
if [ -n "$raw" ]; then
|
|
version=$(echo "$raw" | sed -n 's/.*[Bb]esu\/\?v\?\([0-9][0-9.]*\).*/\1/p')
|
|
fi
|
|
fi
|
|
|
|
echo "$version"
|
|
}
|
|
|
|
# Check if container exists and is running on host
|
|
is_running() {
|
|
local vmid=$1
|
|
local host=$2
|
|
ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=accept-new root@"$host" \
|
|
"pct status $vmid 2>/dev/null" | grep -q running
|
|
}
|
|
|
|
echo ""
|
|
log_info "Besu version check (>= ${MIN_VERSION}) on Proxmox host: $PROXMOX_HOST"
|
|
log_info "EIP-7702 / Cancun requires Besu >= 24.1.0"
|
|
echo ""
|
|
|
|
PASS=0
|
|
FAIL=0
|
|
SKIP=0
|
|
declare -a FAILED_VMIDS
|
|
declare -a FAILED_VERSIONS
|
|
|
|
for vmid in "${BESU_VMIDS[@]}"; do
|
|
if ! is_running "$vmid" "$PROXMOX_HOST"; then
|
|
printf " VMID %-5s %-12s %s\n" "$vmid" "—" "(container not running)"
|
|
((SKIP++)) || true
|
|
continue
|
|
fi
|
|
|
|
version=$(get_besu_version "$vmid" "$PROXMOX_HOST")
|
|
|
|
if [ -z "$version" ]; then
|
|
printf " VMID %-5s %-12s " "$vmid" "—"
|
|
log_fail "no Besu version (RPC/CLI failed)"
|
|
FAILED_VMIDS+=("$vmid")
|
|
FAILED_VERSIONS+=("?")
|
|
((FAIL++)) || true
|
|
continue
|
|
fi
|
|
|
|
if version_gte "$version" "$MIN_VERSION"; then
|
|
printf " VMID %-5s %-12s " "$vmid" "$version"
|
|
log_ok ">= $MIN_VERSION"
|
|
((PASS++)) || true
|
|
else
|
|
printf " VMID %-5s %-12s " "$vmid" "$version"
|
|
log_fail "< $MIN_VERSION (upgrade required)"
|
|
FAILED_VMIDS+=("$vmid")
|
|
FAILED_VERSIONS+=("$version")
|
|
((FAIL++)) || true
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "────────────────────────────────────────────────────────────"
|
|
printf " Passed: %s Failed: %s Skipped (not running): %s\n" "$PASS" "$FAIL" "$SKIP"
|
|
echo "────────────────────────────────────────────────────────────"
|
|
|
|
if [ ${#FAILED_VMIDS[@]} -gt 0 ]; then
|
|
echo ""
|
|
log_warn "Nodes below minimum version ($MIN_VERSION):"
|
|
for i in "${!FAILED_VMIDS[@]}"; do
|
|
echo " VMID ${FAILED_VMIDS[$i]} version ${FAILED_VERSIONS[$i]}"
|
|
done
|
|
echo ""
|
|
log_info "Upgrade: install Besu 24.1.0+ (e.g. from https://github.com/hyperledger/besu/releases) and restart besu service."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$PASS" -gt 0 ]; then
|
|
log_ok "All checked nodes run Besu >= $MIN_VERSION (EIP-7702 / Cancun OK)."
|
|
exit 0
|
|
fi
|
|
|
|
log_warn "No Besu nodes could be checked (all skipped or failed)."
|
|
exit 0
|