aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Newbery <john@johnnewbery.com>2018-02-21 11:38:53 -0500
committerJohn Newbery <john@johnnewbery.com>2018-03-27 14:48:48 -0400
commit49baa4a462193d8d82b51d464740aa5f1114edf1 (patch)
treeeaa2de9eabbd59e6cf28360493aec5d3c4c39e84 /src
parentcaaf9722f3200775cf37aab6b911a7054b2378e7 (diff)
downloadbitcoin-49baa4a462193d8d82b51d464740aa5f1114edf1.tar.xz
[wallet] Use global g_wallet_init_interface to init/destroy the wallet.
This commit creates a global g_wallet_init_interface, which is created in bitcoind and bitcoin-qt. g_wallet_init_interface is used to init and destroy the wallet. This removes the dependency from init.cpp on the wallet library.
Diffstat (limited to 'src')
-rw-r--r--src/bitcoind.cpp8
-rw-r--r--src/init.cpp57
-rw-r--r--src/init.h4
-rw-r--r--src/qt/bitcoin.cpp5
-rw-r--r--src/wallet/init.h21
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