mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-20 20:49:50 +01:00
Introduce Mining interface
Start out with a single method isTestChain() that's used by the getblocktemplate RPC.
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include <addrman.h>
|
||||
#include <banman.h>
|
||||
#include <interfaces/chain.h>
|
||||
#include <interfaces/mining.h>
|
||||
#include <kernel/context.h>
|
||||
#include <key.h>
|
||||
#include <net.h>
|
||||
|
||||
@@ -27,6 +27,7 @@ class PeerManager;
|
||||
namespace interfaces {
|
||||
class Chain;
|
||||
class ChainClient;
|
||||
class Mining;
|
||||
class Init;
|
||||
class WalletLoader;
|
||||
} // namespace interfaces
|
||||
@@ -74,6 +75,7 @@ struct NodeContext {
|
||||
std::vector<std::unique_ptr<interfaces::ChainClient>> chain_clients;
|
||||
//! Reference to chain client that should used to load or create wallets
|
||||
//! opened by the gui.
|
||||
std::unique_ptr<interfaces::Mining> mining;
|
||||
interfaces::WalletLoader* wallet_loader{nullptr};
|
||||
std::unique_ptr<CScheduler> scheduler;
|
||||
std::function<void()> rpc_interruption_point = [] {};
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <init.h>
|
||||
#include <interfaces/chain.h>
|
||||
#include <interfaces/handler.h>
|
||||
#include <interfaces/mining.h>
|
||||
#include <interfaces/node.h>
|
||||
#include <interfaces/wallet.h>
|
||||
#include <kernel/chain.h>
|
||||
@@ -69,6 +70,7 @@ using interfaces::Chain;
|
||||
using interfaces::FoundBlock;
|
||||
using interfaces::Handler;
|
||||
using interfaces::MakeSignalHandler;
|
||||
using interfaces::Mining;
|
||||
using interfaces::Node;
|
||||
using interfaces::WalletLoader;
|
||||
using util::Join;
|
||||
@@ -831,10 +833,26 @@ public:
|
||||
ValidationSignals& validation_signals() { return *Assert(m_node.validation_signals); }
|
||||
NodeContext& m_node;
|
||||
};
|
||||
|
||||
class MinerImpl : public Mining
|
||||
{
|
||||
public:
|
||||
explicit MinerImpl(NodeContext& node) : m_node(node) {}
|
||||
|
||||
bool isTestChain() override
|
||||
{
|
||||
return chainman().GetParams().IsTestChain();
|
||||
}
|
||||
|
||||
NodeContext* context() override { return &m_node; }
|
||||
ChainstateManager& chainman() { return *Assert(m_node.chainman); }
|
||||
NodeContext& m_node;
|
||||
};
|
||||
} // namespace
|
||||
} // namespace node
|
||||
|
||||
namespace interfaces {
|
||||
std::unique_ptr<Node> MakeNode(node::NodeContext& context) { return std::make_unique<node::NodeImpl>(context); }
|
||||
std::unique_ptr<Chain> MakeChain(node::NodeContext& context) { return std::make_unique<node::ChainImpl>(context); }
|
||||
std::unique_ptr<Mining> MakeMining(node::NodeContext& context) { return std::make_unique<node::MinerImpl>(context); }
|
||||
} // namespace interfaces
|
||||
|
||||
Reference in New Issue
Block a user