Bitcoin Core  29.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 <logging.h> // For BCLog::CategoryMask
11 #include <net.h> // For NodeId
12 #include <net_types.h> // For banmap_t
13 #include <netaddress.h> // For Network
14 #include <netbase.h> // For ConnectionDirection
15 #include <support/allocators/secure.h> // For SecureString
16 #include <util/translation.h>
17 
18 #include <functional>
19 #include <memory>
20 #include <stddef.h>
21 #include <stdint.h>
22 #include <string>
23 #include <tuple>
24 #include <vector>
25 
26 class BanMan;
27 class CFeeRate;
28 class CNodeStats;
29 class Coin;
30 class RPCTimerInterface;
31 class UniValue;
32 class Proxy;
33 enum class SynchronizationState;
34 struct CNodeStateStats;
35 struct bilingual_str;
36 namespace node {
37 enum class TransactionError;
38 struct NodeContext;
39 } // namespace node
40 namespace wallet {
41 class CCoinControl;
42 } // namespace wallet
43 
44 namespace interfaces {
45 class Handler;
46 class WalletLoader;
47 struct BlockTip;
48 
51 {
53  int64_t block_time;
55  int64_t header_time;
57 };
58 
61 {
62 public:
63  virtual ~ExternalSigner() = default;
64 
66  virtual std::string getName() = 0;
67 };
68 
70 class Node
71 {
72 public:
73  virtual ~Node() = default;
74 
76  virtual void initLogging() = 0;
77 
79  virtual void initParameterInteraction() = 0;
80 
82  virtual bilingual_str getWarnings() = 0;
83 
85  virtual int getExitStatus() = 0;
86 
87  // Get log flags.
89 
91  virtual bool baseInitialize() = 0;
92 
94  virtual bool appInitMain(interfaces::BlockAndHeaderTipInfo* tip_info = nullptr) = 0;
95 
97  virtual void appShutdown() = 0;
98 
100  virtual void startShutdown() = 0;
101 
103  virtual bool shutdownRequested() = 0;
104 
107  virtual bool isSettingIgnored(const std::string& name) = 0;
108 
110  virtual common::SettingsValue getPersistentSetting(const std::string& name) = 0;
111 
113  virtual void updateRwSetting(const std::string& name, const common::SettingsValue& value) = 0;
114 
117  virtual void forceSetting(const std::string& name, const common::SettingsValue& value) = 0;
118 
121  virtual void resetSettings() = 0;
122 
124  virtual void mapPort(bool enable) = 0;
125 
127  virtual bool getProxy(Network net, Proxy& proxy_info) = 0;
128 
130  virtual size_t getNodeCount(ConnectionDirection flags) = 0;
131 
133  using NodesStats = std::vector<std::tuple<CNodeStats, bool, CNodeStateStats>>;
134  virtual bool getNodesStats(NodesStats& stats) = 0;
135 
137  virtual bool getBanned(banmap_t& banmap) = 0;
138 
140  virtual bool ban(const CNetAddr& net_addr, int64_t ban_time_offset) = 0;
141 
143  virtual bool unban(const CSubNet& ip) = 0;
144 
146  virtual bool disconnectByAddress(const CNetAddr& net_addr) = 0;
147 
149  virtual bool disconnectById(NodeId id) = 0;
150 
152  virtual std::vector<std::unique_ptr<ExternalSigner>> listExternalSigners() = 0;
153 
155  virtual int64_t getTotalBytesRecv() = 0;
156 
158  virtual int64_t getTotalBytesSent() = 0;
159 
161  virtual size_t getMempoolSize() = 0;
162 
164  virtual size_t getMempoolDynamicUsage() = 0;
165 
167  virtual size_t getMempoolMaxUsage() = 0;
168 
170  virtual bool getHeaderTip(int& height, int64_t& block_time) = 0;
171 
173  virtual int getNumBlocks() = 0;
174 
176  virtual std::map<CNetAddr, LocalServiceInfo> getNetLocalAddresses() = 0;
177 
179  virtual uint256 getBestBlockHash() = 0;
180 
182  virtual int64_t getLastBlockTime() = 0;
183 
185  virtual double getVerificationProgress() = 0;
186 
188  virtual bool isInitialBlockDownload() = 0;
189 
191  virtual bool isLoadingBlocks() = 0;
192 
194  virtual void setNetworkActive(bool active) = 0;
195 
197  virtual bool getNetworkActive() = 0;
198 
200  virtual CFeeRate getDustRelayFee() = 0;
201 
203  virtual UniValue executeRpc(const std::string& command, const UniValue& params, const std::string& uri) = 0;
204 
206  virtual std::vector<std::string> listRpcCommands() = 0;
207 
209  virtual void rpcSetTimerInterfaceIfUnset(RPCTimerInterface* iface) = 0;
210 
212  virtual void rpcUnsetTimerInterface(RPCTimerInterface* iface) = 0;
213 
215  virtual std::optional<Coin> getUnspentOutput(const COutPoint& output) = 0;
216 
218  virtual node::TransactionError broadcastTransaction(CTransactionRef tx, CAmount max_tx_fee, std::string& err_string) = 0;
219 
221  virtual WalletLoader& walletLoader() = 0;
222 
224  using InitMessageFn = std::function<void(const std::string& message)>;
225  virtual std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn) = 0;
226 
228  using MessageBoxFn =
229  std::function<bool(const bilingual_str& message, const std::string& caption, unsigned int style)>;
230  virtual std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn) = 0;
231 
233  using QuestionFn = std::function<bool(const bilingual_str& message,
234  const std::string& non_interactive_message,
235  const std::string& caption,
236  unsigned int style)>;
237  virtual std::unique_ptr<Handler> handleQuestion(QuestionFn fn) = 0;
238 
240  using ShowProgressFn = std::function<void(const std::string& title, int progress, bool resume_possible)>;
241  virtual std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn) = 0;
242 
244  using InitWalletFn = std::function<void()>;
245  virtual std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn) = 0;
246 
248  using NotifyNumConnectionsChangedFn = std::function<void(int new_num_connections)>;
249  virtual std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn) = 0;
250 
252  using NotifyNetworkActiveChangedFn = std::function<void(bool network_active)>;
253  virtual std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn) = 0;
254 
256  using NotifyAlertChangedFn = std::function<void()>;
257  virtual std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn) = 0;
258 
260  using BannedListChangedFn = std::function<void()>;
261  virtual std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn) = 0;
262 
264  using NotifyBlockTipFn =
265  std::function<void(SynchronizationState, interfaces::BlockTip tip, double verification_progress)>;
266  virtual std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn) = 0;
267 
269  using NotifyHeaderTipFn =
270  std::function<void(SynchronizationState, interfaces::BlockTip tip, bool presync)>;
271  virtual std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn) = 0;
272 
275  virtual node::NodeContext* context() { return nullptr; }
277 };
278 
280 std::unique_ptr<Node> MakeNode(node::NodeContext& context);
281 
283 struct BlockTip {
285  int64_t block_time;
287 };
288 
289 } // namespace interfaces
290 
291 #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:21
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:133
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:285
RPC timer "driver".
Definition: server.h:51
Block tip (could be a header or not, depends on the subscribed signal).
Definition: node.h:283
virtual bool isInitialBlockDownload()=0
Is initial block download.
SynchronizationState
Current sync state passed to tip changed callbacks.
Definition: validation.h:85
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:24
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:252
virtual size_t getMempoolSize()=0
Get mempool size.
std::function< void(SynchronizationState, interfaces::BlockTip tip, double verification_progress)> NotifyBlockTipFn
Register handler for block tip messages.
Definition: node.h:265
std::unique_ptr< Node > MakeNode(node::NodeContext &context)
Return implementation of Node interface.
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:56
std::function< void(SynchronizationState, interfaces::BlockTip tip, bool presync)> NotifyHeaderTipFn
Register handler for header tip messages.
Definition: node.h:270
virtual ~ExternalSigner()=default
std::function< void()> NotifyAlertChangedFn
Register handler for notify alert messages.
Definition: node.h:256
virtual void mapPort(bool enable)=0
Map port.
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 BCLog::CategoryMask getLogCategories()=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:50
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:60
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:224
Definition: messages.h:20
std::function< void()> BannedListChangedFn
Register handler for ban list messages.
Definition: node.h:260
Definition: netbase.h:58
int flags
Definition: bitcoin-tx.cpp:536
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:248
Network address.
Definition: netaddress.h:111
256-bit opaque blob.
Definition: uint256.h:201
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:236
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.
uint64_t CategoryMask
Definition: logging.h:63
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:244
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:240
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:276
std::function< bool(const bilingual_str &message, const std::string &caption, unsigned int style)> MessageBoxFn
Register handler for message box messages.
Definition: node.h:229
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.
Top-level interface for a bitcoin node (bitcoind process).
Definition: node.h:70
uint256 block_hash
Definition: node.h:286
virtual bool appInitMain(interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)=0
Start node.
virtual node::NodeContext * context()
Get and set internal node context.
Definition: node.h:275
virtual std::unique_ptr< Handler > handleInitMessage(InitMessageFn fn)=0