Bitcoin Core file system

Contents

Data directory location

The data directory is the default location where the Bitcoin Core files are stored.

  1. The default data directory paths for supported platforms are:
PlatformData directory path
Linux$HOME/.bitcoin/
macOS$HOME/Library/Application Support/Bitcoin/
Windows%LOCALAPPDATA%\Bitcoin\ [1]
  1. A custom data directory path can be specified with the -datadir option.

  2. All content of the data directory, except for bitcoin.conf file, is chain-specific. This means the actual data directory paths for non-mainnet cases differ:

Chain optionData directory path
-chain=main (default)path_to_datadir/
-chain=test or -testnetpath_to_datadir/testnet3/
-chain=testnet4 or -testnet4path_to_datadir/testnet4/
-chain=signet or -signetpath_to_datadir/signet/
-chain=regtest or -regtestpath_to_datadir/regtest/

Data directory layout

SubdirectoryFile(s)Description
blocks/Blocks directory; can be specified by -blocksdir option (except for blocks/index/)
blocks/index/LevelDB databaseBlock index; -blocksdir option does not affect this path
blocks/blkNNNNN.dat[2]Actual Bitcoin blocks (dumped in network format, 128 MiB per file)
blocks/revNNNNN.dat[2]Block undo data (custom format)
blocks/xor.datRolling XOR pattern for block and undo data files
chainstate/LevelDB databaseBlockchain state (a compact representation of all currently unspent transaction outputs (UTXOs) and metadata about the transactions they are from)
indexes/txindex/LevelDB databaseTransaction index; optional, used if -txindex=1
indexes/blockfilter/basic/db/LevelDB databaseBlockfilter index LevelDB database for the basic filtertype; optional, used if -blockfilterindex=basic
indexes/blockfilter/basic/fltrNNNNN.dat[2]Blockfilter index filters for the basic filtertype; optional, used if -blockfilterindex=basic
indexes/coinstats/db/LevelDB databaseCoinstats index; optional, used if -coinstatsindex=1
wallets/Contains wallets; can be specified by -walletdir option; if wallets/ subdirectory does not exist, wallets reside in the data directory
./anchors.datAnchor IP address database, created on shutdown and deleted at startup. Anchors are last known outgoing block-relay-only peers that are tried to re-connect to on startup
./banlist.jsonStores the addresses/subnets of banned nodes.
./bitcoin.confUser-defined configuration settings for bitcoind or bitcoin-qt. File is not written to by the software and must be created manually. Path can be specified by -conf option
./bitcoind.pidStores the process ID (PID) of bitcoind or bitcoin-qt while running; created at start and deleted on shutdown; can be specified by -pid option
./debug.logContains debug information and general logging generated by bitcoind or bitcoin-qt; can be specified by -debuglogfile option
./fee_estimates.datStores statistics used to estimate minimum transaction fees required for confirmation
./guisettings.ini.bakBackup of former GUI settings after -resetguisettings option is used
./ip_asn.mapIP addresses to Autonomous System Numbers (ASNs) mapping used for bucketing of the peers; path can be specified with the -asmap option
./mempool.datDump of the mempool's transactions
./onion_v3_private_keyCached Tor onion service private key for -listenonion option
./i2p_private_keyPrivate key that corresponds to our I2P address. When -i2psam= is specified the contents of this file is used to identify ourselves for making outgoing connections to I2P peers and possibly accepting incoming ones. Automatically generated if it does not exist.
./peers.datPeer IP address database (custom format)
./settings.jsonRead-write settings set through GUI or RPC interfaces, augmenting manual settings from bitcoin.conf. File is created automatically if read-write settings storage is not disabled with -nosettings option. Path can be specified with -settings option
./.cookieSession RPC authentication cookie; if used, created at start and deleted on shutdown; can be specified by -rpccookiefile option
./.lockData directory lock file

Multi-wallet environment

Wallets are Berkeley DB (BDB) or SQLite databases.

  1. Each user-defined wallet named "wallet_name" resides in the wallets/wallet_name/ subdirectory.

  2. The default (unnamed) wallet resides in wallets/ subdirectory; if the latter does not exist, the wallet resides in the data directory.

  3. A wallet database path can be specified with the -wallet option.

  4. wallet.dat files must not be shared across different node instances, as that can result in key-reuse and double-spends due the lack of synchronization between instances.

  5. Any copy or backup of the wallet should be done through a backupwallet call in order to update and lock the wallet, preventing any file corruption caused by updates during the copy.

Berkeley DB database based wallets

SubdirectoryFile(s)Description
database/BDB logging filesPart of BDB environment; created at start and deleted on shutdown; a user must keep it as safe as personal wallet wallet.dat
./db.logBDB error file
./wallet.datPersonal wallet (a BDB database) with keys and transactions
./.walletlockBDB wallet lock file

SQLite database based wallets

SubdirectoryFileDescription
./wallet.datPersonal wallet (a SQLite database) with keys and transactions
./wallet.dat-journalSQLite Rollback Journal file for wallet.dat. Usually created at start and deleted on shutdown. A user must keep it as safe as the wallet.dat file.

GUI settings

bitcoin-qt uses QSettings class; this implies platform-specific locations where application settings are stored.

Legacy subdirectories and files

These subdirectories and files are no longer used by Bitcoin Core:

PathDescriptionRepository notes
banlist.datStores the addresses/subnets of banned nodes; superseded by banlist.json in 22.0 and completely ignored in 23.0PR #20966, PR #22570
blktree/Blockchain index; replaced by blocks/index/ in 0.8.0PR #2231, 8fdc94cc
coins/Unspent transaction output database; replaced by chainstate/ in 0.8.0PR #2231, 8fdc94cc
blkindex.datBlockchain index BDB database; replaced by {chainstate/, blocks/index/, blocks/revNNNNN.dat[2]} in 0.8.0PR #1677
blk000?.datBlock data (custom format, 2 GiB per file); replaced by blocks/blkNNNNN.dat[2] in 0.8.0PR #1677
addr.datPeer IP address BDB database; replaced by peers.dat in 0.7.0PR #1198, 928d3a01
onion_private_keyCached Tor onion service private key for -listenonion option. Was used for Tor v2 services; replaced by onion_v3_private_key in 0.21.0PR #19954

Notes

1. The / (slash, U+002F) is used as the platform-independent path component separator in this document.

2. NNNNN matches [0-9]{5} regex.