IBD UTXO engine
Sync tuning guide
First mainnet sync always starts from First Node Setup: Mainnet IBD (release IBD example config). For other IBD topics, use the operator IBD hub or:
| Topic | Page |
|---|---|
| Parallel download, pipelining, assume-valid | Performance optimizations |
[ibd] keys and BLVM_IBD_* | Configuration reference: IBD |
| Serving-side bandwidth limits | IBD bandwidth protection |
| LAN Core / same-subnet peers | LAN peering |
Overview
During parallel initial block download (IBD), the node validates blocks in height order while downloading from one or more peers. By default, the age-tiered UTXO engine holds live UTXOs in memory and on disk under <data_dir>/ibd_engine/, with mid-sync checkpoints for crash-safe resume. The legacy in-process store remains available as an opt-out.
Enable (default)
The engine is on by default. Stable table path: <data_dir>/ibd_engine/utxo_table.bin (override with BLVM_IBD_ENGINE_PATH).
Opt-out:
export BLVM_IBD_ENGINE=0
[ibd] utxo_engine = false does the same. BLVM_IBD_ENGINE wins over the file.
Optional environment variables:
| Variable | Purpose |
|---|---|
BLVM_IBD_ENGINE_PATH | Path to the engine flat table (default: <data_dir>/ibd_engine/utxo_table.bin) |
BLVM_IBD_CHECKPOINT_INTERVAL | Fixed block interval for mid-IBD checkpoint export (engine mode) |
BLVM_IBD_DEFER_CHECKPOINT_INTERVAL | RAM-tier default override for deferred checkpoint spacing |
BLVM_IBD_EXPORT_HEIGHT_OVERRIDE | Force resume/export height only when it is at least the stored export height. An override below that height is ignored. start-ibd-mainnet.sh strips an inherited override unless BLVM_ALLOW_EXPORT_HEIGHT_OVERRIDE=1. |
Download scheduling still uses parallel IBD ([ibd].mode = "parallel"). The engine replaces how validated blocks apply UTXO changes during that pipeline.
Architecture
- Index and table: Age-tiered structures track live UTXOs and support fast spend lookups during validation.
- Spend session: Batches spend/create operations per block and feeds the engine from the validation loop.
- Checkpoint export: Periodic snapshots of engine state allow resume after interruption without re-downloading from genesis.
- Import / seed: On restart, the node seeds validation from the last exported checkpoint height when present.
Operator notes
- Use the same
storage.data_diron every run; do not delete the active database backend directory (heed3/,rocksdb/, …) mid-sync. - On SIGTERM / SIGINT during parallel IBD, the node drains in-flight validation and flushes the UTXO watermark before exit when possible.
io_uringaccelerates engine table I/O on Linux; other platforms use apreadfallback (engine still runs on Windows).- Assume-valid skips signature verification below the configured height when the hash is set and chainwork meets the minimum. The mainnet seed sets that hash at height 912683. Block structure, Merkle roots, and proof-of-work are still checked.
- First mainnet sync: First Node Setup: Mainnet IBD. Tune
[ibd]in config orBLVM_IBD_*overrides only when you need explicit peer or mode control.
Configuration
See IBD Configuration for [ibd] keys and BLVM_IBD_* environment variables shared with parallel download.
Source
See Also
- Operator guide: IBD hub: Map of all IBD docs
- Performance Optimizations: Parallel download, pipelining, reorder buffer
- IBD Bandwidth Protection: Serving-side bandwidth limits
- LAN Peering System: LAN peer preference during download
- Storage Backends:
database_backendanddata_dir