5#include <bitcoin-build-config.h>
25 wallet->WalletLogPrintf(
"Releasing wallet\n");
48 std::unique_ptr<WalletDatabase> database =
MakeDatabase(path, options, status, error);
58 load_wallet_ret = wallet_instance->LoadWallet();
59 }
catch (
const std::runtime_error&) {
60 tfm::format(std::cerr,
"Error loading %s. Is wallet being used by another process?\n",
name);
69 tfm::format(std::cerr,
"Error reading %s! All keys read correctly, but transaction data"
70 " or address book entries might be missing or incorrect.",
73 tfm::format(std::cerr,
"Error loading %s: Wallet requires newer version of %s",
77 tfm::format(std::cerr,
"Wallet needed to be rewritten: restart %s to complete", CLIENT_NAME);
80 tfm::format(std::cerr,
"Error reading %s! Some transaction data might be missing or"
81 " incorrect. Wallet requires a rescan.",
91 return wallet_instance;
98 tfm::format(std::cout,
"Wallet info\n===========\n");
105 tfm::format(std::cout,
"Transactions: %zu\n", wallet_instance->mapWallet.size());
106 tfm::format(std::cout,
"Address Book: %zu\n", wallet_instance->m_address_book.size());
112 tfm::format(std::cerr,
"The -dumpfile option can only be used with the \"dump\" and \"createfromdump\" commands.\n");
117 tfm::format(std::cerr,
"The -descriptors option can only be used with the 'create' command.\n");
121 tfm::format(std::cerr,
"The -descriptors option must be set to \"true\"\n");
127 tfm::format(std::cerr,
"The -legacy option can only be used with the 'create' command.\n");
131 tfm::format(std::cerr,
"The -legacy option must be set to \"false\"\n");
136 tfm::format(std::cerr,
"Wallet name must be provided when creating a new wallet.\n");
149 const std::shared_ptr<CWallet> wallet_instance =
MakeWallet(
name, path, options);
150 if (wallet_instance) {
152 wallet_instance->Close();
154 }
else if (
command ==
"info") {
158 const std::shared_ptr<CWallet> wallet_instance =
MakeWallet(
name, path, options);
159 if (!wallet_instance)
return false;
161 wallet_instance->Close();
162 }
else if (
command ==
"dump") {
173 std::unique_ptr<WalletDatabase> database =
MakeDatabase(path, options, status, error);
184 tfm::format(std::cout,
"The dumpfile may contain private keys. To ensure the safety of your Bitcoin, do not share the dumpfile.\n");
186 }
else if (
command ==
"createfromdump") {
188 std::vector<bilingual_str> warnings;
190 for (
const auto& warning : warnings) {
#define Assert(val)
Identity function.
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
bool TopUpKeyPool(unsigned int kpSize=0)
unsigned int GetKeyPoolSize() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
const std::string & GetName() const
Get a name for this wallet for logging/debugging purposes.
void SetupDescriptorScriptPubKeyMans(WalletBatch &batch, const CExtKey &master_key) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Create new DescriptorScriptPubKeyMans and add them to the wallet.
WalletDatabase & GetDatabase() const override
RecursiveMutex cs_wallet
Main wallet lock.
virtual std::string Format()=0
static path PathFromString(const std::string &string)
Convert byte string to path object.
void SetMinVersion(enum WalletFeature, WalletBatch *batch_in=nullptr) override
signify that a particular wallet feature is now used.
bool IsWalletFlagSet(uint64_t flag) const override
check if a certain wallet flag is set
void InitWalletFlags(uint64_t flags)
overwrite all flags by the given uint64_t flags must be uninitialised (or 0) only known flags may be ...
fs::path AbsPathJoin(const fs::path &base, const fs::path &path)
Helper function for joining two paths.
void ReadDatabaseArgs(const ArgsManager &args, DatabaseOptions &options)
std::unique_ptr< WalletDatabase > MakeDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
DBErrors
Overview of wallet database classes:
bool CreateFromDump(const ArgsManager &args, const std::string &name, const fs::path &wallet_path, bilingual_str &error, std::vector< bilingual_str > &warnings)
fs::path GetWalletDir()
Get the path of the wallet directory.
bool IsBDBFile(const fs::path &path)
fs::path BDBDataFile(const fs::path &wallet_path)
bool DumpWallet(const ArgsManager &args, WalletDatabase &db, bilingual_str &error)
@ WALLET_FLAG_DESCRIPTORS
Indicate that this wallet supports DescriptorScriptPubKeyMan.
std::optional< DatabaseFormat > require_format