Create new wallet databases as directories rather than files

This change should make it easier for users to make complete backups of wallets
because they can now just back up the specified `-wallet=<path>` path directly,
instead of having to back up the specified path as well as the transaction log
directory (for incompletely flushed wallets).

Another advantage of this change is that if two wallets are located in the same
directory, they will now use their own BerkeleyDB environments instead using a
shared environment. Using a shared environment makes it difficult to manage and
back up wallets separately because transaction log files will contain a mix of
data from all wallets in the environment.
This commit is contained in:
Russell Yanofsky
2017-11-15 15:44:36 -05:00
parent 26c06f24e5
commit be8ab7d082
8 changed files with 81 additions and 30 deletions

View File

@@ -67,10 +67,31 @@ External wallet files
---------------------
The `-wallet=<path>` option now accepts full paths instead of requiring wallets
to be located in the -walletdir directory. When wallets are located in
different directories, wallet data will be stored independently, so data from
every wallet is not mixed into the same <walletdir>/database/log.??????????
files.
to be located in the -walletdir directory.
Newly created wallet format
---------------------------
If `-wallet=<path>` is specified with a path that does not exist, it will now
create a wallet directory at the specified location (containing a wallet.dat
data file, a db.log file, and database/log.?????????? files) instead of just
creating a data file at the path and storing log files in the parent
directory. This should make backing up wallets more straightforward than
before because the specified wallet path can just be directly archived without
having to look in the parent directory for transaction log files.
For backwards compatibility, wallet paths that are names of existing data files
in the `-walletdir` directory will continue to be accepted and interpreted the
same as before.
Low-level RPC changes
---------------------
- When bitcoin is not started with any `-wallet=<path>` options, the name of
the default wallet returned by `getwalletinfo` and `listwallets` RPCs is
now the empty string `""` instead of `"wallet.dat"`. If bitcoin is started
with any `-wallet=<path>` options, there is no change in behavior, and the
name of any wallet is just its `<path>` string.
Credits
=======