For a couple of years, Tor documentation has made the term hidden service obsolete, in favor of onion service. This PR updates all the references in the code base.
107 lines
7.4 KiB
Markdown
107 lines
7.4 KiB
Markdown
# Bitcoin Core file system
|
|
|
|
**Contents**
|
|
|
|
- [Data directory location](#data-directory-location)
|
|
|
|
- [Data directory layout](#data-directory-layout)
|
|
|
|
- [Multi-wallet environment](#multi-wallet-environment)
|
|
|
|
- [GUI settings](#gui-settings)
|
|
|
|
- [Legacy subdirectories and files](#legacy-subdirectories-and-files)
|
|
|
|
- [Notes](#notes)
|
|
|
|
## 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:
|
|
|
|
Platform | Data directory path
|
|
---------|--------------------
|
|
Linux | `$HOME/.bitcoin/`
|
|
macOS | `$HOME/Library/Application Support/Bitcoin/`
|
|
Windows | `%APPDATA%\Bitcoin\` <sup>[\[1\]](#note1)</sup>
|
|
|
|
2. The non-default data directory path can be specified by `-datadir` option.
|
|
|
|
3. 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 option | Data directory path
|
|
--------------------|--------------------
|
|
no option (mainnet) | *path_to_datadir*`/`
|
|
`-testnet` | *path_to_datadir*`/testnet3/`
|
|
`-regtest` | *path_to_datadir*`/regtest/`
|
|
|
|
## Data directory layout
|
|
|
|
Subdirectory | File(s) | Description
|
|
-------------------|-----------------------|------------
|
|
`blocks/` | | Blocks directory; can be specified by `-blocksdir` option (except for `blocks/index/`)
|
|
`blocks/index/` | LevelDB database | Block index; `-blocksdir` option does not affect this path
|
|
`blocks/` | `blkNNNNN.dat`<sup>[\[2\]](#note2)</sup> | Actual Bitcoin blocks (in network format, dumped in raw on disk, 128 MiB per file)
|
|
`blocks/` | `revNNNNN.dat`<sup>[\[2\]](#note2)</sup> | Block undo data (custom format)
|
|
`chainstate/` | LevelDB database | Blockchain state (a compact representation of all currently unspent transaction outputs and some metadata about the transactions they are from)
|
|
`indexes/txindex/` | LevelDB database | Transaction index; *optional*, used if `-txindex=1`
|
|
`indexes/blockfilter/basic/db/` | LevelDB database | Blockfilter index LevelDB database for the basic filtertype; *optional*, used if `-blockfilterindex=basic`
|
|
`indexes/blockfilter/basic/` | `fltrNNNNN.dat`<sup>[\[2\]](#note2)</sup> | Blockfilter index filters for the basic filtertype; *optional*, used if `-blockfilterindex=basic`
|
|
`wallets/` | | [Contains wallets](#multi-wallet-environment); can be specified by `-walletdir` option; if `wallets/` subdirectory does not exist, a wallet resides in the data directory
|
|
`./` | `banlist.dat` | Stores the IPs/subnets of banned nodes
|
|
`./` | `bitcoin.conf` | User-defined [configuration settings](bitcoin-conf.md) 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.pid` | Stores 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.log` | Contains debug information and general logging generated by `bitcoind` or `bitcoin-qt`; can be specified by `-debuglogfile` option
|
|
`./` | `fee_estimates.dat` | Stores statistics used to estimate minimum transaction fees and priorities required for confirmation
|
|
`./` | `guisettings.ini.bak` | Backup of former [GUI settings](#gui-settings) after `-resetguisettings` option is used
|
|
`./` | `mempool.dat` | Dump of the mempool's transactions
|
|
`./` | `onion_private_key` | Cached Tor onion service private key for `-listenonion` option
|
|
`./` | `peers.dat` | Peer IP address database (custom format)
|
|
`./` | `settings.json` | Read-write settings set through GUI or RPC interfaces, augmenting manual settings from [bitcoin.conf](bitcoin-conf.md). File is created automatically if read-write settings storage is not disabled with `-nosettings` option. Path can be specified with `-settings` option
|
|
`./` | `.cookie` | Session RPC authentication cookie; if used, created at start and deleted on shutdown; can be specified by `-rpccookiefile` option
|
|
`./` | `.lock` | Data directory lock file
|
|
|
|
## Multi-wallet environment
|
|
|
|
Wallets are Berkeley DB (BDB) databases:
|
|
|
|
Subdirectory | File(s) | Description
|
|
-------------|-------------------|------------
|
|
`database/` | BDB logging files | Part of BDB environment; created at start and deleted on shutdown; a user *must keep it as safe* as personal wallet `wallet.dat`
|
|
`./` | `db.log` | BDB error file
|
|
`./` | `wallet.dat` | Personal wallet (BDB) with keys and transactions
|
|
`./` | `.walletlock` | Wallet lock file
|
|
|
|
1. Each user-defined wallet named "wallet_name" resides in `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 by `-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.
|
|
|
|
## GUI settings
|
|
|
|
`bitcoin-qt` uses [`QSettings`](https://doc.qt.io/qt-5/qsettings.html) class; this implies platform-specific [locations where application settings are stored](https://doc.qt.io/qt-5/qsettings.html#locations-where-application-settings-are-stored).
|
|
|
|
## Legacy subdirectories and files
|
|
|
|
These subdirectories and files are no longer used by the Bitcoin Core:
|
|
|
|
Path | Description | Repository notes
|
|
---------------|-------------|-----------------
|
|
`blktree/` | Blockchain index; replaced by `blocks/index/` in [0.8.0](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.8.0.md#improvements) | [PR #2231](https://github.com/bitcoin/bitcoin/pull/2231), [`8fdc94cc`](https://github.com/bitcoin/bitcoin/commit/8fdc94cc8f0341e96b1edb3a5b56811c0b20bd15)
|
|
`coins/` | Unspent transaction output database; replaced by `chainstate/` in 0.8.0 | [PR #2231](https://github.com/bitcoin/bitcoin/pull/2231), [`8fdc94cc`](https://github.com/bitcoin/bitcoin/commit/8fdc94cc8f0341e96b1edb3a5b56811c0b20bd15)
|
|
`blkindex.dat` | Blockchain index BDB database; replaced by {`chainstate/`, `blocks/index/`, `blocks/revNNNNN.dat`<sup>[\[2\]](#note2)</sup>} in 0.8.0 | [PR #1677](https://github.com/bitcoin/bitcoin/pull/1677)
|
|
`blk000?.dat` | Block data (custom format, 2 GiB per file); replaced by `blocks/blkNNNNN.dat`<sup>[\[2\]](#note2)</sup> in 0.8.0 | [PR #1677](https://github.com/bitcoin/bitcoin/pull/1677)
|
|
`addr.dat` | Peer IP address BDB database; replaced by `peers.dat` in [0.7.0](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.7.0.md) | [PR #1198](https://github.com/bitcoin/bitcoin/pull/1198), [`928d3a01`](https://github.com/bitcoin/bitcoin/commit/928d3a011cc66c7f907c4d053f674ea77dc611cc)
|
|
|
|
## Notes
|
|
|
|
<a name="note1">1</a>. The `/` (slash, U+002F) is used as the platform-independent path component separator in this paper.
|
|
|
|
<a name="note2">2</a>. `NNNNN` matches `[0-9]{5}` regex.
|
|
|