#!/bin/bash set -euo pipefail # Update all validators with transaction pool configuration # This script updates validators on both ml110 and r630-01 # # IMPORTANT: Besu 23.10+ uses LAYERED tx-pool by default. Do NOT add legacy # options (tx-pool-max-size, tx-pool-limit-by-account-percentage) — they cause # "Could not use legacy transaction pool options with layered implementation" # and crash validators. Use layered options instead: tx-pool-max-future-by-sender, # tx-pool-layer-max-capacity, tx-pool-max-prioritized. set -e # Use root@ for Proxmox; SSH as intlc fails with permission denied for pct. PROXMOX_USER="${PROXMOX_USER:-root}" PROXMOX_ML110="${PROXMOX_ML110:-192.168.11.10}" PROXMOX_R630="${PROXMOX_R630:-192.168.11.11}" # Do NOT add legacy tx-pool options (tx-pool-max-size, etc.) — they crash layered pool. # Use layered options only if tuning: tx-pool-max-future-by-sender, tx-pool-layer-max-capacity, tx-pool-max-prioritized. echo "=== Validator Tx-Pool Check (No Legacy Options) ===" echo "" # Function to update a validator update_validator() { local PROXMOX_HOST=$1 local VMID=$2 local CONFIG_PATH=$3 echo "--- Updating Validator $VMID on $PROXMOX_HOST ---" local SSH_TARGET="${PROXMOX_USER}@${PROXMOX_HOST}" # Check if config file exists if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_TARGET" "pct exec $VMID -- test -f $CONFIG_PATH" 2>/dev/null; then # Check if tx-pool settings already exist (legacy tx-pool-max-size causes crash with layered pool) if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_TARGET" "pct exec $VMID -- grep -q 'tx-pool-max-size' $CONFIG_PATH" 2>/dev/null; then echo " ⚠️ Legacy tx-pool settings exist (remove them — they crash Besu layered pool)" else echo " ✅ No legacy tx-pool options (layered default OK)" fi else echo " ⚠️ Config file not found at $CONFIG_PATH, trying alternative locations..." for ALT_PATH in "/etc/besu/config-validator.toml" "/config/config-validator.toml"; do if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_TARGET" "pct exec $VMID -- test -f $ALT_PATH" 2>/dev/null; then if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_TARGET" "pct exec $VMID -- grep -q 'tx-pool-max-size' $ALT_PATH" 2>/dev/null; then echo " ⚠️ Legacy tx-pool settings exist in $ALT_PATH (remove — crash with layered)" else echo " ✅ No legacy tx-pool options in $ALT_PATH (layered default OK)" fi break fi done fi } # Function to restart validator restart_validator() { local PROXMOX_HOST=$1 local VMID=$2 local SSH_TARGET="${PROXMOX_USER}@${PROXMOX_HOST}" echo " Restarting validator service..." ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$SSH_TARGET" "pct exec $VMID -- systemctl restart besu-validator" 2>/dev/null && \ echo " ✅ Validator service restarted" || \ echo " ⚠️ Could not restart validator service (may need manual restart)" } # Check validators on ml110 echo "Checking validators on ml110 ($PROXMOX_USER@$PROXMOX_ML110)..." for VMID in 1003 1004; do update_validator "$PROXMOX_ML110" "$VMID" "/etc/besu/config-validator.toml" echo "" done # Check validators on r630-01 echo "Checking validators on r630-01 ($PROXMOX_USER@$PROXMOX_R630)..." for VMID in 1000 1001 1002; do update_validator "$PROXMOX_R630" "$VMID" "/etc/besu/config-validator.toml" echo "" done echo "=== Validator Tx-Pool Check Complete ===" echo "" echo "Next steps:" echo " 1. Do NOT add legacy tx-pool options (tx-pool-max-size, etc.)" echo " 2. If tuning, use layered options only (see script header)" echo " 3. Run scripts/verify-validator-configs.sh for full verification"