Bitcoin Core  28.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 struct CNodeStateStats;
34 struct bilingual_str;
35 namespace node {
36 enum class TransactionError;
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() = default;
63 
65  virtual std::string getName() = 0;
66 };
67 
69 class Node
70 {
71 public:
72  virtual ~Node() = default;
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 size_t getMempoolMaxUsage() = 0;
167 
169  virtual bool getHeaderTip(int& height, int64_t& block_time) = 0;
170 
172  virtual int getNumBlocks() = 0;
173 
175  virtual std::map<CNetAddr, LocalServiceInfo> getNetLocalAddresses() = 0;
176 
178  virtual uint256 getBestBlockHash() = 0;
179 
181  virtual int64_t getLastBlockTime() = 0;
182 
184  virtual double getVerificationProgress() = 0;
185 
187  virtual bool isInitialBlockDownload() = 0;
188 
190  virtual bool isLoadingBlocks() = 0;
191 
193  virtual void setNetworkActive(bool active) = 0;
194 
196  virtual bool getNetworkActive() = 0;
197 
199  virtual CFeeRate getDustRelayFee() = 0;
200 
202  virtual UniValue executeRpc(const std::string& command, const UniValue& params, const std::string& uri) = 0;
203 
205  virtual std::vector<std::string> listRpcCommands() = 0;
206 
208  virtual void rpcSetTimerInterfaceIfUnset(RPCTimerInterface* iface) = 0;
209 
211  virtual void rpcUnsetTimerInterface(RPCTimerInterface* iface) = 0;
212 
214  virtual std::optional<Coin> getUnspentOutput(const COutPoint& output) = 0;
215 
217  virtual node::TransactionError broadcastTransaction(CTransactionRef tx, CAmount max_tx_fee, std::string& err_string) = 0;
218 
220  virtual WalletLoader& walletLoader() = 0;
221 
223  using InitMessageFn = std::function<void(const std::string& message)>;
224  virtual std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn) = 0;
225 
227  using MessageBoxFn =
228  std::function<bool(const bilingual_str& message, const std::string& caption, unsigned int style)>;
229  virtual std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn) = 0;
230 
232  using QuestionFn = std::function<bool(const bilingual_str& message,
233  const std::string& non_interactive_message,
234  const std::string& caption,
235  unsigned int style)>;
236  virtual std::unique_ptr<Handler> handleQuestion(QuestionFn fn) = 0;
237 
239  using ShowProgressFn = std::function<void(const std::string& title, int progress, bool resume_possible)>;
240  virtual std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn) = 0;
241 
243  using InitWalletFn = std::function<void()>;
244  virtual std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn) = 0;
245 
247  using NotifyNumConnectionsChangedFn = std::function<void(int new_num_connections)>;
248  virtual std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn) = 0;
249 
251  using NotifyNetworkActiveChangedFn = std::function<void(bool network_active)>;
252  virtual std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn) = 0;
253 
255  using NotifyAlertChangedFn = std::function<void()>;
256  virtual std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn) = 0;
257 
259  using BannedListChangedFn = std::function<void()>;
260  virtual std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn) = 0;
261 
263  using NotifyBlockTipFn =
264  std::function<void(SynchronizationState, interfaces::BlockTip tip, double verification_progress)>;
265  virtual std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn) = 0;
266 
268  using NotifyHeaderTipFn =
269  std::function<void(SynchronizationState, interfaces::BlockTip tip, bool presync)>;
270  virtual std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn) = 0;
271 
274  virtual node::NodeContext* context() { return nullptr; }
276 };
277 
279 std::unique_ptr<Node> MakeNode(node::NodeContext& context);
280 
282 struct BlockTip {
284  int64_t block_time;
286 };
287 
288 } // namespace interfaces
289 
290 #endif // BITCOIN_INTERFACES_NODE_H
std::shared_ptr< const CTransaction > CTransactionRef
Definition: transaction.h:423
virtual common::SettingsValue getPersistentSetting(const std::string &name)=0
Return setting value from <datadir>/settings.json or bitcoin.conf.
TransactionError
Definition: types.h:19
virtual std::unique_ptr< Handler > handleNotifyHeaderTip(NotifyHeaderTipFn fn)=0
virtual size_t getMempoolMaxUsage()=0
Get mempool maximum memory usage.
std::vector< std::tuple< CNodeStats, bool, CNodeStateStats > > NodesStats
Get stats for connected nodes.
Definition: node.h:132
virtual std::optional< Coin > getUnspentOutput(const COutPoint &output)=0
Get unspent output associated with a transaction.
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:284
RPC timer "driver".
Definition: server.h:57
Block tip (could be a header or not, depends on the subscribed signal).
Definition: node.h:282
virtual bool isInitialBlockDownload()=0
Is initial block download.
SynchronizationState
Current sync state passed to tip changed callbacks.
Definition: validation.h:82
Definition: banman.h:58
virtual bool getNetworkActive()=0
Get network active.
virtual void initLogging()=0
Init logging.
virtual node::TransactionError broadcastTransaction(CTransactionRef tx, CAmount max_tx_fee, std::string &err_string)=0
Broadcast transaction.
A UTXO entry.
Definition: coins.h:32
Bilingual messages:
Definition: translation.h:18
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:251
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:264
std::unique_ptr< Node > MakeNode(node::NodeContext &context)
Return implementation of Node interface.
Definition: interfaces.cpp:927
virtual ~Node()=default
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:55
std::function< void(SynchronizationState, interfaces::BlockTip tip, bool presync)> NotifyHeaderTipFn
Register handler for header tip messages.
Definition: node.h:269
virtual ~ExternalSigner()=default
std::function< void()> NotifyAlertChangedFn
Register handler for notify alert messages.
Definition: node.h:255
virtual int getExitStatus()=0
Get exit status.
virtual bool isLoadingBlocks()=0
Is loading blocks.
const char * name
Definition: rest.cpp:49
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.
virtual bool disconnectByAddress(const CNetAddr &net_addr)=0
Disconnect node by address.
Network
A network type.
Definition: netaddress.h:32
static CService ip(uint32_t i)
Block and header tip information.
Definition: node.h:49
int64_t NodeId
Definition: net.h:97
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:28
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...
virtual std::map< CNetAddr, LocalServiceInfo > getNetLocalAddresses()=0
Get network local addresses.
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:327
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:223
Definition: messages.h:20
std::function< void()> BannedListChangedFn
Register handler for ban list messages.
Definition: node.h:259
Definition: netbase.h:58
int flags
Definition: bitcoin-tx.cpp:533
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:247
Network address.
Definition: netaddress.h:111
256-bit opaque blob.
Definition: uint256.h:178
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:235
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:243
virtual bool getNodesStats(NodesStats &stats)=0
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:239
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:275
std::function< bool(const bilingual_str &message, const std::string &caption, unsigned int style)> MessageBoxFn
Register handler for message box messages.
Definition: node.h:228
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:285
virtual bool appInitMain(interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)=0
Start node.
virtual node::NodeContext * context()
Get and set internal node context.
Definition: node.h:274
virtual std::unique_ptr< Handler > handleInitMessage(InitMessageFn fn)=0