[ledger] section configures storage for the ledger (recent unconfirmed blocks) and accounts database. The [snapshots] section controls snapshot creation and retention.
Ledger Storage
Absolute directory path to place the ledger. Firedancer currently spawns an Agave validator to execute transactions that it receives.If no ledger path is provided, it defaults to the
ledger subdirectory of the scratch directory. Supports {user} and {name} substitutions.This option is passed to the Agave client with the --ledger argument.Absolute directory path to place the accounts database in. If this is empty, it will default to the
accounts subdirectory of the ledger path above.Supports {user} and {name} substitutions. This option is passed to the Agave client with the --accounts argument.Maximum number of shreds to keep in root slots in the ledger before discarding.The default is chosen to allow enough time for a validator to download a snapshot from a peer and boot from it, and to make sure that if a validator needs to reboot from its own snapshot, it has enough slots locally to catch back up. Works out to around 400GB of space.This option is passed to the Agave client with the
--limit-ledger-size argument.Account Indexes
If nonempty, enable an accounts index indexed by the specified field. The account field must be one of:
"program-id""spl-token-owner""spl-token-mint"
--account-index argument.If account indexes are enabled, exclude these keys from the index.These options are passed to the Agave client with the
--account-index-exclude-key argument.If account indexes are enabled, only include these keys in the index. This overrides
account_index_exclude_keys if specified.These options are passed to the Agave client with the --account-index-include-key argument.If account indexes are enabled, they are flushed to disk periodically. Otherwise, the entire index is kept in memory. Setting this to false may reduce disk I/O strain.This option is passed to the Agave client with the
--enable-accounts-disk-index argument.If account indexes are enabled, this is the absolute directory path to place the accounts index in. If this is empty, it will default to the
accounts_index subdirectory of the ledger path.Setting this will automatically set enable_accounts_disk_index to true. This option is passed to the Agave client with the --accounts-index-path argument.Absolute directory path to place the accounts hash cache data in. If this is empty, it will default to the
accounts_hash_cache subdirectory of the ledger path.Every epoch, the client calculates a hash of all the accounts on-chain called the Epoch Accounts Hash. This cache stores intermediate hash data.This option is passed to the Agave client with the --accounts-hash-cache-path argument.Tower and Archive Format
Whether to use compression when storing snapshots.This option is passed to the Agave client with the
--snapshot-archive-format argument.Refuse to start if saved tower state is not found.This option is passed to the Agave client with the
--require-tower argument.Snapshots Configuration
The[snapshots] section controls snapshot creation, retention, and download behavior.
If false, all snapshots (both full and incremental) will not be produced.This option is passed to the Agave client (inverted) with the
--no-snapshots argument.Enable incremental snapshots by setting this flag.This option is passed to the Agave client (inverted) with the
--no-incremental-snapshots argument.Set how frequently full snapshots are taken, measured in slots, where one slot is about 400ms on production chains.It’s recommended to leave this to the default or to set it to the same value that the known validators are using. Must be a multiple of the incremental snapshot interval.This option is passed to the Agave client with the
--full-snapshot-interval-slots argument.Set how frequently incremental snapshots are taken, measured in slots. Must be a multiple of the accounts hash interval (which is 100 by default).This option is passed to the Agave client with the
--snapshot-interval-slots argument.Set the maximum number of full snapshot archives to keep when purging older snapshots.This option is passed to the Agave client with the
--maximum-full-snapshots-to-retain argument.Set the maximum number of incremental snapshot archives to keep when purging older snapshots.This option is passed to the Agave client with the
--maximum-incremental-snapshots-to-retain argument.Set the minimum snapshot download speed in bytes per second. If the initial download speed falls below this threshold, the validator will retry the download against a different RPC node.The default value is 10MB/s. This option is passed to the Agave client with the
--minimum-snapshot-download-speed argument.The maximum number of times to abort and retry when encountering a slow snapshot download.The default value is 5 retries. This option is passed to the Agave client with the
--maximum-snapshot-download-abort argument.Absolute directory path for storing snapshots. If no path is provided, it defaults to the
[ledger.path] option.Supports {user} and {name} substitutions. This option is passed to the Agave client with the --snapshots argument.Absolute directory path for storing incremental snapshots. If no path is provided, defaults to the
[snapshots.path] option above, or if that is not provided, the [ledger.path] option.Supports {user} and {name} substitutions. This option is passed to the Agave client with the --incremental-snapshot-archive-path argument.Configuration Examples
Storage Recommendations
Disk Space Requirements
- Ledger: ~400GB with default
limit_sizeof 200M shreds - Accounts Database: 100-300GB depending on network
- Snapshots: 50-100GB per full snapshot
- Account Indexes (if enabled): 10-50GB depending on index type
Performance Considerations
For optimal performance:
- Use separate NVMe drives for ledger and accounts
- Enable account indexes only if needed by your RPC workload
- Set
enable_accounts_disk_index = falseto keep indexes in memory if you have sufficient RAM - Consider separate volumes for snapshots to isolate I/O
Snapshot Strategy
The default snapshot settings are optimized for most validators:- Full snapshots every 25,000 slots (~2.8 hours)
- Incremental snapshots every 100 slots (~40 seconds)
- Keep 2 full and 4 incremental snapshots