Skip to content

Web3 Infrastructure

Solana Validator and Firedancer Internals for Trading-Infra Engineers

Jump Trading rebuilt the Solana validator from scratch because Agave couldn't keep up. Firedancer's tile architecture, networking pipeline, and what it means for MEV searchers in 2026.

11 min
#solana #firedancer #validator #jump-trading #tower-bft #blockchain-infra #performance

When Jump Trading decided to build Firedancer - a complete ground-up rewrite of the Solana validator in Rust and C - they were not doing it out of academic interest. Jump has serious capital deployed in Solana markets. The validator was the bottleneck between their trading systems and the chain. When the existing client cannot keep up with block processing, transactions drop. Dropped transactions mean missed fills, failed liquidations, and lost MEV opportunities. At Jump’s scale, that is real money.

The decision to rewrite the entire validator from scratch rather than patch the existing one tells you something important: the performance gap was not addressable incrementally. The architecture of the original Solana Labs validator (now called Agave) had fundamental constraints that patching could not solve. Firedancer’s design choices are a specification of what those constraints were.

Understanding Firedancer internals is useful even if you are not running validators. It tells you what “performance” means on Solana at the protocol level, which informs how you build latency-sensitive systems on top of it.

The Solana Consensus Model: Tower BFT

Before getting into Firedancer, the consensus mechanism matters because it directly constrains what the validator has to do.

Solana uses Tower BFT, a variant of PBFT (Practical Byzantine Fault Tolerance) optimized for high throughput. The key innovation: instead of waiting for 2/3 of validators to explicitly confirm each block (which requires O(n²) message passing), Tower BFT uses vote transactions on-chain to record validator votes, and applies an exponentially increasing lockout to each vote.

Here is how it works:

When a validator votes for a block at slot N, it is locked out from voting for any fork that contradicts slot N for 2^k slots, where k is the number of confirmations that block has accumulated. The lockout doubles with each confirmation, up to a maximum of 32 slots. A validator that wants to switch to a fork would have to wait out the lockout period - and since the lockout grows exponentially, abandoning a well-confirmed block becomes increasingly costly over time.

The practical result: Solana achieves fast finality not by running a fast consensus protocol, but by making it economically and structurally irrational to reorganize a confirmed block. A block with 32 confirmations has a lockout of 2^32 slots - roughly 18 years. It is not getting reorganized.

This design has a key implication for validator performance: voting is latency-critical. A validator must produce and submit vote transactions for every slot. If the validator is slow and misses slots, it loses vote credits and earns less stake reward. The validator software must process each 400ms slot, simulate vote transactions, and submit them to the network before the next slot begins.

Solana Block Processing Pipeline (Per 400ms Slot)

Network layer
│  Receive shreds from current leader
│  (Shreds are ~1KB packets; a full block = ~67MB = ~67,000 shreds)

Shred reassembly
│  Reed-Solomon error correction
│  Reconstruct full block from received shreds
│  ~50ms budget

Transaction verification
│  Signature verification (Ed25519)
│  Parallel across CPU cores
│  Account lock ordering (prevents deadlocks)
│  ~80ms budget

Transaction execution
│  SVM (Solana Virtual Machine) execution
│  Parallel execution of non-conflicting transactions
│  Accounts with no dependencies execute simultaneously
│  ~150ms budget

Bank state update
│  Write new account states to accounts database
│  Merkle hash of updated accounts
│  Update slot's bank hash
│  ~60ms budget

Vote transaction construction + submission
│  Construct Tower BFT vote for this slot
│  Sign with validator identity key
│  Submit to leader's TPU port
│  Must land before slot N+2 to count

Leader duties (if this validator is the current leader)
│  Receive transactions from TPU
│  Pack into blocks
│  Produce shreds
│  Broadcast to network

The 400ms slot is divided among these stages. Any stage that runs over its budget compresses the remaining stages. If transaction verification takes 150ms instead of 80ms due to a CPU spike, the execution stage has only 80ms left and starts dropping transactions.

Why the Agave Validator Has Throughput Limits

The original Solana Labs validator (Agave) is a monolithic Rust application. The entire processing pipeline runs as a single OS process with internal thread communication via channels. The architectural constraints:

Single process = single memory space - all threads share one heap. Under high load, memory allocation pressure from one stage (say, the accounts database) creates latency spikes in another stage (transaction verification) because they are competing for allocator locks.

Channel-based inter-stage communication - Rust channels are efficient, but they still involve memory copies and synchronization overhead between stages. Under peak load, channel buffers fill up and back-pressure propagates through the pipeline.

SVM execution is single-threaded per account - transactions touching the same account cannot execute in parallel. On Solana, high-activity accounts (popular DEX pools, lending protocols) become sequential bottlenecks. The Agave implementation has limited ability to schedule around these hotspots.

Garbage in the accounts database - the accounts database is an append-only structure by design. Old account states are not immediately cleaned up. Over time, the database grows and account lookups slow. Periodic “snapshot + clean” cycles help but create their own latency spikes.

Firedancer’s Architecture: What They Changed

Firedancer was built as a multi-process architecture from the start. Each stage of the block processing pipeline runs in a separate OS process, communicating via shared memory ring buffers rather than kernel channels.

Firedancer Architecture (Simplified)

[quic] process
│  TLS 1.3 + QUIC transport layer
│  Handles all network I/O
│  Zero-copy packet receipt via XDP (eXpress Data Path)
│  Pinned to specific CPU cores via CPU affinity

│  Shared memory ring buffer (no kernel involvement)

[verify] process
│  Ed25519 signature verification
│  Uses AVX-512 SIMD for batch verification
│  4-8x faster than scalar Ed25519 on modern CPUs
│  Can saturate multiple CPU cores independently

│  Shared memory ring buffer

[dedup] process
│  Duplicate transaction detection
│  Bloom filter on signature hashes
│  Eliminates retransmits before they enter execution

│  Shared memory ring buffer

[pack] process
│  Transaction scheduling + block packing
│  Priority fee ordering
│  Account conflict detection (builds dependency graph)
│  Maximizes parallelism in execution stage

│  Shared memory ring buffer

[execute] process (multiple instances)
│  SVM execution
│  Multiple execute processes run in parallel
│  Each handles a non-conflicting subset of transactions
│  Firedancer's custom Solana program interpreter (fd_exec)

│  Shared memory ring buffer

[bank] process
│  Account state commitment
│  Merkle tree update
│  Bank hash computation

[vote] process
│  Tower BFT vote construction
│  Vote transaction signing
│  Submission to leader TPU

The key design decisions:

Separate OS processes per stage - process isolation means a memory allocator spike in the execution stage cannot cause jitter in the signature verification stage. CPU affinity pinning means each process owns its cores and is not preempted by other work.

Shared memory ring buffers - Firedancer’s inter-process communication uses a custom ring buffer format (fd_mcache / fd_dcache) that fits in L3 cache and requires zero kernel involvement for the data path. The latency is measured in nanoseconds rather than microseconds.

AVX-512 signature verification - modern server CPUs support AVX-512, Intel’s 512-bit SIMD extensions. Ed25519 batch verification using AVX-512 can verify 4-8 signatures per clock cycle rather than 1. At 50,000 transactions per second, this matters.

Custom FD executor - rather than running the existing SBF (Solana Bytecode Format) interpreter from Agave, Firedancer implements its own. The custom executor is optimized for the Firedancer execution pipeline and avoids the Agave executor’s allocation patterns.

Performance Targets and Real-World Numbers

Jump’s stated goal for Firedancer is 1 million transactions per second. Agave’s current practical ceiling is around 65,000 TPS on mainnet under load (the theoretical max is higher but network and client diversity limits reach this in practice).

Why does 1M TPS matter for trading infrastructure? Because throughput headroom translates directly to confirmation time stability. On a chain running near capacity, transactions compete for inclusion and confirmation time becomes unpredictable. On a chain with 15x headroom, confirmation time is consistent.

The Frankendancer hybrid (Firedancer’s networking layer + Agave’s execution layer) deployed to mainnet in 2024. The full Firedancer client entered mainnet testing in late 2025. As of 2026, validators running Firedancer are processing blocks faster and earning slightly higher MEV revenue from Jito bundles due to reduced tip processing latency.

Hardware requirements for a competitive Firedancer validator in 2026:

ComponentMinimumCompetitive
CPU16-core modern server CPU32-core AMD EPYC 9354 or Intel Xeon w9-3495X
RAM256 GB DDR5 ECC512 GB DDR5 ECC
Storage2 TB NVMe PCIe Gen4 (for accounts DB)4 TB NVMe PCIe Gen5, separate drives for ledger
Network1 Gbps10 Gbps dedicated, low-latency peering with Jito
OSUbuntu 22.04 LTSUbuntu 22.04 LTS, kernel 6.x with PREEMPT_RT patches

The RAM requirement is driven by the accounts database. Solana’s accounts database needs to be largely in RAM for fast access during block execution. A validator serving both voting duties and RPC queries simultaneously can hit 300+ GB RAM usage during peak load.

Should Trading Firms Run Their Own Validator?

This is a practical question that comes up whenever I discuss Solana infrastructure with other builders. The answer depends on what you are trying to accomplish.

Run your own validator if:

  • You are doing significant Solana MEV and need tip revenue plus guaranteed transaction landing. Firms running Jito validators capture both sides of the MEV equation: tip revenue from searchers plus MEV from their own bundles.
  • You need guaranteed RPC access with zero rate limits. Public RPC endpoints (Helius, QuickNode, Triton) are excellent but shared. Your own validator means your RPC is dedicated.
  • You want transaction landing guarantees. Submitting transactions directly to your own leader schedule via TPU gives you more control than submitting to a third-party RPC.
  • Your Solana trading volume justifies the capital commitment. A bare-bones voting validator costs roughly $1,500-3,000/month in hardware (or cloud) + bandwidth. With Jito tip revenue, well-run validators with significant stake can be profitable. The math depends on your stake weight.

Do not run your own validator if:

  • You need Solana RPC access but your on-chain volume is modest. Use Helius or QuickNode - they are excellent and far cheaper than self-hosting.
  • Your team does not have systems engineering capacity to maintain 99.9%+ uptime. A validator that misses votes loses credits and slashes delegators’ rewards. This is a real operational commitment, not a set-and-forget system.
  • You are primarily doing CeFi trading with occasional on-chain execution. The complexity is not justified.

How This Breaks in Production

Firedancer is newer code with a smaller battle-tested surface area than Agave. The failure modes reflect this.

Ledger corruption on hard restart - Firedancer’s accounts database uses a different on-disk format than Agave. Switching clients requires a full resync from a snapshot, which takes several hours. If a validator flips between Agave and Firedancer repeatedly during an incident, the ledger can end up in an inconsistent state. Use a clean snapshot when switching clients.

CPU affinity interference - Firedancer’s performance depends on having dedicated CPU cores for each process stage. In cloud environments (AWS, GCP, DigitalOcean), CPU affinity can be disrupted by hypervisor scheduling, especially on shared tenants. The production recommendation is bare metal or dedicated instances with pinned CPUs. KVM-based VMs with dedicated NUMA nodes work; shared-tenant VMs do not.

XDP incompatibility - Firedancer’s quic process uses XDP (eXpress Data Path) for zero-copy networking, which requires kernel support and specific NIC drivers. Some cloud instance types do not support XDP. Test your NIC + kernel combination before deploying Firedancer. Standard Intel X550/X710 and Mellanox ConnectX cards work well.

Jito tip account monitoring - validators running Jito-Firedancer need to monitor the Jito tip configuration. Jito periodically rotates which addresses are the canonical tip accounts. If your validator is using an outdated tip account list, you will miss valid tip transactions. Subscribe to Jito’s validator announcements channel and automate tip account updates.

RPC port separation - a common mistake is running voting duties and public RPC on the same validator instance. The RPC query load from public clients can create CPU and I/O pressure that degrades voting performance. For a production setup, run a separate non-voting RPC node subscribed to the same accounts as your voting validator, and direct all application RPC traffic to it. Keep the voting validator dedicated to consensus duties.

Jump’s bet on Firedancer is a bet that Solana’s execution performance is the binding constraint for the next phase of on-chain finance. Given what I have seen in how latency-sensitive the Solana MEV ecosystem has become since 2023, I think they are right.

Continue Reading

Enjoyed this?

Get one deep infrastructure insight per week.

Free forever. Unsubscribe anytime.

You're in. Check your inbox.