20 wallet->WalletLogPrintf(
"Releasing wallet\n");
47 std::unique_ptr<WalletDatabase> database =
MakeDatabase(path, options, status,
error);
57 load_wallet_ret = wallet_instance->LoadWallet();
58 }
catch (
const std::runtime_error&) {
59 tfm::format(std::cerr,
"Error loading %s. Is wallet being used by another process?\n",
name);
64 wallet_instance =
nullptr;
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",
87 return wallet_instance;
94 tfm::format(std::cout,
"Wallet info\n===========\n");
101 tfm::format(std::cout,
"Transactions: %zu\n", wallet_instance->mapWallet.size());
102 tfm::format(std::cout,
"Address Book: %zu\n", wallet_instance->m_address_book.size());
107 if (args.
IsArgSet(
"-format") && command !=
"createfromdump") {
108 tfm::format(std::cerr,
"The -format option can only be used with the \"createfromdump\" command.\n");
111 if (args.
IsArgSet(
"-dumpfile") && command !=
"dump" && command !=
"createfromdump") {
112 tfm::format(std::cerr,
"The -dumpfile option can only be used with the \"dump\" and \"createfromdump\" commands.\n");
115 if (args.
IsArgSet(
"-descriptors") && command !=
"create") {
116 tfm::format(std::cerr,
"The -descriptors option can only be used with the 'create' command.\n");
119 if (command ==
"create" && !args.
IsArgSet(
"-wallet")) {
120 tfm::format(std::cerr,
"Wallet name must be provided when creating a new wallet.\n");
123 const std::string
name = args.
GetArg(
"-wallet",
"");
126 if (command ==
"create") {
134 std::shared_ptr<CWallet> wallet_instance =
MakeWallet(
name, path, options);
135 if (wallet_instance) {
137 wallet_instance->Close();
139 }
else if (command ==
"info") {
142 std::shared_ptr<CWallet> wallet_instance =
MakeWallet(
name, path, options);
143 if (!wallet_instance)
return false;
145 wallet_instance->Close();
146 }
else if (command ==
"salvage") {
149 std::vector<bilingual_str> warnings;
152 for (
const auto& warning : warnings) {
155 if (!
error.empty()) {
161 tfm::format(std::cerr,
"Salvage command is not available as BDB support is not compiled");
164 }
else if (command ==
"dump") {
167 std::shared_ptr<CWallet> wallet_instance =
MakeWallet(
name, path, options);
168 if (!wallet_instance)
return false;
171 if (!ret && !
error.empty()) {
175 tfm::format(std::cout,
"The dumpfile may contain private keys. To ensure the safety of your Bitcoin, do not share the dumpfile.\n");
177 }
else if (command ==
"createfromdump") {
179 std::vector<bilingual_str> warnings;
181 for (
const auto& warning : warnings) {
184 if (!ret && !
error.empty()) {
189 tfm::format(std::cerr,
"Invalid command: %s\n", command);
bool IsWalletFlagSet(uint64_t flag) const override
check if a certain wallet flag is set
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
unsigned int GetKeyPoolSize() const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
fs::path AbsPathJoin(const fs::path &base, const fs::path &path)
Helper function for joining two paths.
bool DumpWallet(CWallet &wallet, bilingual_str &error)
void SetMinVersion(enum WalletFeature, WalletBatch *batch_in=nullptr) override
signify that a particular wallet feature is now used.
bool CreateFromDump(const std::string &name, const fs::path &wallet_path, bilingual_str &error, std::vector< bilingual_str > &warnings)
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
DBErrors
Error statuses for the wallet database.
fs::path GetWalletDir()
Get the path of the wallet directory.
void SetupDescriptorScriptPubKeyMans() EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Create new DescriptorScriptPubKeyMans and add them to the wallet.
virtual std::string Format()=0
LegacyScriptPubKeyMan * GetOrCreateLegacyScriptPubKeyMan()
WalletDatabase & GetDatabase() const override
const std::string & GetName() const
Get a name for this wallet for logging/debugging purposes.
bool TopUpKeyPool(unsigned int kpSize=0)
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
std::optional< DatabaseFormat > require_format
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
RecursiveMutex cs_wallet
Main wallet lock.
bool RecoverDatabaseFile(const fs::path &file_path, bilingual_str &error, std::vector< bilingual_str > &warnings)
bool SetupGeneration(bool force=false) override
Sets up the key generation stuff, i.e.
Indicate that this wallet supports DescriptorScriptPubKeyMan.
bool error(const char *fmt, const Args &... args)
std::unique_ptr< WalletDatabase > MakeDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
bool AddWalletFlags(uint64_t flags)
overwrite all flags by the given uint64_t returns false if unknown, non-tolerable flags are present ...