FortiBlox LogoFortiBlox Docs
AXIO Block Engine

Validator Guide

Complete onboarding guide for X1/Tachyon validators — build, configure, and run the AXIO-enabled validator to receive MEV bundles and earn tip revenue.

Validator Onboarding Guide

This guide covers building, configuring, and running the AXIO-enabled validator to receive MEV bundles and earn tip revenue.

Overview

AXIO is an MEV infrastructure layer for the X1/Tachyon network. It runs an off-chain auction engine that evaluates, simulates, and ranks MEV bundles from searchers, then delivers winning bundles to validators for direct block inclusion.

What you get:

  • Auction-winning bundles delivered via WebSocket in real time
  • Direct block injection — bundles bypass RPC and enter the banking stage as a priority lane before mempool transactions
  • Tip revenue from searchers, deposited into 8 rotating on-chain PDA vaults and auto-distributed to your validator identity
  • Zero changes to your consensus behavior — AXIO only adds an optional bundle channel

Revenue model:

  • Searchers attach tips to every bundle
  • The on-chain tip program distributes tips per the fee split: 40% validator, 25% reserve injection, 15% staker yield, 20% treasury
  • A permissionless crank bot triggers distribution every 25-40 seconds — no manual claiming required

Testnet performance:

  • 94.7% bundle landing rate
  • 1.83ms average end-to-end latency (p99: 3.32ms)
  • 0 slot budget overruns

Prerequisites

Hardware

Same as standard X1/Tachyon validator requirements:

ComponentMinimumRecommended
CPU24 cores32 cores
RAM256 GB256 GB
Storage2 TB NVMe SSD2 TB NVMe SSD
Network1 Gbps1 Gbps

AXIO adds a receiver thread and executor validation — 32 cores recommended.

Network

Your validator must reach the AXIO relay endpoint:

EnvironmentRelay URL
Testnetwss://relay.axio.fortiblox.com/v1/relay
MainnetTBD

Outbound port 443 (WSS) must be open. The validator initiates the connection; no inbound ports are required for AXIO.

Software

  • Rust 1.78+ (stable toolchain)
  • Standard Tachyon build dependencies: build-essential, pkg-config, libssl-dev, libudev-dev, protobuf-compiler, clang, cmake
  • Git

Step 1: Build the AXIO Validator

Clone

git clone https://github.com/fortiblox/axio-validator.git
cd axio-validator

Build

cargo build --release

The build produces target/release/tachyon-validator — a drop-in replacement for the standard Tachyon binary with the forti-bundle crate compiled in.

What forti-bundle Does

The forti-bundle crate adds three components to the validator:

  1. BundleReceiver — A dedicated thread (fortiBundleRecv) that maintains a persistent WebSocket connection to the AXIO relay. It authenticates with your validator identity and auth token, receives bundle_delivery messages, validates them, and pushes them into a crossbeam channel.

  2. FortiBlockBuilder — Integrates into the banking stage consume loop. It drains the bundle channel before mempool transactions (priority lane), sorts bundles by EV score descending, and fills remaining block capacity with normal mempool transactions.

  3. BundleExecutor — Enforces atomic execution (all transactions in a bundle succeed or none are included). For multi-tx bundles, uses sequential execution with full state carryover via AccountOverrides.

The integration is non-invasive: if the relay is unreachable or no bundles are available, the validator builds blocks normally from the mempool.

Step 2: Configure

CLI Flags

FlagRequiredDefaultDescription
--forti-enabledYesfalseEnable AXIO bundle integration
--forti-relay-urlYesws://localhost:4002/v1/relayAXIO relay WebSocket URL
--forti-auth-tokenYes(empty)Authentication token (provided by AXIO team)
--forti-mev-commission-bpsNo500 (5%)Your MEV commission in basis points

Environment Variables

# .env file (chmod 600!)
FORTI_ENABLED=true
FORTI_RELAY_URL=wss://relay.axio.fortiblox.com/v1/relay
FORTI_AUTH_TOKEN=your-auth-token-here
FORTI_MEV_COMMISSION_BPS=500

Docker

For Docker deployments, use the AXIO lite image:

# docker-compose.yml
services:
  validator:
    build:
      context: .
      dockerfile: lite/Dockerfile
    environment:
      - FORTI_ENABLED=true
      - FORTI_RELAY_URL=wss://relay.axio.fortiblox.com/v1/relay
      - FORTI_AUTH_TOKEN=${FORTI_AUTH_TOKEN}
    volumes:
      - ./validator-keypair.json:/config/identity.json:ro
      - ./ledger:/ledger
    ports:
      - "8899:8899"  # RPC
      - "8001:8001"  # Gossip

Step 3: Run

Start the Validator

./target/release/tachyon-validator \
  --identity /config/identity.json \
  --ledger /ledger \
  --rpc-port 8899 \
  --forti-enabled \
  --forti-relay-url wss://relay.axio.fortiblox.com/v1/relay \
  --forti-auth-token "$FORTI_AUTH_TOKEN" \
  --forti-mev-commission-bps 500 \
  # ... other standard validator flags

Verify Bundle Reception

Check logs for the fortiBundleRecv thread:

# Successful connection
grep "fortiBundleRecv" validator.log | head -5
# Should show: "Connected to relay", "Registered as validator"

# Bundle delivery
grep "BundleDelivery" validator.log | tail -5
# Should show: "Received bundle <id> with <n> transactions"

Verify Tip Collection

# Check tip vault balances
solana balance 7dWho2FmC68LZBirmAf68GsrEJSFjpaVTF5pYPqVDCug --url https://x1-testnet.xen.network

Step 4: Monitor

Key Metrics

MetricWhereHealthy
Relay connectionLogs: fortiBundleRecvConnected, heartbeats every 10s
Bundles receivedPrometheus: forti_bundles_received_total> 0
Bundles includedPrometheus: forti_bundles_included_totalLanding rate > 90%
Tip revenueOn-chain tip vault balancesIncreasing
Slot budgetPrometheus: forti_slot_budget_usage< 95%

Grafana Dashboard

Import the AXIO validator dashboard from /monitoring/grafana/axio-validator.json for real-time monitoring.

Operational Notes

Safe Restarts

Never restart during or near your leader slots. Wait for a safe window after your last leader slot in the current epoch. The sequence:

  1. Check leader schedule: solana leader-schedule | grep <your-identity>
  2. Wait for your last leader slot to pass
  3. Gracefully stop the validator
  4. Restart and verify relay reconnection

Bundle Bot Restarts

If you restart the validator, any connected bots will lose their WebSocket connections. After every validator restart:

  1. Kill all bot processes
  2. Wait for the validator to fully sync
  3. Relaunch bots

Failover

If the AXIO relay is unreachable, the validator automatically falls back to building blocks from the mempool. No manual intervention needed. When the relay comes back online, the fortiBundleRecv thread reconnects automatically with exponential backoff.