Files
proxmox/scripts/besu/enable-trace-api-vmid2201.sh

79 lines
3.2 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# Enable TRACE API on the public RPC node (VMID 2201) so Blockscout can index internal
# transactions and block rewards. Run from Proxmox host that has VMID 2201, or set
# RPC_VM_2201_HOST=root@192.168.11.12 to run via SSH.
# See: explorer-monorepo/docs/RPC_FUNCTIONALITY_AND_BLOCKSCOUT_TRACE.md
set -euo pipefail
VMID="${RPC_VMID_2201:-2201}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
[ -f "$REPO_ROOT/config/ip-addresses.conf" ] && source "$REPO_ROOT/config/ip-addresses.conf" 2>/dev/null || true
RPC_HOST="${RPC_VM_2201_HOST:-root@${PROXMOX_R630_02:-192.168.11.12}}"
[[ "$RPC_HOST" != *"@"* ]] && RPC_HOST="root@$RPC_HOST"
run_in_vmid() {
local cmd="$1"
if command -v pct &>/dev/null && pct list 2>/dev/null | grep -q "^$VMID "; then
pct exec "$VMID" -- bash -c "$cmd"
else
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "$RPC_HOST" "pct exec $VMID -- bash -c $(printf '%q' "$cmd")"
fi
}
echo "=============================================="
echo "Enable TRACE API on VMID $VMID (public RPC)"
echo "=============================================="
if ! command -v pct &>/dev/null || ! pct list 2>/dev/null | grep -q "^$VMID "; then
echo "Running via SSH: $RPC_HOST"
fi
# Service uses config-rpc-public.toml (see besu-rpc.service ExecStart); try that first
CONFIG_PATHS="/etc/besu/config-rpc-public.toml /etc/besu/config-rpc.toml /etc/besu/config.toml"
CONFIG_FILE=""
for p in $CONFIG_PATHS; do
if run_in_vmid "test -f $p" 2>/dev/null; then
CONFIG_FILE="$p"
break
fi
done
if [ -z "$CONFIG_FILE" ]; then
echo "No Besu config found in VMID $VMID. List /etc/besu/:"
run_in_vmid "ls -la /etc/besu/" 2>/dev/null || true
exit 1
fi
echo "Config: $CONFIG_FILE"
if run_in_vmid "grep -q '\"TRACE\"' $CONFIG_FILE" 2>/dev/null; then
echo "TRACE already present. No change."
exit 0
fi
# Add TRACE (match both ["ETH","NET","WEB3"] and ["ETH","NET","WEB3","TXPOOL","ADMIN"])
run_in_vmid "sed -i 's/rpc-http-api=\[\"ETH\",\"NET\",\"WEB3\"\]/rpc-http-api=[\"ETH\",\"NET\",\"WEB3\",\"TRACE\"]/' $CONFIG_FILE" 2>/dev/null || true
run_in_vmid "sed -i 's/rpc-http-api=\[\"ETH\",\"NET\",\"WEB3\",\"TXPOOL\",\"ADMIN\"\]/rpc-http-api=[\"ETH\",\"NET\",\"WEB3\",\"TXPOOL\",\"ADMIN\",\"TRACE\"]/' $CONFIG_FILE" 2>/dev/null || true
run_in_vmid "sed -i 's/rpc-ws-api=\[\"ETH\",\"NET\",\"WEB3\"\]/rpc-ws-api=[\"ETH\",\"NET\",\"WEB3\",\"TRACE\"]/' $CONFIG_FILE" 2>/dev/null || true
if ! run_in_vmid "grep -q '\"TRACE\"' $CONFIG_FILE" 2>/dev/null; then
echo "Could not add TRACE. Edit $CONFIG_FILE inside VMID $VMID and add TRACE, then restart Besu."
exit 1
fi
echo "TRACE added. Restarting Besu..."
run_in_vmid "systemctl restart besu-rpc 2>/dev/null || systemctl restart besu 2>/dev/null || true"
sleep 5
RPC_IP="${RPC_PUBLIC_1:-192.168.11.221}"
if curl -sS --max-time 10 -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"trace_block","params":["0x1"],"id":1}' \
"http://${RPC_IP}:8545" | grep -q '"result"'; then
echo "OK: trace_block returns result (TRACE API enabled)."
else
echo "WARN: trace_block still failed. Check: pct exec $VMID -- journalctl -u besu-rpc -n 30"
fi