Files
explorer-monorepo/scripts/enable-besu-debug-api-final.sh

156 lines
6.2 KiB
Bash
Raw Normal View History

#!/bin/bash
# Enable DEBUG and TRACE APIs in Besu RPC configuration
# This script must be run on the Besu RPC node (besu-rpc-1 / VMID 2500)
set -euo pipefail
CONFIG_FILE="/etc/besu/config-rpc.toml"
BACKUP_FILE="/etc/besu/config-rpc.toml.backup.$(date +%Y%m%d_%H%M%S)"
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ ENABLE DEBUG & TRACE APIs IN BESU RPC CONFIG ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo "❌ This script must be run as root"
exit 1
fi
# Check if config file exists
if [ ! -f "$CONFIG_FILE" ]; then
echo "❌ Config file not found: $CONFIG_FILE"
exit 1
fi
echo "📋 Current configuration:"
echo "─────────────────────────────────────────"
grep -E "rpc-http-api|rpc-ws-api" "$CONFIG_FILE" || true
echo ""
# Backup config
echo "📦 Creating backup..."
cp "$CONFIG_FILE" "$BACKUP_FILE"
echo "✅ Backup created: $BACKUP_FILE"
echo ""
# Check if DEBUG is already enabled
if grep -q '"DEBUG"' "$CONFIG_FILE"; then
echo "⚠️ DEBUG API already appears to be enabled"
echo "Current rpc-http-api:"
grep "rpc-http-api" "$CONFIG_FILE" || true
echo ""
read -p "Continue anyway? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 0
fi
fi
# Update rpc-http-api
echo "🔧 Updating rpc-http-api..."
# Pattern 1: Standard config without QBFT (from user's actual config)
if grep -q 'rpc-http-api=\["ETH","NET","WEB3","TXPOOL","ADMIN"\]' "$CONFIG_FILE"; then
sed -i 's/rpc-http-api=\["ETH","NET","WEB3","TXPOOL","ADMIN"\]/rpc-http-api=["ETH","NET","WEB3","TXPOOL","ADMIN","DEBUG","TRACE"]/g' "$CONFIG_FILE"
echo "✅ Updated rpc-http-api (standard pattern)"
# Pattern 2: With QBFT
elif grep -q 'rpc-http-api=\["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN"\]' "$CONFIG_FILE"; then
sed -i 's/rpc-http-api=\["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN"\]/rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN","DEBUG","TRACE"]/g' "$CONFIG_FILE"
echo "✅ Updated rpc-http-api (with QBFT)"
else
# Try more flexible approach using perl
echo "⚠️ Exact pattern not found, trying flexible update..."
perl -i -pe 's/rpc-http-api=\[([^\]]+)\]/rpc-http-api=[$1,"DEBUG","TRACE"]/g if !/"DEBUG"/' "$CONFIG_FILE"
echo "✅ Updated rpc-http-api (flexible match)"
fi
# Update rpc-ws-api
echo "🔧 Updating rpc-ws-api..."
if grep -q 'rpc-ws-api=\["ETH","NET","WEB3"\]' "$CONFIG_FILE"; then
sed -i 's/rpc-ws-api=\["ETH","NET","WEB3"\]/rpc-ws-api=["ETH","NET","WEB3","DEBUG","TRACE"]/g' "$CONFIG_FILE"
echo "✅ Updated rpc-ws-api"
else
# Try flexible approach
perl -i -pe 's/rpc-ws-api=\[([^\]]+)\]/rpc-ws-api=[$1,"DEBUG","TRACE"]/g if !/"DEBUG"/' "$CONFIG_FILE"
echo "✅ Updated rpc-ws-api (flexible match)"
fi
echo ""
echo "📋 Updated configuration:"
echo "─────────────────────────────────────────"
grep -E "rpc-http-api|rpc-ws-api" "$CONFIG_FILE" || true
echo ""
# Validate TOML syntax (if toml-validator is available)
if command -v toml-validator &> /dev/null; then
echo "🔍 Validating TOML syntax..."
if toml-validator "$CONFIG_FILE" 2>/dev/null; then
echo "✅ TOML syntax is valid"
else
echo "⚠️ TOML validation failed (may still work)"
fi
echo ""
fi
# Restart Besu service
echo "🔄 Restarting Besu service..."
if systemctl is-active --quiet besu-rpc; then
systemctl restart besu-rpc
echo "✅ Besu service restarted"
else
echo "⚠️ Besu service is not running"
echo " Start it with: systemctl start besu-rpc"
fi
echo ""
echo "⏳ Waiting for service to start (10 seconds)..."
sleep 10
# Test DEBUG API
echo ""
echo "🧪 Testing DEBUG API..."
TEST_TX="0x4dc9f5eedf580c2b37457916b04048481aba19cf3c1a106ea1ee9eefa0dc03c8"
RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" \
--data "{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceTransaction\",\"params\":[\"$TEST_TX\",{\"tracer\":\"callTracer\"}],\"id\":1}" \
http://localhost:8545 2>&1)
if echo "$RESPONSE" | grep -q '"error"'; then
ERROR=$(echo "$RESPONSE" | jq -r '.error.message // empty' 2>/dev/null || echo "")
if echo "$ERROR" | grep -q "Method not enabled"; then
echo "❌ DEBUG API still not enabled"
echo " Error: $ERROR"
echo ""
echo "📋 Troubleshooting:"
echo " 1. Check config: grep rpc-http-api $CONFIG_FILE"
echo " 2. Check service status: systemctl status besu-rpc"
echo " 3. Check logs: journalctl -u besu-rpc -n 50"
else
echo "⚠️ DEBUG API responded with error (but method is enabled)"
echo " Error: $ERROR"
echo " This might be expected if transaction doesn't exist"
fi
else
echo "✅ DEBUG API is enabled and working!"
echo " Response received (may contain trace data)"
fi
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ CONFIGURATION COMPLETE ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
echo "📋 Next steps:"
echo " 1. Test with a failed transaction:"
echo " curl -X POST -H 'Content-Type: application/json' \\"
echo " --data '{\"jsonrpc\":\"2.0\",\"method\":\"debug_traceTransaction\",\"params\":[\"$TEST_TX\",{\"tracer\":\"callTracer\"}],\"id\":1}' \\"
echo " http://localhost:8545 | jq"
echo ""
echo " 2. Check service status: systemctl status besu-rpc"
echo " 3. View logs: journalctl -u besu-rpc -f"
echo ""
echo "📦 Backup saved at: $BACKUP_FILE"
echo ""