FireBAM Setup Guide
FireBAM is a fork of Firedancer that adds support for BAM (Blockspace Assembly Marketplace). BAM provides next-generation transaction scheduling for Solana while the validator continues to own consensus, voting, execution, and block production.
This guide covers the FireBAM-specific setup. Before continuing, complete the standard Firedancer installation and host configuration:
How FireBAM Works
The BAM node receives transactions and Block Engine bundles, schedules them, and sends ordered work to the validator over gRPC. FireBAM executes that work and returns leader-state and execution results to the BAM node.
FireBAM has two operating modes:
BAM disabled or unhealthy: the BAM scheduling path is inactive and the validator uses its normal transaction ingress, including Block Engine.
BAM enabled and healthy: the validator accepts scheduled work from the BAM node. Normal TPU and Block Engine bundle ingress are paused while this mode is active.
Requirements
All standard Firedancer requirements still apply. The current FireBAM release has been tested with:
Ubuntu 24.04
An AVX-512-compatible CPU, such as Intel Ice Lake or later or AMD EPYC 9xxx
At least 386 GiB of RAM
A 10 Gbit/s or faster network connection
Outbound DNS and TCP access to the selected BAM endpoint on ports
50055-50056
Get FireBAM
FireBAM is available from the Jito FireBAM repository. Select the intended release, then clone the repository with its submodules:
Build the binary for the validator mode you operate.
Build Firedancer
The binary is written to build/native/gcc/bin/firedancer.
Build Frankendancer
Build fdctl for a production validator:
The binary is written to build/native/gcc/bin/fdctl.
For development and test environments, you can also build fddev or firedancer-dev:
The binary is written to build/native/gcc/bin/.
Configure FireBAM
Start with the Firedancer configuration you already use for the target cluster. Keep your normal identity, vote account, authorized voter, ledger, accounts, gossip, snapshot, RPC, and reporting settings.
The same BAM and Block Engine settings apply to Firedancer and Frankendancer. Add the sections for your cluster.
Mainnet
commission_bps is the validator’s tip commission in basis points. Set it to the value you intend to use rather than copying the example without review.
Testnet
Start FireBAM
Replace mainnet.toml with the path to your reviewed configuration. Run only the command for your validator mode.
Firedancer
Use the appropriate checked-in BAM configuration as a reference:
Frankendancer
Use the appropriate checked-in BAM configuration as a reference:
Use fdctl for a production validator:
Run FireBAM under the same service supervision and restart policy you use for your validator, and use that supervisor to stop it. Do not run a second validator process against the same identity, ledger, or accounts directories.
Verify the BAM Tile
In another shell, inspect the configured topology with the binary for your validator mode.
Inspect the configured topology
Firedancer
Frankendancer
You should see the BAM tile and its related workspaces. If the Firedancer GUI is enabled, the topology should also contain bam:0.
Check the runtime BAM configuration
Firedancer
Frankendancer
Always pass the same configuration file that was used to start the validator.
Runtime Control
You can change the BAM endpoint or toggle BAM without restarting, provided the validator started with [tiles.bam].enabled = true.
Update the BAM configuration
Firedancer
Frankendancer
Change the validator identity
Identity changes use the control binary for the running validator mode.
Firedancer
Frankendancer
Use --force only when intentionally recovering from a partially completed identity change.
Monitor FireBAM
Read metrics
If HTTP metrics are enabled, the same command works for both validator modes:
If HTTP metrics are disabled, use the control binary for your validator mode.
Firedancer
Frankendancer
Core BAM Health
bam_enabled
Operator enable state: 1 when BAM is enabled and 0 when disabled
bam_healthy
1 when transport, authentication, configuration, scheduler stream, and builder-activity checks are healthy; it does not guarantee that fresh work has arrived for the current leader slot
bam_stream_live
1 when the BAM scheduler gRPC stream is established and live
bam_transaction_published_total
Transactions published from BAM to verify, including transactions unpacked from bundles
bam_atomic_batch_published_total
revert_on_error atomic batches published from BAM to verify
bam_failure_total
BAM control-plane and session failures grouped by class; scheduler payload and atomic-batch rejections are counted separately
Pack Progress
pack_bam_work_items_total
BAM work items observed at each labeled pack lifecycle stage; a multi-transaction bundle counts as one item
pack_bam_pending_work_count
Current BAM work items tracked after acceptance and before scheduling or cleanup
pack_bam_leader_slot_first_insert_result_total
Leader slots grouped by no BAM insert, first insert before slot end, or first insert at or after slot end
pack_bam_leader_slot_first_schedule_result_total
Leader slots grouped by no BAM schedule, first schedule before slot end, or first schedule at or after slot end
pack_bam_work_first_outcome_total
BAM work items grouped by their first terminal pack outcome
Metrics ending in _total are cumulative counters. Use their labels and rates or increases when building alerts; pack_bam_pending_work_count is a current gauge.
Troubleshooting
The BAM tile is missing
Confirm that the configuration contained [tiles.bam].enabled = true before startup. Add it and restart the validator; set-bam cannot create a missing BAM topology at runtime.
get-bam reports that runtime control is unavailable
Use the exact configuration path that started the validator. If the error continues, confirm the validator started with BAM enabled and restart it after correcting the configuration.
bam_enabled=1 but bam_healthy=0
Check:
The BAM hostname, port, and cluster
DNS resolution and outbound TCP connectivity to ports
50055-50056Validator identity access and BAM authentication logs
If
bam_stream_live=0, scheduler-stream connection errors and the labeled failure classes inbam_failure_totalIf
bam_stream_live=1, configuration-response errors, missing builder heartbeats, or builder-activity timeouts in the validator log
Hugepage or shared-memory errors
Stop the validator before changing hugepage mounts. The following commands remove and recreate the hugetlbfs mounts and named shared-memory regions for the supplied configuration, so use the exact configuration file for the stopped validator.
Firedancer
Frankendancer
Last-resort host configuration reset
Use this only when targeted recovery has failed. Stop the validator and any other process using its hugepage mounts, CPU cores, or network interfaces. Disable automatic supervisor restarts until the reset is complete, and use the exact configuration file for the stopped validator.
configure fini all undoes every host-configuration stage that the selected binary can roll back. configure init all then checks and reapplies every stage known to that binary, including stages that do not support rollback. This is a full rebuild of the configuration managed by the selected binary, not a factory reset of the host.
Hugepage mounts and named shared-memory regions
Removed and recreated
Removed and recreated
System-wide reserved hugepage counts
Increased if required by init; not reduced by fini
Increased if required by init; not reduced by fini
Cpuset, IRQ affinity, irqbalance, and kernel-worker CPU masks
Reset and reapplied where supported
Not managed by fdctl
Kernel and network tuning
Reset where a rollback handler exists, then checked and reapplied
Reset where a rollback handler exists, then checked and reapplied
Agave or systemd CPU affinity
Not managed; restore through the owning service configuration
Not managed; restore through the owning service configuration
Firedancer
Frankendancer
Next Steps
After FireBAM is healthy:
Confirm
bam_enabled=1,bam_healthy=1, andbam_stream_live=1.Confirm
bam_transaction_published_totaland, when atomic batches arrive,bam_atomic_batch_published_totalincrease.During leader slots, confirm the labeled
pack_bam_work_items_totalstages progress and the first-insert and first-schedule results occur before slot end.Alert on BAM health or stream loss and unexpected increases in
no_eventorafter_endfirst-insert and first-schedule results.
For BAM architecture and validator information, see bam.dev and the BAM validator guide.
Last updated