Merge #10762: [wallet] Remove Wallet dependencies from init.cpp
c7ec524
[wallet] Add dummy wallet init class (John Newbery)49baa4a
[wallet] Use global g_wallet_init_interface to init/destroy the wallet. (John Newbery)caaf972
[wallet] Create wallet init interface. (John Newbery)5fb5421
[wallet] Move wallet init functions into WalletInit class. (John Newbery) Pull request description: This continues the work of #7965. This PR, along with several others, would remove the remaining dependencies from libbitcoin_server.a on libbitcoin_wallet.a. To create the interface, I've just translated all the old init.cpp wallet function calls into an interface class. I've not done any thinking about whether it makes sense to change that interface by combining/splitting those calls. This is a purely internal interface, so there's no problem in changing it later. Tree-SHA512: 32ea57615229c33fd1a7f2f29ebc11bf30337685f7211baffa899823ef74b65dcbf068289c557a161c5afffb51fdc38a2ee8180720371f64d433b12b0615cf3f
This commit is contained in:
commit
6d53663a43
8 changed files with 124 additions and 64 deletions
|
@ -162,6 +162,7 @@ BITCOIN_CORE_H = \
|
|||
validation.h \
|
||||
validationinterface.h \
|
||||
versionbits.h \
|
||||
walletinitinterface.h \
|
||||
wallet/coincontrol.h \
|
||||
wallet/crypter.h \
|
||||
wallet/db.h \
|
||||
|
|
|
@ -18,6 +18,10 @@
|
|||
#include <httpserver.h>
|
||||
#include <httprpc.h>
|
||||
#include <utilstrencodings.h>
|
||||
#if ENABLE_WALLET
|
||||
#include <wallet/init.h>
|
||||
#endif
|
||||
#include <walletinitinterface.h>
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
|
@ -59,6 +63,12 @@ bool AppInit(int argc, char* argv[])
|
|||
{
|
||||
bool fRet = false;
|
||||
|
||||
#if ENABLE_WALLET
|
||||
g_wallet_init_interface.reset(new WalletInit);
|
||||
#else
|
||||
g_wallet_init_interface.reset(new DummyWalletInit);
|
||||
#endif
|
||||
|
||||
//
|
||||
// Parameters
|
||||
//
|
||||
|
|
48
src/init.cpp
48
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,7 @@ void Shutdown()
|
|||
StopREST();
|
||||
StopRPC();
|
||||
StopHTTPServer();
|
||||
#ifdef ENABLE_WALLET
|
||||
FlushWallets();
|
||||
#endif
|
||||
g_wallet_init_interface->Flush();
|
||||
StopMapPort();
|
||||
|
||||
// Because these depend on each-other, we make sure that neither can be
|
||||
|
@ -249,9 +246,7 @@ void Shutdown()
|
|||
pcoinsdbview.reset();
|
||||
pblocktree.reset();
|
||||
}
|
||||
#ifdef ENABLE_WALLET
|
||||
StopWallets();
|
||||
#endif
|
||||
g_wallet_init_interface->Stop();
|
||||
|
||||
#if ENABLE_ZMQ
|
||||
if (pzmqNotificationInterface) {
|
||||
|
@ -271,9 +266,8 @@ void Shutdown()
|
|||
UnregisterAllValidationInterfaces();
|
||||
GetMainSignals().UnregisterBackgroundSignalScheduler();
|
||||
GetMainSignals().UnregisterWithMempoolSignals(mempool);
|
||||
#ifdef ENABLE_WALLET
|
||||
CloseWallets();
|
||||
#endif
|
||||
g_wallet_init_interface->Close();
|
||||
g_wallet_init_interface.reset();
|
||||
globalVerifyHandle.reset();
|
||||
ECC_Stop();
|
||||
LogPrintf("%s: done\n", __func__);
|
||||
|
@ -416,9 +410,7 @@ 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 += GetWalletHelpString(showDebug);
|
||||
#endif
|
||||
strUsage += g_wallet_init_interface->GetHelpString(showDebug);
|
||||
|
||||
#if ENABLE_ZMQ
|
||||
strUsage += HelpMessageGroup(_("ZeroMQ notification options:"));
|
||||
|
@ -1087,10 +1079,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 (!WalletParameterInteraction())
|
||||
return false;
|
||||
#endif
|
||||
if (!g_wallet_init_interface->ParameterInteraction()) return false;
|
||||
|
||||
fIsBareMultisigStd = gArgs.GetBoolArg("-permitbaremultisig", DEFAULT_PERMIT_BAREMULTISIG);
|
||||
fAcceptDatacarrier = gArgs.GetBoolArg("-datacarrier", DEFAULT_ACCEPT_DATACARRIER);
|
||||
|
@ -1256,9 +1245,7 @@ bool AppInitMain()
|
|||
* available in the GUI RPC console even if external calls are disabled.
|
||||
*/
|
||||
RegisterAllCoreRPCCommands(tableRPC);
|
||||
#ifdef ENABLE_WALLET
|
||||
RegisterWalletRPC(tableRPC);
|
||||
#endif
|
||||
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,10 +1262,8 @@ bool AppInitMain()
|
|||
int64_t nStart;
|
||||
|
||||
// ********************************************************* Step 5: verify wallet database integrity
|
||||
#ifdef ENABLE_WALLET
|
||||
if (!VerifyWallets())
|
||||
return false;
|
||||
#endif
|
||||
if (!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
|
||||
|
@ -1596,12 +1581,7 @@ bool AppInitMain()
|
|||
fFeeEstimatesInitialized = true;
|
||||
|
||||
// ********************************************************* Step 8: load wallet
|
||||
#ifdef ENABLE_WALLET
|
||||
if (!OpenWallets())
|
||||
return false;
|
||||
#else
|
||||
LogPrintf("No wallet support compiled in!\n");
|
||||
#endif
|
||||
if (!g_wallet_init_interface->Open()) return false;
|
||||
|
||||
// ********************************************************* Step 9: data directory maintenance
|
||||
|
||||
|
@ -1747,9 +1727,7 @@ bool AppInitMain()
|
|||
SetRPCWarmupFinished();
|
||||
uiInterface.InitMessage(_("Done loading"));
|
||||
|
||||
#ifdef ENABLE_WALLET
|
||||
StartWallets(scheduler);
|
||||
#endif
|
||||
g_wallet_init_interface->Start(scheduler);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -34,8 +34,10 @@
|
|||
#include <warnings.h>
|
||||
|
||||
#ifdef ENABLE_WALLET
|
||||
#include <wallet/init.h>
|
||||
#include <wallet/wallet.h>
|
||||
#endif
|
||||
#include <walletinitinterface.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -677,6 +679,11 @@ 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);
|
||||
#else
|
||||
g_wallet_init_interface.reset(new DummyWalletInit);
|
||||
#endif
|
||||
|
||||
/// 9. Main GUI initialization
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <wallet/wallet.h>
|
||||
#include <wallet/walletutil.h>
|
||||
|
||||
std::string GetWalletHelpString(bool showDebug)
|
||||
std::string WalletInit::GetHelpString(bool showDebug)
|
||||
{
|
||||
std::string strUsage = HelpMessageGroup(_("Wallet options:"));
|
||||
strUsage += HelpMessageOpt("-addresstype", strprintf("What type of addresses to use (\"legacy\", \"p2sh-segwit\", or \"bech32\", default: \"%s\")", FormatOutputType(DEFAULT_ADDRESS_TYPE)));
|
||||
|
@ -56,7 +56,7 @@ std::string GetWalletHelpString(bool showDebug)
|
|||
return strUsage;
|
||||
}
|
||||
|
||||
bool WalletParameterInteraction()
|
||||
bool WalletInit::ParameterInteraction()
|
||||
{
|
||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) {
|
||||
for (const std::string& wallet : gArgs.GetArgs("-wallet")) {
|
||||
|
@ -184,7 +184,7 @@ bool WalletParameterInteraction()
|
|||
return true;
|
||||
}
|
||||
|
||||
void RegisterWalletRPC(CRPCTable &t)
|
||||
void WalletInit::RegisterRPC(CRPCTable &t)
|
||||
{
|
||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) {
|
||||
return;
|
||||
|
@ -193,7 +193,7 @@ void RegisterWalletRPC(CRPCTable &t)
|
|||
RegisterWalletRPCCommands(t);
|
||||
}
|
||||
|
||||
bool VerifyWallets()
|
||||
bool WalletInit::Verify()
|
||||
{
|
||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) {
|
||||
return true;
|
||||
|
@ -268,7 +268,7 @@ bool VerifyWallets()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool OpenWallets()
|
||||
bool WalletInit::Open()
|
||||
{
|
||||
if (gArgs.GetBoolArg("-disablewallet", DEFAULT_DISABLE_WALLET)) {
|
||||
LogPrintf("Wallet disabled!\n");
|
||||
|
@ -286,25 +286,29 @@ bool OpenWallets()
|
|||
return true;
|
||||
}
|
||||
|
||||
void StartWallets(CScheduler& scheduler) {
|
||||
void WalletInit::Start(CScheduler& scheduler)
|
||||
{
|
||||
for (CWalletRef pwallet : vpwallets) {
|
||||
pwallet->postInitProcess(scheduler);
|
||||
}
|
||||
}
|
||||
|
||||
void FlushWallets() {
|
||||
void WalletInit::Flush()
|
||||
{
|
||||
for (CWalletRef pwallet : vpwallets) {
|
||||
pwallet->Flush(false);
|
||||
}
|
||||
}
|
||||
|
||||
void StopWallets() {
|
||||
void WalletInit::Stop()
|
||||
{
|
||||
for (CWalletRef pwallet : vpwallets) {
|
||||
pwallet->Flush(true);
|
||||
}
|
||||
}
|
||||
|
||||
void CloseWallets() {
|
||||
void WalletInit::Close()
|
||||
{
|
||||
for (CWalletRef pwallet : vpwallets) {
|
||||
delete pwallet;
|
||||
}
|
||||
|
|
|
@ -6,38 +6,43 @@
|
|||
#ifndef BITCOIN_WALLET_INIT_H
|
||||
#define BITCOIN_WALLET_INIT_H
|
||||
|
||||
#include <walletinitinterface.h>
|
||||
#include <string>
|
||||
|
||||
class CRPCTable;
|
||||
class CScheduler;
|
||||
|
||||
//! Return the wallets help message.
|
||||
std::string GetWalletHelpString(bool showDebug);
|
||||
class WalletInit : public WalletInitInterface {
|
||||
public:
|
||||
|
||||
//! Wallets parameter interaction
|
||||
bool WalletParameterInteraction();
|
||||
//! Return the wallets help message.
|
||||
std::string GetHelpString(bool showDebug) override;
|
||||
|
||||
//! Register wallet RPCs.
|
||||
void RegisterWalletRPC(CRPCTable &tableRPC);
|
||||
//! Wallets parameter interaction
|
||||
bool ParameterInteraction() 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).
|
||||
bool VerifyWallets();
|
||||
//! Register wallet RPCs.
|
||||
void RegisterRPC(CRPCTable &tableRPC) override;
|
||||
|
||||
//! Load wallet databases.
|
||||
bool OpenWallets();
|
||||
//! 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).
|
||||
bool Verify() override;
|
||||
|
||||
//! Complete startup of wallets.
|
||||
void StartWallets(CScheduler& scheduler);
|
||||
//! Load wallet databases.
|
||||
bool Open() override;
|
||||
|
||||
//! Flush all wallets in preparation for shutdown.
|
||||
void FlushWallets();
|
||||
//! Complete startup of wallets.
|
||||
void Start(CScheduler& scheduler) override;
|
||||
|
||||
//! Stop all wallets. Wallets will be flushed first.
|
||||
void StopWallets();
|
||||
//! Flush all wallets in preparation for shutdown.
|
||||
void Flush() override;
|
||||
|
||||
//! Close all wallets.
|
||||
void CloseWallets();
|
||||
//! Stop all wallets. Wallets will be flushed first.
|
||||
void Stop() override;
|
||||
|
||||
//! Close all wallets.
|
||||
void Close() override;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_WALLET_INIT_H
|
||||
|
|
51
src/walletinitinterface.h
Normal file
51
src/walletinitinterface.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Copyright (c) 2017 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef WALLETINITINTERFACE_H
|
||||
#define WALLETINITINTERFACE_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class CScheduler;
|
||||
class CRPCTable;
|
||||
|
||||
class WalletInitInterface {
|
||||
public:
|
||||
/** Get wallet help string */
|
||||
virtual std::string GetHelpString(bool showDebug) = 0;
|
||||
/** Check wallet parameter interaction */
|
||||
virtual bool ParameterInteraction() = 0;
|
||||
/** Register wallet RPC*/
|
||||
virtual void RegisterRPC(CRPCTable &) = 0;
|
||||
/** Verify wallets */
|
||||
virtual bool Verify() = 0;
|
||||
/** Open wallets*/
|
||||
virtual bool Open() = 0;
|
||||
/** Start wallets*/
|
||||
virtual void Start(CScheduler& scheduler) = 0;
|
||||
/** Flush Wallets*/
|
||||
virtual void Flush() = 0;
|
||||
/** Stop Wallets*/
|
||||
virtual void Stop() = 0;
|
||||
/** Close wallets */
|
||||
virtual void Close() = 0;
|
||||
|
||||
virtual ~WalletInitInterface() {}
|
||||
};
|
||||
|
||||
class DummyWalletInit : public WalletInitInterface {
|
||||
public:
|
||||
|
||||
std::string GetHelpString(bool showDebug) override {return std::string{};}
|
||||
bool ParameterInteraction() override {return true;}
|
||||
void RegisterRPC(CRPCTable &) override {}
|
||||
bool Verify() override {return true;}
|
||||
bool Open() override {return true;}
|
||||
void Start(CScheduler& scheduler) override {}
|
||||
void Flush() override {}
|
||||
void Stop() override {}
|
||||
void Close() override {}
|
||||
};
|
||||
|
||||
#endif // WALLETINITINTERFACE_H
|
Loading…
Add table
Reference in a new issue