diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bitcoind.cpp | 8 | ||||
-rw-r--r-- | src/init.cpp | 57 | ||||
-rw-r--r-- | src/init.h | 4 | ||||
-rw-r--r-- | src/qt/bitcoin.cpp | 5 | ||||
-rw-r--r-- | src/wallet/init.h | 21 |
5 files changed, 53 insertions, 42 deletions
diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index d3eb60725f..a849683eb0 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -18,6 +18,10 @@ #include <httpserver.h> #include <httprpc.h> #include <utilstrencodings.h> +#if ENABLE_WALLET +#include <wallet/init.h> +#include <walletinitinterface.h> +#endif #include <boost/thread.hpp> @@ -59,6 +63,10 @@ bool AppInit(int argc, char* argv[]) { bool fRet = false; +#if ENABLE_WALLET + g_wallet_init_interface.reset(new WalletInit); +#endif + // // Parameters // diff --git a/src/init.cpp b/src/init.cpp index 8397932951..cee1eeaf17 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -43,10 +43,8 @@ #include <util.h> #include <utilmoneystr.h> #include <validationinterface.h> -#ifdef ENABLE_WALLET -#include <wallet/init.h> -#endif #include <warnings.h> +#include <walletinitinterface.h> #include <stdint.h> #include <stdio.h> #include <memory> @@ -74,6 +72,7 @@ static const bool DEFAULT_STOPAFTERBLOCKIMPORT = false; std::unique_ptr<CConnman> g_connman; std::unique_ptr<PeerLogicValidation> peerLogic; +std::unique_ptr<WalletInitInterface> g_wallet_init_interface; #if ENABLE_ZMQ static CZMQNotificationInterface* pzmqNotificationInterface = nullptr; @@ -189,9 +188,9 @@ void Shutdown() StopREST(); StopRPC(); StopHTTPServer(); -#ifdef ENABLE_WALLET - WalletInit::Flush(); -#endif + if (g_wallet_init_interface) { + g_wallet_init_interface->Flush(); + } StopMapPort(); // Because these depend on each-other, we make sure that neither can be @@ -249,9 +248,9 @@ void Shutdown() pcoinsdbview.reset(); pblocktree.reset(); } -#ifdef ENABLE_WALLET - WalletInit::Stop(); -#endif + if (g_wallet_init_interface) { + g_wallet_init_interface->Stop(); + } #if ENABLE_ZMQ if (pzmqNotificationInterface) { @@ -271,9 +270,10 @@ void Shutdown() UnregisterAllValidationInterfaces(); GetMainSignals().UnregisterBackgroundSignalScheduler(); GetMainSignals().UnregisterWithMempoolSignals(mempool); -#ifdef ENABLE_WALLET - WalletInit::Close(); -#endif + if (g_wallet_init_interface) { + g_wallet_init_interface->Close(); + } + g_wallet_init_interface.reset(); globalVerifyHandle.reset(); ECC_Stop(); LogPrintf("%s: done\n", __func__); @@ -415,9 +415,9 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-whitelist=<IP address or network>", _("Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or CIDR notated network (e.g. 1.2.3.0/24). Can be specified multiple times.") + " " + _("Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway")); -#ifdef ENABLE_WALLET - strUsage += WalletInit::GetHelpString(showDebug); -#endif + if (g_wallet_init_interface) { + strUsage += g_wallet_init_interface->GetHelpString(showDebug); + } #if ENABLE_ZMQ strUsage += HelpMessageGroup(_("ZeroMQ notification options:")); @@ -1091,9 +1091,7 @@ bool AppInitParameterInteraction() return InitError(strprintf("acceptnonstdtxn is not currently supported for %s chain", chainparams.NetworkIDString())); nBytesPerSigOp = gArgs.GetArg("-bytespersigop", nBytesPerSigOp); -#ifdef ENABLE_WALLET - if (!WalletInit::ParameterInteraction()) return false; -#endif + if (g_wallet_init_interface && !g_wallet_init_interface->ParameterInteraction()) return false; fIsBareMultisigStd = gArgs.GetBoolArg("-permitbaremultisig", DEFAULT_PERMIT_BAREMULTISIG); fAcceptDatacarrier = gArgs.GetBoolArg("-datacarrier", DEFAULT_ACCEPT_DATACARRIER); @@ -1256,9 +1254,9 @@ bool AppInitMain() * available in the GUI RPC console even if external calls are disabled. */ RegisterAllCoreRPCCommands(tableRPC); -#ifdef ENABLE_WALLET - WalletInit::RegisterRPC(tableRPC); -#endif + if (g_wallet_init_interface) { + g_wallet_init_interface->RegisterRPC(tableRPC); + } /* Start the RPC server already. It will be started in "warmup" mode * and not really process calls already (but it will signify connections @@ -1275,9 +1273,8 @@ bool AppInitMain() int64_t nStart; // ********************************************************* Step 5: verify wallet database integrity -#ifdef ENABLE_WALLET - if (!WalletInit::Verify()) return false; -#endif + if (g_wallet_init_interface && !g_wallet_init_interface->Verify()) return false; + // ********************************************************* Step 6: network initialization // Note that we absolutely cannot open any actual connections // until the very end ("start node") as the UTXO/block state @@ -1595,11 +1592,7 @@ bool AppInitMain() fFeeEstimatesInitialized = true; // ********************************************************* Step 8: load wallet -#ifdef ENABLE_WALLET - if (!WalletInit::Open()) return false; -#else - LogPrintf("No wallet support compiled in!\n"); -#endif + if (g_wallet_init_interface && !g_wallet_init_interface->Open()) return false; // ********************************************************* Step 9: data directory maintenance @@ -1745,9 +1738,9 @@ bool AppInitMain() SetRPCWarmupFinished(); uiInterface.InitMessage(_("Done loading")); -#ifdef ENABLE_WALLET - WalletInit::Start(scheduler); -#endif + if (g_wallet_init_interface) { + g_wallet_init_interface->Start(scheduler); + } return true; } diff --git a/src/init.h b/src/init.h index 33f97a55a5..11a37bef4e 100644 --- a/src/init.h +++ b/src/init.h @@ -6,11 +6,15 @@ #ifndef BITCOIN_INIT_H #define BITCOIN_INIT_H +#include <memory> #include <string> class CScheduler; class CWallet; +class WalletInitInterface; +extern std::unique_ptr<WalletInitInterface> g_wallet_init_interface; + namespace boost { class thread_group; diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 06e1f1a37c..e6a2af5f6c 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -33,7 +33,9 @@ #include <warnings.h> #ifdef ENABLE_WALLET +#include <wallet/init.h> #include <wallet/wallet.h> +#include <walletinitinterface.h> #endif #include <stdint.h> @@ -669,6 +671,9 @@ int main(int argc, char *argv[]) // Start up the payment server early, too, so impatient users that click on // bitcoin: links repeatedly have their payment requests routed to this process: app.createPaymentServer(); + + // Hook up the wallet init interface + g_wallet_init_interface.reset(new WalletInit); #endif /// 9. Main GUI initialization diff --git a/src/wallet/init.h b/src/wallet/init.h index e6c9ffb05b..f8be90d3e3 100644 --- a/src/wallet/init.h +++ b/src/wallet/init.h @@ -6,42 +6,43 @@ #ifndef BITCOIN_WALLET_INIT_H #define BITCOIN_WALLET_INIT_H +#include <walletinitinterface.h> #include <string> class CRPCTable; class CScheduler; -class WalletInit { +class WalletInit : public WalletInitInterface { public: //! Return the wallets help message. - static std::string GetHelpString(bool showDebug); + std::string GetHelpString(bool showDebug) override; //! Wallets parameter interaction - static bool ParameterInteraction(); + bool ParameterInteraction() override; //! Register wallet RPCs. - static void RegisterRPC(CRPCTable &tableRPC); + void RegisterRPC(CRPCTable &tableRPC) override; //! Responsible for reading and validating the -wallet arguments and verifying the wallet database. // This function will perform salvage on the wallet if requested, as long as only one wallet is // being loaded (WalletParameterInteraction forbids -salvagewallet, -zapwallettxes or -upgradewallet with multiwallet). - static bool Verify(); + bool Verify() override; //! Load wallet databases. - static bool Open(); + bool Open() override; //! Complete startup of wallets. - static void Start(CScheduler& scheduler); + void Start(CScheduler& scheduler) override; //! Flush all wallets in preparation for shutdown. - static void Flush(); + void Flush() override; //! Stop all wallets. Wallets will be flushed first. - static void Stop(); + void Stop() override; //! Close all wallets. - static void Close(); + void Close() override; }; #endif // BITCOIN_WALLET_INIT_H |