Bitcoin Core 28.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
20
21NodeContext& 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
38CTxMemPool& 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
52BanMan& 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
65ArgsManager& 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
78ChainstateManager& 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.mining) {
107 throw JSONRPCError(RPC_INTERNAL_ERROR, "Node miner not found");
108 }
109 return *node.mining;
110}
111
113{
114 if (!node.peerman) {
115 throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
116 }
117 return *node.peerman;
118}
119
121{
122 if (!node.addrman) {
123 throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Address manager functionality missing or disabled");
124 }
125 return *node.addrman;
126}
127
128AddrMan& EnsureAnyAddrman(const std::any& context)
129{
130 return EnsureAddrman(EnsureAnyNodeContext(context));
131}
Stochastic address manager.
Definition: addrman.h:89
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:304
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
Definition: validation.h:866
Interface giving clients (RPC, Stratum v2 Template Provider in the future) ability to create block te...
Definition: mining.h:64
Definition: messages.h:20
UniValue JSONRPCError(int code, const std::string &message)
Definition: request.cpp:70
@ RPC_CLIENT_MEMPOOL_DISABLED
Chain errors.
Definition: protocol.h:68
@ RPC_INTERNAL_ERROR
Definition: protocol.h:36
@ RPC_DATABASE_ERROR
Database error.
Definition: protocol.h:45
@ RPC_CLIENT_P2P_DISABLED
No valid connection manager instance found.
Definition: protocol.h:64
ChainstateManager & EnsureAnyChainman(const std::any &context)
Definition: server_util.cpp:78
BanMan & EnsureBanman(const NodeContext &node)
Definition: server_util.cpp:44
AddrMan & EnsureAnyAddrman(const std::any &context)
CBlockPolicyEstimator & EnsureFeeEstimator(const NodeContext &node)
Definition: server_util.cpp:83
NodeContext & EnsureAnyNodeContext(const std::any &context)
Definition: server_util.cpp:21
CTxMemPool & EnsureMemPool(const NodeContext &node)
Definition: server_util.cpp:30
BanMan & EnsureAnyBanman(const std::any &context)
Definition: server_util.cpp:52
PeerManager & EnsurePeerman(const NodeContext &node)
ChainstateManager & EnsureChainman(const NodeContext &node)
Definition: server_util.cpp:70
CTxMemPool & EnsureAnyMemPool(const std::any &context)
Definition: server_util.cpp:38
CBlockPolicyEstimator & EnsureAnyFeeEstimator(const std::any &context)
Definition: server_util.cpp:91
ArgsManager & EnsureArgsman(const NodeContext &node)
Definition: server_util.cpp:57
interfaces::Mining & EnsureMining(const NodeContext &node)
AddrMan & EnsureAddrman(const NodeContext &node)
CConnman & EnsureConnman(const NodeContext &node)
Definition: server_util.cpp:96
ArgsManager & EnsureAnyArgsman(const std::any &context)
Definition: server_util.cpp:65
NodeContext struct containing references to chain state and connection state.
Definition: context.h:56