Bitcoin Core  27.99.0
P2P Digital Currency
server_util.cpp
Go to the documentation of this file.
1 // Copyright (c) 2021-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 #include <rpc/server_util.h>
6 
7 #include <common/args.h>
8 #include <net_processing.h>
9 #include <node/context.h>
10 #include <policy/fees.h>
11 #include <rpc/protocol.h>
12 #include <rpc/request.h>
13 #include <txmempool.h>
14 #include <util/any.h>
15 #include <validation.h>
16 
17 #include <any>
18 
19 using node::NodeContext;
20 
21 NodeContext& EnsureAnyNodeContext(const std::any& context)
22 {
23  auto node_context = util::AnyPtr<NodeContext>(context);
24  if (!node_context) {
25  throw JSONRPCError(RPC_INTERNAL_ERROR, "Node context not found");
26  }
27  return *node_context;
28 }
29 
31 {
32  if (!node.mempool) {
33  throw JSONRPCError(RPC_CLIENT_MEMPOOL_DISABLED, "Mempool disabled or instance not found");
34  }
35  return *node.mempool;
36 }
37 
38 CTxMemPool& EnsureAnyMemPool(const std::any& context)
39 {
40  return EnsureMemPool(EnsureAnyNodeContext(context));
41 }
42 
43 
45 {
46  if (!node.banman) {
47  throw JSONRPCError(RPC_DATABASE_ERROR, "Error: Ban database not loaded");
48  }
49  return *node.banman;
50 }
51 
52 BanMan& EnsureAnyBanman(const std::any& context)
53 {
54  return EnsureBanman(EnsureAnyNodeContext(context));
55 }
56 
58 {
59  if (!node.args) {
60  throw JSONRPCError(RPC_INTERNAL_ERROR, "Node args not found");
61  }
62  return *node.args;
63 }
64 
65 ArgsManager& EnsureAnyArgsman(const std::any& context)
66 {
67  return EnsureArgsman(EnsureAnyNodeContext(context));
68 }
69 
71 {
72  if (!node.chainman) {
73  throw JSONRPCError(RPC_INTERNAL_ERROR, "Node chainman not found");
74  }
75  return *node.chainman;
76 }
77 
78 ChainstateManager& EnsureAnyChainman(const std::any& context)
79 {
80  return EnsureChainman(EnsureAnyNodeContext(context));
81 }
82 
84 {
85  if (!node.fee_estimator) {
86  throw JSONRPCError(RPC_INTERNAL_ERROR, "Fee estimation disabled");
87  }
88  return *node.fee_estimator;
89 }
90 
92 {
94 }
95 
97 {
98  if (!node.connman) {
99  throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
100  }
101  return *node.connman;
102 }
103 
105 {
106  if (!node.peerman) {
107  throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
108  }
109  return *node.peerman;
110 }
111 
113 {
114  if (!node.addrman) {
115  throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Address manager functionality missing or disabled");
116  }
117  return *node.addrman;
118 }
119 
120 AddrMan& EnsureAnyAddrman(const std::any& context)
121 {
122  return EnsureAddrman(EnsureAnyNodeContext(context));
123 }
Stochastic address manager.
Definition: addrman.h:88
Definition: banman.h:59
The BlockPolicyEstimator is used for estimating the feerate needed for a transaction to be included i...
Definition: fees.h:149
Definition: net.h:1036
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
Definition: txmempool.h:302
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
Definition: validation.h:850
Definition: init.h:25
UniValue JSONRPCError(int code, const std::string &message)
Definition: request.cpp:58
@ RPC_CLIENT_MEMPOOL_DISABLED
Chain errors.
Definition: protocol.h:68
@ RPC_INTERNAL_ERROR
Definition: protocol.h:35
@ RPC_DATABASE_ERROR
Database error.
Definition: protocol.h:44
@ RPC_CLIENT_P2P_DISABLED
No valid connection manager instance found.
Definition: protocol.h:64
ArgsManager & EnsureArgsman(const NodeContext &node)
Definition: server_util.cpp:57
ArgsManager & EnsureAnyArgsman(const std::any &context)
Definition: server_util.cpp:65
BanMan & EnsureBanman(const NodeContext &node)
Definition: server_util.cpp:44
AddrMan & EnsureAnyAddrman(const std::any &context)
ChainstateManager & EnsureAnyChainman(const std::any &context)
Definition: server_util.cpp:78
BanMan & EnsureAnyBanman(const std::any &context)
Definition: server_util.cpp:52
CTxMemPool & EnsureAnyMemPool(const std::any &context)
Definition: server_util.cpp:38
NodeContext & EnsureAnyNodeContext(const std::any &context)
Definition: server_util.cpp:21
CBlockPolicyEstimator & EnsureAnyFeeEstimator(const std::any &context)
Definition: server_util.cpp:91
CConnman & EnsureConnman(const NodeContext &node)
Definition: server_util.cpp:96
PeerManager & EnsurePeerman(const NodeContext &node)
CBlockPolicyEstimator & EnsureFeeEstimator(const NodeContext &node)
Definition: server_util.cpp:83
AddrMan & EnsureAddrman(const NodeContext &node)
CTxMemPool & EnsureMemPool(const NodeContext &node)
Definition: server_util.cpp:30
ChainstateManager & EnsureChainman(const NodeContext &node)
Definition: server_util.cpp:70
NodeContext struct containing references to chain state and connection state.
Definition: context.h:49