dash/doc/files.md
fanquake 54bc4ddcfc Merge #20152: doc: Update wallet files in files.md
defe48a51f4315f8cc607875a099981593c8cc39 doc: Update wallet files in files.md (Hennadii Stepanov)

Pull request description:

  This PR is a #19077 follow up, and it addresses the [comment](https://github.com/bitcoin/bitcoin/pull/19077#discussion_r504805234):

  > If need to update, there are two corrections that could be made:
  >
  >  * Line 69 "Wallets are Berkeley DB (BDB) databases" is no longer true
  >
  >  * Line 76 "Wallet lock file" should say "BDB wallet lock file"

ACKs for top commit:
  RiccardoMasutti:
    ACK defe48a
  meshcollider:
    ACK defe48a51f4315f8cc607875a099981593c8cc39

Tree-SHA512: 39939f86a9c7842bf06913998305dcbd6209585f1da0fe9c274bac0572eb8464e59176884dd9e2b91312f34efad40cdeb4085ec72c2a2c1b33d16b6ab505140c
2023-04-09 00:06:56 -05:00

8.4 KiB

Dash Core file system

Contents

Data directory location

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

  1. The default data directory paths for supported platforms are:
Platform Data directory path
Linux $HOME/.dashcore/
macOS $HOME/Library/Application Support/Dashcore/
Windows %APPDATA%\Dashcore\ [1]
  1. The non-default data directory path can be specified by -datadir option.

  2. All content of the data directory, except for dash.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[2] Actual Dash blocks (in network format, dumped in raw on disk, 128 MiB per file)
blocks/ revNNNNN.dat[2] 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[2] Blockfilter index filters for the basic filtertype; optional, used if -blockfilterindex=basic
wallets/ Contains wallets; can be specified by -walletdir option; if wallets/ subdirectory does not exist, a wallet resides in the data directory
evodb/ special txes and quorums database
llmq/ quorum signatures database
./ banlist.dat Stores the IPs/subnets of banned nodes
./ dash.conf User-defined configuration settings for dashd or dash-qt. File is not written to by the software and must be created manually. Path can be specified by -conf option
./ dashd.pid Stores the process ID (PID) of dashd or dash-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 dashd or dash-qt; can be specified by -debuglogfile option
./ governance.dat stores data for governance objects
./ mncache.dat stores data for masternode list
./ netfulfilled.dat stores data about recently made network requests
./ fee_estimates.dat Stores statistics used to estimate minimum transaction fees and priorities required for confirmation
./ guisettings.ini.bak Backup of former GUI settings after -resetguisettings option is used
./ mempool.dat Dump of the mempool's transactions
./ onion_v3_private_key Cached Tor hidden 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 dash.conf. 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) 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

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 (a BDB database) with keys and transactions
./ .walletlock BDB wallet lock file

SQLite database based wallets

Subdirectory File Description
./ wallet.dat Personal wallet (a SQLite database) with keys and transactions
./ wallet.dat-journal SQLite 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

dash-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 the Dash Core:

Path Description Repository notes
blktree/ Blockchain index; replaced by blocks/index/ in 0.8.0 PR #2231, 8fdc94cc
coins/ Unspent transaction output database; replaced by chainstate/ in 0.8.0 PR #2231, 8fdc94cc
blkindex.dat Blockchain index BDB database; replaced by {chainstate/, blocks/index/, blocks/revNNNNN.dat[2]} in 0.8.0 PR #1677
blk000?.dat Block data (custom format, 2 GiB per file); replaced by blocks/blkNNNNN.dat[2] in 0.8.0 PR #1677
addr.dat Peer IP address BDB database; replaced by peers.dat in 0.7.0 PR #1198, 928d3a01

Notes

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

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