Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/init.cpp
Show All 12 Lines | |||||
#include <wallet/rpcwallet.h> | #include <wallet/rpcwallet.h> | ||||
#include <wallet/wallet.h> | #include <wallet/wallet.h> | ||||
#include <wallet/walletutil.h> | #include <wallet/walletutil.h> | ||||
#include <walletinitinterface.h> | #include <walletinitinterface.h> | ||||
class WalletInit : public WalletInitInterface { | class WalletInit : public WalletInitInterface { | ||||
public: | public: | ||||
//! Return the wallets help message. | //! Return the wallets help message. | ||||
std::string GetHelpString(bool showDebug) override; | std::string GetHelpString(bool showDebug) const override; | ||||
//! Wallets parameter interaction | //! Wallets parameter interaction | ||||
bool ParameterInteraction() override; | bool ParameterInteraction() const override; | ||||
//! Register wallet RPCs. | //! Register wallet RPCs. | ||||
void RegisterRPC(CRPCTable &tableRPC) override; | void RegisterRPC(CRPCTable &tableRPC) const override; | ||||
//! Responsible for reading and validating the -wallet arguments and | //! Responsible for reading and validating the -wallet arguments and | ||||
//! verifying the wallet database. | //! verifying the wallet database. | ||||
// This function will perform salvage on the wallet if requested, as long | // This function will perform salvage on the wallet if requested, as long | ||||
// as only one wallet is being loaded (WalletParameterInteraction forbids | // as only one wallet is being loaded (WalletParameterInteraction forbids | ||||
// -salvagewallet, -zapwallettxes or -upgradewallet with multiwallet). | // -salvagewallet, -zapwallettxes or -upgradewallet with multiwallet). | ||||
bool Verify(const CChainParams &chainParams) override; | bool Verify(const CChainParams &chainParams) const override; | ||||
//! Load wallet databases. | //! Load wallet databases. | ||||
bool Open(const CChainParams &chainParams) override; | bool Open(const CChainParams &chainParams) const override; | ||||
//! Complete startup of wallets. | //! Complete startup of wallets. | ||||
void Start(CScheduler &scheduler) override; | void Start(CScheduler &scheduler) const override; | ||||
//! Flush all wallets in preparation for shutdown. | //! Flush all wallets in preparation for shutdown. | ||||
void Flush() override; | void Flush() const override; | ||||
//! Stop all wallets. Wallets will be flushed first. | //! Stop all wallets. Wallets will be flushed first. | ||||
void Stop() override; | void Stop() const override; | ||||
//! Close all wallets. | //! Close all wallets. | ||||
void Close() override; | void Close() const override; | ||||
}; | }; | ||||
static WalletInit g_wallet_init; | static WalletInit g_wallet_init; | ||||
WalletInitInterface *const g_wallet_init_interface = &g_wallet_init; | WalletInitInterface *const g_wallet_init_interface = &g_wallet_init; | ||||
std::string WalletInit::GetHelpString(bool showDebug) { | std::string WalletInit::GetHelpString(bool showDebug) const { | ||||
std::string strUsage = HelpMessageGroup(_("Wallet options:")); | std::string strUsage = HelpMessageGroup(_("Wallet options:")); | ||||
strUsage += HelpMessageOpt( | strUsage += HelpMessageOpt( | ||||
"-disablewallet", | "-disablewallet", | ||||
_("Do not load the wallet and disable wallet RPC calls")); | _("Do not load the wallet and disable wallet RPC calls")); | ||||
strUsage += HelpMessageOpt( | strUsage += HelpMessageOpt( | ||||
"-keypool=<n>", strprintf(_("Set key pool size to <n> (default: %u)"), | "-keypool=<n>", strprintf(_("Set key pool size to <n> (default: %u)"), | ||||
DEFAULT_KEYPOOL_SIZE)); | DEFAULT_KEYPOOL_SIZE)); | ||||
strUsage += HelpMessageOpt( | strUsage += HelpMessageOpt( | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | if (showDebug) { | ||||
strprintf(_("Wallet will not create transactions that violate " | strprintf(_("Wallet will not create transactions that violate " | ||||
"mempool chain limits (default: %d)"), | "mempool chain limits (default: %d)"), | ||||
DEFAULT_WALLET_REJECT_LONG_CHAINS)); | DEFAULT_WALLET_REJECT_LONG_CHAINS)); | ||||
} | } | ||||
return strUsage; | return strUsage; | ||||
} | } | ||||
bool WalletInit::ParameterInteraction() { | bool WalletInit::ParameterInteraction() const { | ||||
CFeeRate minRelayTxFee = GetConfig().GetMinFeePerKB(); | CFeeRate minRelayTxFee = GetConfig().GetMinFeePerKB(); | ||||
gArgs.SoftSetArg("-wallet", DEFAULT_WALLET_DAT); | gArgs.SoftSetArg("-wallet", DEFAULT_WALLET_DAT); | ||||
const bool is_multiwallet = gArgs.GetArgs("-wallet").size() > 1; | const bool is_multiwallet = gArgs.GetArgs("-wallet").size() > 1; | ||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | ||||
return true; | return true; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Lines | bool WalletInit::ParameterInteraction() const { | ||||
} | } | ||||
bSpendZeroConfChange = | bSpendZeroConfChange = | ||||
gArgs.GetBoolArg("-spendzeroconfchange", DEFAULT_SPEND_ZEROCONF_CHANGE); | gArgs.GetBoolArg("-spendzeroconfchange", DEFAULT_SPEND_ZEROCONF_CHANGE); | ||||
return true; | return true; | ||||
} | } | ||||
void WalletInit::RegisterRPC(CRPCTable &t) { | void WalletInit::RegisterRPC(CRPCTable &t) const { | ||||
if (gArgs.GetBoolArg("-disablewallet", false)) { | if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | ||||
return; | return; | ||||
} | } | ||||
RegisterWalletRPCCommands(t); | RegisterWalletRPCCommands(t); | ||||
} | } | ||||
bool WalletInit::Verify(const CChainParams &chainParams) { | bool WalletInit::Verify(const CChainParams &chainParams) const { | ||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | ||||
return true; | return true; | ||||
} | } | ||||
if (gArgs.IsArgSet("-walletdir")) { | if (gArgs.IsArgSet("-walletdir")) { | ||||
fs::path wallet_dir = gArgs.GetArg("-walletdir", ""); | fs::path wallet_dir = gArgs.GetArg("-walletdir", ""); | ||||
if (!fs::exists(wallet_dir)) { | if (!fs::exists(wallet_dir)) { | ||||
return InitError( | return InitError( | ||||
▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | for (const std::string &walletFile : gArgs.GetArgs("-wallet")) { | ||||
InitError(strError); | InitError(strError); | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
bool WalletInit::Open(const CChainParams &chainParams) { | bool WalletInit::Open(const CChainParams &chainParams) const { | ||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) { | ||||
LogPrintf("Wallet disabled!\n"); | LogPrintf("Wallet disabled!\n"); | ||||
return true; | return true; | ||||
} | } | ||||
for (const std::string &walletFile : gArgs.GetArgs("-wallet")) { | for (const std::string &walletFile : gArgs.GetArgs("-wallet")) { | ||||
CWallet *const pwallet = | CWallet *const pwallet = | ||||
CWallet::CreateWalletFromFile(chainParams, walletFile); | CWallet::CreateWalletFromFile(chainParams, walletFile); | ||||
if (!pwallet) { | if (!pwallet) { | ||||
return false; | return false; | ||||
} | } | ||||
vpwallets.push_back(pwallet); | vpwallets.push_back(pwallet); | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
void WalletInit::Start(CScheduler &scheduler) { | void WalletInit::Start(CScheduler &scheduler) const { | ||||
for (CWalletRef pwallet : vpwallets) { | for (CWalletRef pwallet : vpwallets) { | ||||
pwallet->postInitProcess(scheduler); | pwallet->postInitProcess(scheduler); | ||||
} | } | ||||
} | } | ||||
void WalletInit::Flush() { | void WalletInit::Flush() const { | ||||
for (CWalletRef pwallet : vpwallets) { | for (CWalletRef pwallet : vpwallets) { | ||||
pwallet->Flush(false); | pwallet->Flush(false); | ||||
} | } | ||||
} | } | ||||
void WalletInit::Stop() { | void WalletInit::Stop() const { | ||||
for (CWalletRef pwallet : vpwallets) { | for (CWalletRef pwallet : vpwallets) { | ||||
pwallet->Flush(true); | pwallet->Flush(true); | ||||
} | } | ||||
} | } | ||||
void WalletInit::Close() { | void WalletInit::Close() const { | ||||
for (CWalletRef pwallet : vpwallets) { | for (CWalletRef pwallet : vpwallets) { | ||||
delete pwallet; | delete pwallet; | ||||
} | } | ||||
vpwallets.clear(); | vpwallets.clear(); | ||||
} | } |