Bitcoin Core  26.1.0
P2P Digital Currency
node.h
Go to the documentation of this file.
1 // Copyright (c) 2018-2022 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_INTERFACES_NODE_H
6 #define BITCOIN_INTERFACES_NODE_H
7 
8 #include <common/settings.h>
9 #include <consensus/amount.h> // For CAmount
10 #include <net.h> // For NodeId
11 #include <net_types.h> // For banmap_t
12 #include <netaddress.h> // For Network
13 #include <netbase.h> // For ConnectionDirection
14 #include <support/allocators/secure.h> // For SecureString
15 #include <util/translation.h>
16 
17 #include <functional>
18 #include <memory>
19 #include <stddef.h>
20 #include <stdint.h>
21 #include <string>
22 #include <tuple>
23 #include <vector>
24 
25 class BanMan;
26 class CFeeRate;
27 class CNodeStats;
28 class Coin;
29 class RPCTimerInterface;
30 class UniValue;
31 class Proxy;
32 enum class SynchronizationState;
33 enum class TransactionError;
34 struct CNodeStateStats;
35 struct bilingual_str;
36 namespace node {
37 struct NodeContext;
38 } // namespace node
39 namespace wallet {
40 class CCoinControl;
41 } // namespace wallet
42 
43 namespace interfaces {
44 class Handler;
45 class WalletLoader;
46 struct BlockTip;
47 
50 {
52  int64_t block_time;
54  int64_t header_time;
56 };
57 
60 {
61 public:
62  virtual ~ExternalSigner() {};
63 
65  virtual std::string getName() = 0;
66 };
67 
69 class Node
70 {
71 public:
72  virtual ~Node() {}
73 
75  virtual void initLogging() = 0;
76 
78  virtual void initParameterInteraction() = 0;
79 
81  virtual bilingual_str getWarnings() = 0;
82 
84  virtual int getExitStatus() = 0;
85 
86  // Get log flags.
87  virtual uint32_t getLogCategories() = 0;
88 
90  virtual bool baseInitialize() = 0;
91 
93  virtual bool appInitMain(interfaces::BlockAndHeaderTipInfo* tip_info = nullptr) = 0;
94 
96  virtual void appShutdown() = 0;
97 
99  virtual void startShutdown() = 0;
100 
102  virtual bool shutdownRequested() = 0;
103 
106  virtual bool isSettingIgnored(const std::string& name) = 0;
107 
109  virtual common::SettingsValue getPersistentSetting(const std::string& name) = 0;
110 
112  virtual void updateRwSetting(const std::string& name, const common::SettingsValue& value) = 0;
113 
116  virtual void forceSetting(const std::string& name, const common::SettingsValue& value) = 0;
117 
120  virtual void resetSettings() = 0;
121 
123  virtual void mapPort(bool use_upnp, bool use_natpmp) = 0;
124 
126  virtual bool getProxy(Network net, Proxy& proxy_info) = 0;
127 
129  virtual size_t getNodeCount(ConnectionDirection flags) = 0;
130 
132  using NodesStats = std::vector<std::tuple<CNodeStats, bool, CNodeStateStats>>;
133  virtual bool getNodesStats(NodesStats& stats) = 0;
134 
136  virtual bool getBanned(banmap_t& banmap) = 0;
137 
139  virtual bool ban(const CNetAddr& net_addr, int64_t ban_time_offset) = 0;
140 
142  virtual bool unban(const CSubNet& ip) = 0;
143 
145  virtual bool disconnectByAddress(const CNetAddr& net_addr) = 0;
146 
148  virtual bool disconnectById(NodeId id) = 0;
149 
151  virtual std::vector<std::unique_ptr<ExternalSigner>> listExternalSigners() = 0;
152 
154  virtual int64_t getTotalBytesRecv() = 0;
155 
157  virtual int64_t getTotalBytesSent() = 0;
158 
160  virtual size_t getMempoolSize() = 0;
161 
163  virtual size_t getMempoolDynamicUsage() = 0;
164 
166  virtual bool getHeaderTip(int& height, int64_t& block_time) = 0;
167 
169  virtual int getNumBlocks() = 0;
170 
172  virtual uint256 getBestBlockHash() = 0;
173 
175  virtual int64_t getLastBlockTime() = 0;
176 
178  virtual double getVerificationProgress() = 0;
179 
181  virtual bool isInitialBlockDownload() = 0;
182 
184  virtual bool isLoadingBlocks() = 0;
185 
187  virtual void setNetworkActive(bool active) = 0;
188 
190  virtual bool getNetworkActive() = 0;
191 
193  virtual CFeeRate getDustRelayFee() = 0;
194 
196  virtual UniValue executeRpc(const std::string& command, const UniValue& params, const std::string& uri) = 0;
197 
199  virtual std::vector<std::string> listRpcCommands() = 0;
200 
202  virtual void rpcSetTimerInterfaceIfUnset(RPCTimerInterface* iface) = 0;
203 
205  virtual void rpcUnsetTimerInterface(RPCTimerInterface* iface) = 0;
206 
208  virtual bool getUnspentOutput(const COutPoint& output, Coin& coin) = 0;
209 
211  virtual TransactionError broadcastTransaction(CTransactionRef tx, CAmount max_tx_fee, std::string& err_string) = 0;
212 
214  virtual WalletLoader& walletLoader() = 0;
215 
217  using InitMessageFn = std::function<void(const std::string& message)>;
218  virtual std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn) = 0;
219 
221  using MessageBoxFn =
222  std::function<bool(const bilingual_str& message, const std::string& caption, unsigned int style)>;
223  virtual std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn) = 0;
224 
226  using QuestionFn = std::function<bool(const bilingual_str& message,
227  const std::string& non_interactive_message,
228  const std::string& caption,
229  unsigned int style)>;
230  virtual std::unique_ptr<Handler> handleQuestion(QuestionFn fn) = 0;
231 
233  using ShowProgressFn = std::function<void(const std::string& title, int progress, bool resume_possible)>;
234  virtual std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn) = 0;
235 
237  using InitWalletFn = std::function<void()>;
238  virtual std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn) = 0;
239 
241  using NotifyNumConnectionsChangedFn = std::function<void(int new_num_connections)>;
242  virtual std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn) = 0;
243 
245  using NotifyNetworkActiveChangedFn = std::function<void(bool network_active)>;
246  virtual std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn) = 0;
247 
249  using NotifyAlertChangedFn = std::function<void()>;
250  virtual std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn) = 0;
251 
253  using BannedListChangedFn = std::function<void()>;
254  virtual std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn) = 0;
255 
257  using NotifyBlockTipFn =
258  std::function<void(SynchronizationState, interfaces::BlockTip tip, double verification_progress)>;
259  virtual std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn) = 0;
260 
262  using NotifyHeaderTipFn =
263  std::function<void(SynchronizationState, interfaces::BlockTip tip, bool presync)>;
264  virtual std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn) = 0;
265 
268  virtual node::NodeContext* context() { return nullptr; }
270 };
271 
273 std::unique_ptr<Node> MakeNode(node::NodeContext& context);
274 
276 struct BlockTip {
278  int64_t block_time;
280 };
281 
282 } // namespace interfaces
283 
284 #endif // BITCOIN_INTERFACES_NODE_H
std::shared_ptr< const CTransaction > CTransactionRef
Definition: transaction.h:421
virtual common::SettingsValue getPersistentSetting(const std::string &name)=0
Return setting value from <datadir>/settings.json or bitcoin.conf.
virtual std::unique_ptr< Handler > handleNotifyHeaderTip(NotifyHeaderTipFn fn)=0
std::vector< std::tuple< CNodeStats, bool, CNodeStateStats > > NodesStats
Get stats for connected nodes.
Definition: node.h:132
virtual void resetSettings()=0
Clear all settings in <datadir>/settings.json and store a backup of previous settings in <datadir>/se...
int64_t block_time
Definition: node.h:278
RPC timer "driver".
Definition: server.h:59
Block tip (could be a header or not, depends on the subscribed signal).
Definition: node.h:276
virtual bool isInitialBlockDownload()=0
Is initial block download.
SynchronizationState
Current sync state passed to tip changed callbacks.
Definition: validation.h:87
Definition: banman.h:58
virtual bool getNetworkActive()=0
Get network active.
virtual void initLogging()=0
Init logging.
A UTXO entry.
Definition: coins.h:31
Bilingual messages:
Definition: translation.h:18
virtual TransactionError broadcastTransaction(CTransactionRef tx, CAmount max_tx_fee, std::string &err_string)=0
Broadcast transaction.
virtual double getVerificationProgress()=0
Get verification progress.
virtual size_t getMempoolDynamicUsage()=0
Get mempool dynamic usage.
virtual bool baseInitialize()=0
Initialize app dependencies.
virtual bool unban(const CSubNet &ip)=0
Unban node.
virtual void startShutdown()=0
Start shutdown.
virtual UniValue executeRpc(const std::string &command, const UniValue &params, const std::string &uri)=0
Execute rpc command.
virtual void rpcUnsetTimerInterface(RPCTimerInterface *iface)=0
Unset RPC timer interface.
virtual int64_t getTotalBytesRecv()=0
Get total bytes recv.
std::function< void(bool network_active)> NotifyNetworkActiveChangedFn
Register handler for network active messages.
Definition: node.h:245
virtual size_t getMempoolSize()=0
Get mempool size.
virtual uint32_t getLogCategories()=0
std::function< void(SynchronizationState, interfaces::BlockTip tip, double verification_progress)> NotifyBlockTipFn
Register handler for block tip messages.
Definition: node.h:258
virtual ~ExternalSigner()
Definition: node.h:62
std::unique_ptr< Node > MakeNode(node::NodeContext &context)
Return implementation of Node interface.
Definition: interfaces.cpp:827
virtual std::unique_ptr< Handler > handleNotifyBlockTip(NotifyBlockTipFn fn)=0
virtual CFeeRate getDustRelayFee()=0
Get dust relay fee.
virtual bool ban(const CNetAddr &net_addr, int64_t ban_time_offset)=0
Ban node.
virtual std::string getName()=0
Get signer display name.
virtual size_t getNodeCount(ConnectionDirection flags)=0
Get number of connections.
virtual void rpcSetTimerInterfaceIfUnset(RPCTimerInterface *iface)=0
Set RPC timer interface if unset.
virtual std::unique_ptr< Handler > handleMessageBox(MessageBoxFn fn)=0
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
virtual std::unique_ptr< Handler > handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn)=0
NodeContext struct containing references to chain state and connection state.
Definition: context.h:48
std::function< void(SynchronizationState, interfaces::BlockTip tip, bool presync)> NotifyHeaderTipFn
Register handler for header tip messages.
Definition: node.h:263
std::function< void()> NotifyAlertChangedFn
Register handler for notify alert messages.
Definition: node.h:249
virtual int getExitStatus()=0
Get exit status.
virtual bool isLoadingBlocks()=0
Is loading blocks.
const char * name
Definition: rest.cpp:45
virtual bilingual_str getWarnings()=0
Get warnings.
virtual void updateRwSetting(const std::string &name, const common::SettingsValue &value)=0
Update a setting in <datadir>/settings.json.
virtual std::unique_ptr< Handler > handleShowProgress(ShowProgressFn fn)=0
virtual bool getProxy(Network net, Proxy &proxy_info)=0
Get proxy.
WalletContext context
virtual ~Node()
Definition: node.h:72
virtual bool disconnectByAddress(const CNetAddr &net_addr)=0
Disconnect node by address.
Network
A network type.
Definition: netaddress.h:36
static CService ip(uint32_t i)
Block and header tip information.
Definition: node.h:49
int64_t NodeId
Definition: net.h:99
virtual std::unique_ptr< Handler > handleBannedListChanged(BannedListChangedFn fn)=0
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:35
virtual bool isSettingIgnored(const std::string &name)=0
Return whether a particular setting in <datadir>/settings.json is or would be ignored because it is a...
Wallet chain client that in addition to having chain client methods for starting up, shutting down, and registering RPCs, also has additional methods (called by the GUI) to load and create wallets.
Definition: wallet.h:322
External signer interface used by the GUI.
Definition: node.h:59
virtual bool shutdownRequested()=0
Return whether shutdown was requested.
std::function< void(const std::string &message)> InitMessageFn
Register handler for init messages.
Definition: node.h:217
Definition: init.h:25
std::function< void()> BannedListChangedFn
Register handler for ban list messages.
Definition: node.h:253
Definition: netbase.h:49
int flags
Definition: bitcoin-tx.cpp:528
virtual void initParameterInteraction()=0
Init parameter interaction.
std::function< void(int new_num_connections)> NotifyNumConnectionsChangedFn
Register handler for number of connections changed messages.
Definition: node.h:241
Network address.
Definition: netaddress.h:115
256-bit opaque blob.
Definition: uint256.h:106
virtual int64_t getLastBlockTime()=0
Get last block time.
virtual void appShutdown()=0
Stop node.
virtual std::unique_ptr< Handler > handleQuestion(QuestionFn fn)=0
const auto command
std::function< bool(const bilingual_str &message, const std::string &non_interactive_message, const std::string &caption, unsigned int style)> QuestionFn
Register handler for question messages.
Definition: node.h:229
virtual uint256 getBestBlockHash()=0
Get best block hash.
virtual std::vector< std::unique_ptr< ExternalSigner > > listExternalSigners()=0
Return list of external signers (attached devices which can sign transactions).
virtual WalletLoader & walletLoader()=0
Get wallet loader.
virtual std::vector< std::string > listRpcCommands()=0
List rpc commands.
virtual bool getHeaderTip(int &height, int64_t &block_time)=0
Get header tip height and time.
std::function< void()> InitWalletFn
Register handler for wallet loader constructed messages.
Definition: node.h:237
virtual bool getNodesStats(NodesStats &stats)=0
TransactionError
Definition: error.h:22
Fee rate in satoshis per kilovirtualbyte: CAmount / kvB.
Definition: feerate.h:32
virtual bool getBanned(banmap_t &banmap)=0
Get ban map entries.
std::function< void(const std::string &title, int progress, bool resume_possible)> ShowProgressFn
Register handler for progress messages.
Definition: node.h:233
virtual std::unique_ptr< Handler > handleInitWallet(InitWalletFn fn)=0
std::map< CSubNet, CBanEntry > banmap_t
Definition: net_types.h:41
virtual int getNumBlocks()=0
Get num blocks.
virtual std::unique_ptr< Handler > handleNotifyAlertChanged(NotifyAlertChangedFn fn)=0
virtual void setContext(node::NodeContext *context)
Definition: node.h:269
std::function< bool(const bilingual_str &message, const std::string &caption, unsigned int style)> MessageBoxFn
Register handler for message box messages.
Definition: node.h:222
virtual void forceSetting(const std::string &name, const common::SettingsValue &value)=0
Force a setting value to be applied, overriding any other configuration source, but not being persist...
virtual bool disconnectById(NodeId id)=0
Disconnect node by id.
virtual std::unique_ptr< Handler > handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn)=0
ConnectionDirection
Definition: netbase.h:33
virtual int64_t getTotalBytesSent()=0
Get total bytes sent.
virtual void setNetworkActive(bool active)=0
Set network active.
virtual void mapPort(bool use_upnp, bool use_natpmp)=0
Map port.
Top-level interface for a bitcoin node (bitcoind process).
Definition: node.h:69
uint256 block_hash
Definition: node.h:279
virtual bool getUnspentOutput(const COutPoint &output, Coin &coin)=0
Get unspent outputs associated with a transaction.
virtual bool appInitMain(interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)=0
Start node.
virtual node::NodeContext * context()
Get and set internal node context.
Definition: node.h:268
virtual std::unique_ptr< Handler > handleInitMessage(InitMessageFn fn)=0