Files
proxmox/docs/01-getting-started/THIRDWEB_RPC_NEXT_STEPS.md
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

11 KiB

ThirdWeb RPC Nodes - Complete Next Steps

Overview

This document lists all next steps to complete the ThirdWeb RPC node setup, from deployment to integration.


Phase 1: Deploy Containers

Step 1.1: Run the Setup Script

cd /home/intlc/projects/proxmox
./scripts/setup-thirdweb-rpc-nodes.sh

Expected outcome:

  • Creates 3 LXC containers (VMIDs 2400-2402)
  • Installs Besu RPC software
  • Configures static IPs (192.168.11.240-242)
  • Sets up systemd services

Troubleshooting:

  • If containers fail to create, check storage: ssh root@192.168.11.10 'pvesm status'
  • Verify template exists: ssh root@192.168.11.10 'pvesm list local'
  • Check SSH access: ssh root@192.168.11.10 'echo OK'

Phase 2: Verify Deployment

Step 2.1: Check Container Status

# List all ThirdWeb containers
ssh root@192.168.11.10 "pct list | grep -E '240[0-2]'"

# Check individual container status
ssh root@192.168.11.10 "pct status 2400"
ssh root@192.168.11.10 "pct status 2401"
ssh root@192.168.11.10 "pct status 2402"

Expected output:

    2400  2400  thirdweb-rpc-1  running
    2401  2401  thirdweb-rpc-2  running
    2402  2402  thirdweb-rpc-3  running

Step 2.2: Verify IP Addresses

# Check IP configuration for each container
ssh root@192.168.11.10 "pct exec 2400 -- hostname -I"
ssh root@192.168.11.10 "pct exec 2401 -- hostname -I"
ssh root@192.168.11.10 "pct exec 2402 -- hostname -I"

Expected output:

  • Container 2400: 192.168.11.240
  • Container 2401: 192.168.11.241
  • Container 2402: 192.168.11.242

Step 2.3: Test Network Connectivity

# Ping each container
ping -c 3 192.168.11.240
ping -c 3 192.168.11.241
ping -c 3 192.168.11.242

# Test port accessibility
nc -zv 192.168.11.240 8545  # HTTP RPC
nc -zv 192.168.11.240 8546  # WebSocket RPC
nc -zv 192.168.11.240 9545  # Metrics

Phase 3: Configure Besu Services

Step 3.1: Verify Besu Installation

# Check Besu version on each container
ssh root@192.168.11.10 "pct exec 2400 -- /opt/besu/bin/besu --version"
ssh root@192.168.11.10 "pct exec 2401 -- /opt/besu/bin/besu --version"
ssh root@192.168.11.10 "pct exec 2402 -- /opt/besu/bin/besu --version"

Step 3.2: Verify Configuration Files

# Check config file exists and is correct
ssh root@192.168.11.10 "pct exec 2400 -- cat /etc/besu/config-rpc-thirdweb.toml"

Verify key settings:

  • network-id=138
  • rpc-http-enabled=true
  • rpc-http-port=8545
  • rpc-ws-enabled=true
  • rpc-ws-port=8546
  • rpc-http-api=["ETH","NET","WEB3","DEBUG","TRACE"]

Step 3.3: Check Genesis and Permissions Files

# Verify genesis file exists
ssh root@192.168.11.10 "pct exec 2400 -- ls -la /genesis/genesis.json"

# Verify static nodes file exists
ssh root@192.168.11.10 "pct exec 2400 -- ls -la /genesis/static-nodes.json"

# Verify permissions file exists
ssh root@192.168.11.10 "pct exec 2400 -- ls -la /permissions/permissions-nodes.toml"

If files are missing:

  • Copy from existing RPC nodes or source project
  • See smom-dbis-138/genesis/ and smom-dbis-138/permissions/ directories

Phase 4: Start and Monitor Services

Step 4.1: Start Besu Services

# Start services on all containers
ssh root@192.168.11.10 "pct exec 2400 -- systemctl start besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2401 -- systemctl start besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2402 -- systemctl start besu-rpc.service"

# Enable auto-start on boot
ssh root@192.168.11.10 "pct exec 2400 -- systemctl enable besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2401 -- systemctl enable besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2402 -- systemctl enable besu-rpc.service"

Step 4.2: Check Service Status

# Check if services are running
ssh root@192.168.11.10 "pct exec 2400 -- systemctl status besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2401 -- systemctl status besu-rpc.service"
ssh root@192.168.11.10 "pct exec 2402 -- systemctl status besu-rpc.service"

Expected status: Active: active (running)

Step 4.3: Monitor Service Logs

# View recent logs
ssh root@192.168.11.10 "pct exec 2400 -- journalctl -u besu-rpc.service -n 100"

# Follow logs in real-time (Ctrl+C to exit)
ssh root@192.168.11.10 "pct exec 2400 -- journalctl -u besu-rpc.service -f"

Look for:

  • Besu is listening on messages
  • P2P started message
  • Any error messages

Phase 5: Test RPC Endpoints

Step 5.1: Test HTTP RPC Endpoints

# Test each RPC endpoint
curl -X POST http://192.168.11.240:8545 \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

curl -X POST http://192.168.11.241:8545 \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

curl -X POST http://192.168.11.242:8545 \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

Expected response:

{"jsonrpc":"2.0","id":1,"result":"0x..."}

Step 5.2: Test WebSocket Endpoints

# Install wscat if needed: npm install -g wscat

# Test WebSocket connection
wscat -c ws://192.168.11.240:8546

# Then send: {"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}

Step 5.3: Test Additional RPC Methods

# Get chain ID
curl -X POST http://192.168.11.240:8545 \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'

# Get network ID
curl -X POST http://192.168.11.240:8545 \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}'

# Get client version
curl -X POST http://192.168.11.240:8545 \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'

Step 5.4: Check Metrics Endpoints

# Check metrics (Prometheus format)
curl http://192.168.11.240:9545/metrics | head -20

Phase 6: ThirdWeb Integration

Step 6.1: Configure ThirdWeb SDK

JavaScript/TypeScript:

import { ThirdwebSDK } from "@thirdweb-dev/sdk";

// HTTP RPC endpoint
const sdk = new ThirdwebSDK("http://192.168.11.240:8545", {
  supportedChains: [138], // Your ChainID
});

// Or with WebSocket for subscriptions
const sdk = new ThirdwebSDK("ws://192.168.11.240:8546", {
  supportedChains: [138],
});

Step 6.2: Set Environment Variables

# Add to your .env file
echo "THIRDWEB_RPC_URL=http://192.168.11.240:8545" >> .env
echo "THIRDWEB_RPC_WS_URL=ws://192.168.11.240:8546" >> .env
echo "THIRDWEB_CHAIN_ID=138" >> .env

Step 6.3: Configure ThirdWeb Dashboard

  1. Go to ThirdWeb Dashboard → Settings → Networks
  2. Click "Add Custom Network"
  3. Enter:
    • Network Name: ChainID 138 (Custom)
    • RPC URL: http://192.168.11.240:8545
    • Chain ID: 138
    • Currency Symbol: Your token symbol
    • Block Explorer: (Optional) Your explorer URL

Step 6.4: Test ThirdWeb Connection

// Test connection
const provider = await sdk.getProvider();
const network = await provider.getNetwork();
console.log("Connected to:", network.chainId);

Phase 7: Production Configuration

Step 7.1: Set Up Load Balancing (Optional)

Nginx Configuration:

upstream thirdweb_rpc {
    least_conn;
    server 192.168.11.240:8545;
    server 192.168.11.241:8545;
    server 192.168.11.242:8545;
}

server {
    listen 80;
    server_name rpc.thirdweb.yourdomain.com;

    location / {
        proxy_pass http://thirdweb_rpc;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

Step 7.2: Configure Cloudflare Tunnel (Optional)

Add to cloudflared config:

ingress:
  - hostname: rpc-thirdweb.d-bis.org
    service: http://192.168.11.240:8545
  - hostname: rpc-thirdweb-2.d-bis.org
    service: http://192.168.11.241:8545
  - hostname: rpc-thirdweb-3.d-bis.org
    service: http://192.168.11.242:8545

Step 7.3: Set Up Monitoring

Monitor metrics:

# Set up Prometheus scraping
# Add to prometheus.yml:
scrape_configs:
  - job_name: 'thirdweb-rpc'
    static_configs:
      - targets:
        - '192.168.11.240:9545'
        - '192.168.11.241:9545'
        - '192.168.11.242:9545'

Phase 8: Documentation and Maintenance

Step 8.1: Update Documentation

  • Update infrastructure documentation with new IPs
  • Document ThirdWeb RPC endpoints
  • Add monitoring dashboards
  • Document load balancing setup (if applicable)

Step 8.2: Create Backup Procedures

# Backup Besu data directories
ssh root@192.168.11.10 "pct exec 2400 -- tar -czf /tmp/besu-backup-$(date +%Y%m%d).tar.gz /data/besu"

# Backup configuration files
ssh root@192.168.11.10 "pct exec 2400 -- tar -czf /tmp/besu-config-$(date +%Y%m%d).tar.gz /etc/besu"

Step 8.3: Set Up Health Checks

Create health check script:

#!/bin/bash
# health-check-thirdweb-rpc.sh

for ip in 192.168.11.240 192.168.11.241 192.168.11.242; do
    if curl -s -X POST http://${ip}:8545 \
        -H 'Content-Type: application/json' \
        --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
        | grep -q "result"; then
        echo "✓ ${ip}:8545 is healthy"
    else
        echo "✗ ${ip}:8545 is down"
    fi
done

Troubleshooting Checklist

If containers fail to start:

  • Check storage availability: pvesm status
  • Verify template exists: pvesm list local
  • Check container logs: pct config <VMID>

If Besu services fail:

  • Check service logs: journalctl -u besu-rpc.service -f
  • Verify config file syntax: besu --config-file=/etc/besu/config-rpc-thirdweb.toml validate
  • Check disk space: df -h
  • Verify network connectivity to validators/sentries

If RPC endpoints don't respond:

  • Verify firewall rules: iptables -L -n | grep 8545
  • Check Besu is listening: netstat -tlnp | grep 8545
  • Verify chain sync: Check logs for sync progress
  • Test connectivity: ping and nc tests

Quick Reference Commands

# Status check
ssh root@192.168.11.10 "pct list | grep 240"

# Restart all services
for vmid in 2400 2401 2402; do
    ssh root@192.168.11.10 "pct exec $vmid -- systemctl restart besu-rpc.service"
done

# View all logs
for vmid in 2400 2401 2402; do
    echo "=== Container $vmid ==="
    ssh root@192.168.11.10 "pct exec $vmid -- journalctl -u besu-rpc.service -n 20"
done

# Test all endpoints
for ip in 240 241 242; do
    curl -X POST http://192.168.11.${ip}:8545 \
        -H 'Content-Type: application/json' \
        --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
done

Completion Checklist

  • All containers created and running
  • IP addresses configured correctly
  • Besu services started and enabled
  • RPC endpoints responding
  • ThirdWeb SDK configured
  • Load balancing configured (if needed)
  • Monitoring set up (if needed)
  • Documentation updated
  • Health checks implemented