mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-23 23:27:21 +01:00
6d6a7a8403
gui: Fix duplicate wallet showing up (João Barbosa)81ea66c30e
Drop signal CClientUIInterface::LoadWallet (Russell Yanofsky) Pull request description: This PR includes 2 fixes: - prevent GUI LoadWallet handlers from crashing on startup when multiple handlers are attached, because the first handler takes ownership of the wallet unique pointer. Now every handler will receive its own unique pointer; - prevent showing a wallet twice in the GUI on startup due to a race with `loadwallet`. Fixes #16937 ACKs for top commit: fjahr: code review ACK6d6a7a8403
ryanofsky: Code review ACK6d6a7a8403
. No changes since last ACK other than rebase due to #17070 kallewoof: Code review ACK6d6a7a8403
Tree-SHA512: 7f0658c9011f81dfa176a094c2263448ee1d14fda7dc94e8b55ee9c8b81538bd2d1e4bf8a8dbfcd029ebfc9feb6d3cda9dee3f911122df0a4b1e0ca75f653ba4
98 lines
2.9 KiB
C++
98 lines
2.9 KiB
C++
// Copyright (c) 2018-2019 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <util/system.h>
|
|
#include <walletinitinterface.h>
|
|
#include <support/allocators/secure.h>
|
|
|
|
class CWallet;
|
|
enum class WalletCreationStatus;
|
|
|
|
namespace interfaces {
|
|
class Chain;
|
|
class Handler;
|
|
class Wallet;
|
|
}
|
|
|
|
class DummyWalletInit : public WalletInitInterface {
|
|
public:
|
|
|
|
bool HasWalletSupport() const override {return false;}
|
|
void AddWalletOptions() const override;
|
|
bool ParameterInteraction() const override {return true;}
|
|
void Construct(NodeContext& node) const override {LogPrintf("No wallet support compiled in!\n");}
|
|
};
|
|
|
|
void DummyWalletInit::AddWalletOptions() const
|
|
{
|
|
gArgs.AddHiddenArgs({
|
|
"-addresstype",
|
|
"-avoidpartialspends",
|
|
"-changetype",
|
|
"-disablewallet",
|
|
"-discardfee=<amt>",
|
|
"-fallbackfee=<amt>",
|
|
"-keypool=<n>",
|
|
"-maxtxfee=<amt>",
|
|
"-mintxfee=<amt>",
|
|
"-paytxfee=<amt>",
|
|
"-rescan",
|
|
"-salvagewallet",
|
|
"-spendzeroconfchange",
|
|
"-txconfirmtarget=<n>",
|
|
"-upgradewallet",
|
|
"-wallet=<path>",
|
|
"-walletbroadcast",
|
|
"-walletdir=<dir>",
|
|
"-walletnotify=<cmd>",
|
|
"-walletrbf",
|
|
"-zapwallettxes=<mode>",
|
|
"-dblogsize=<n>",
|
|
"-flushwallet",
|
|
"-privdb",
|
|
"-walletrejectlongchains",
|
|
});
|
|
}
|
|
|
|
const WalletInitInterface& g_wallet_init_interface = DummyWalletInit();
|
|
|
|
fs::path GetWalletDir()
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
std::vector<fs::path> ListWalletDir()
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
std::vector<std::shared_ptr<CWallet>> GetWallets()
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, std::string& error, std::vector<std::string>& warnings)
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
WalletCreationStatus CreateWallet(interfaces::Chain& chain, const SecureString& passphrase, uint64_t wallet_creation_flags, const std::string& name, std::string& error, std::vector<std::string>& warnings, std::shared_ptr<CWallet>& result)
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
using LoadWalletFn = std::function<void(std::unique_ptr<interfaces::Wallet> wallet)>;
|
|
std::unique_ptr<interfaces::Handler> HandleLoadWallet(LoadWalletFn load_wallet)
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
namespace interfaces {
|
|
|
|
std::unique_ptr<Wallet> MakeWallet(const std::shared_ptr<CWallet>& wallet)
|
|
{
|
|
throw std::logic_error("Wallet function called in non-wallet build.");
|
|
}
|
|
|
|
} // namespace interfaces
|