diff options
author | Ava Chow <github@achow101.com> | 2024-01-02 16:36:17 -0500 |
---|---|---|
committer | Ava Chow <github@achow101.com> | 2024-05-16 15:03:13 -0400 |
commit | 70cfbfdadf16d3b115309c6938f07ef5b96c7cc1 (patch) | |
tree | c197e461695ca6559e95649b9473cae1b43db399 /src | |
parent | dd57713f6ede3d46e97ee7df87c10001b0bf4c3d (diff) | |
download | bitcoin-70cfbfdadf16d3b115309c6938f07ef5b96c7cc1.tar.xz |
wallettool: Optionally use BERKELEY_RO as format when dumping BDB wallets
In order to ease the transition to not having BDB, make the dump tool
use DatabaseFormmat::BERKELEY_RO when -withinternalbdb is set.
Diffstat (limited to 'src')
-rw-r--r-- | src/bitcoin-wallet.cpp | 1 | ||||
-rw-r--r-- | src/wallet/dump.cpp | 8 | ||||
-rw-r--r-- | src/wallet/wallettool.cpp | 5 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/bitcoin-wallet.cpp b/src/bitcoin-wallet.cpp index d5dfbbec27..d1714f3e31 100644 --- a/src/bitcoin-wallet.cpp +++ b/src/bitcoin-wallet.cpp @@ -44,6 +44,7 @@ static void SetupWalletToolArgs(ArgsManager& argsman) argsman.AddArg("-legacy", "Create legacy wallet. Only for 'create'", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-format=<format>", "The format of the wallet file to create. Either \"bdb\" or \"sqlite\". Only used with 'createfromdump'", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-printtoconsole", "Send trace/debug info to console (default: 1 when no -debug is true, 0 otherwise).", ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); + argsman.AddArg("-withinternalbdb", "Use the internal Berkeley DB parser when dumping a Berkeley DB wallet file (default: false)", ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST); argsman.AddCommand("info", "Get wallet info"); argsman.AddCommand("create", "Create new wallet file"); diff --git a/src/wallet/dump.cpp b/src/wallet/dump.cpp index 7a36910dc1..970830754d 100644 --- a/src/wallet/dump.cpp +++ b/src/wallet/dump.cpp @@ -60,7 +60,13 @@ bool DumpWallet(const ArgsManager& args, WalletDatabase& db, bilingual_str& erro hasher << Span{line}; // Write out the file format - line = strprintf("%s,%s\n", "format", db.Format()); + std::string format = db.Format(); + // BDB files that are opened using BerkeleyRODatabase have it's format as "bdb_ro" + // We want to override that format back to "bdb" + if (format == "bdb_ro") { + format = "bdb"; + } + line = strprintf("%s,%s\n", "format", format); dump_file.write(line.data(), line.size()); hasher << Span{line}; diff --git a/src/wallet/wallettool.cpp b/src/wallet/wallettool.cpp index cda344ab19..56868272bb 100644 --- a/src/wallet/wallettool.cpp +++ b/src/wallet/wallettool.cpp @@ -194,6 +194,11 @@ bool ExecuteWalletToolFunc(const ArgsManager& args, const std::string& command) ReadDatabaseArgs(args, options); options.require_existing = true; DatabaseStatus status; + + if (args.GetBoolArg("-withinternalbdb", false) && IsBDBFile(BDBDataFile(path))) { + options.require_format = DatabaseFormat::BERKELEY_RO; + } + bilingual_str error; std::unique_ptr<WalletDatabase> database = MakeDatabase(path, options, status, error); if (!database) { |