#!/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