mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
rpc: move Ensure* helpers to server_util.h
This commit is contained in:
parent
df562d698a
commit
b884ababc2
11 changed files with 115 additions and 93 deletions
|
@ -200,12 +200,12 @@ BITCOIN_CORE_H = \
|
||||||
rpc/blockchain.h \
|
rpc/blockchain.h \
|
||||||
rpc/client.h \
|
rpc/client.h \
|
||||||
rpc/mining.h \
|
rpc/mining.h \
|
||||||
rpc/net.h \
|
|
||||||
rpc/protocol.h \
|
rpc/protocol.h \
|
||||||
rpc/rawtransaction_util.h \
|
rpc/rawtransaction_util.h \
|
||||||
rpc/register.h \
|
rpc/register.h \
|
||||||
rpc/request.h \
|
rpc/request.h \
|
||||||
rpc/server.h \
|
rpc/server.h \
|
||||||
|
rpc/server_util.h \
|
||||||
rpc/util.h \
|
rpc/util.h \
|
||||||
scheduler.h \
|
scheduler.h \
|
||||||
script/descriptor.h \
|
script/descriptor.h \
|
||||||
|
@ -360,6 +360,7 @@ libbitcoin_server_a_SOURCES = \
|
||||||
rpc/net.cpp \
|
rpc/net.cpp \
|
||||||
rpc/rawtransaction.cpp \
|
rpc/rawtransaction.cpp \
|
||||||
rpc/server.cpp \
|
rpc/server.cpp \
|
||||||
|
rpc/server_util.cpp \
|
||||||
script/sigcache.cpp \
|
script/sigcache.cpp \
|
||||||
shutdown.cpp \
|
shutdown.cpp \
|
||||||
signet.cpp \
|
signet.cpp \
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <rpc/blockchain.h>
|
#include <rpc/blockchain.h>
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/protocol.h>
|
||||||
#include <rpc/server.h>
|
#include <rpc/server.h>
|
||||||
|
#include <rpc/server_util.h>
|
||||||
#include <streams.h>
|
#include <streams.h>
|
||||||
#include <sync.h>
|
#include <sync.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <policy/rbf.h>
|
#include <policy/rbf.h>
|
||||||
#include <primitives/transaction.h>
|
#include <primitives/transaction.h>
|
||||||
#include <rpc/server.h>
|
#include <rpc/server.h>
|
||||||
|
#include <rpc/server_util.h>
|
||||||
#include <rpc/util.h>
|
#include <rpc/util.h>
|
||||||
#include <script/descriptor.h>
|
#include <script/descriptor.h>
|
||||||
#include <streams.h>
|
#include <streams.h>
|
||||||
|
@ -37,7 +38,6 @@
|
||||||
#include <undo.h>
|
#include <undo.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
#include <util/string.h>
|
#include <util/string.h>
|
||||||
#include <util/system.h>
|
|
||||||
#include <util/translation.h>
|
#include <util/translation.h>
|
||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
#include <validationinterface.h>
|
#include <validationinterface.h>
|
||||||
|
@ -62,54 +62,6 @@ static Mutex cs_blockchange;
|
||||||
static std::condition_variable cond_blockchange;
|
static std::condition_variable cond_blockchange;
|
||||||
static CUpdatedBlock latestblock GUARDED_BY(cs_blockchange);
|
static CUpdatedBlock latestblock GUARDED_BY(cs_blockchange);
|
||||||
|
|
||||||
NodeContext& EnsureAnyNodeContext(const std::any& context)
|
|
||||||
{
|
|
||||||
auto node_context = util::AnyPtr<NodeContext>(context);
|
|
||||||
if (!node_context) {
|
|
||||||
throw JSONRPCError(RPC_INTERNAL_ERROR, "Node context not found");
|
|
||||||
}
|
|
||||||
return *node_context;
|
|
||||||
}
|
|
||||||
|
|
||||||
CTxMemPool& EnsureMemPool(const NodeContext& node)
|
|
||||||
{
|
|
||||||
if (!node.mempool) {
|
|
||||||
throw JSONRPCError(RPC_CLIENT_MEMPOOL_DISABLED, "Mempool disabled or instance not found");
|
|
||||||
}
|
|
||||||
return *node.mempool;
|
|
||||||
}
|
|
||||||
|
|
||||||
CTxMemPool& EnsureAnyMemPool(const std::any& context)
|
|
||||||
{
|
|
||||||
return EnsureMemPool(EnsureAnyNodeContext(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
ChainstateManager& EnsureChainman(const NodeContext& node)
|
|
||||||
{
|
|
||||||
if (!node.chainman) {
|
|
||||||
throw JSONRPCError(RPC_INTERNAL_ERROR, "Node chainman not found");
|
|
||||||
}
|
|
||||||
return *node.chainman;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChainstateManager& EnsureAnyChainman(const std::any& context)
|
|
||||||
{
|
|
||||||
return EnsureChainman(EnsureAnyNodeContext(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
CBlockPolicyEstimator& EnsureFeeEstimator(const NodeContext& node)
|
|
||||||
{
|
|
||||||
if (!node.fee_estimator) {
|
|
||||||
throw JSONRPCError(RPC_INTERNAL_ERROR, "Fee estimation disabled");
|
|
||||||
}
|
|
||||||
return *node.fee_estimator;
|
|
||||||
}
|
|
||||||
|
|
||||||
CBlockPolicyEstimator& EnsureAnyFeeEstimator(const std::any& context)
|
|
||||||
{
|
|
||||||
return EnsureFeeEstimator(EnsureAnyNodeContext(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calculate the difficulty for a given block index.
|
/* Calculate the difficulty for a given block index.
|
||||||
*/
|
*/
|
||||||
double GetDifficulty(const CBlockIndex* blockindex)
|
double GetDifficulty(const CBlockIndex* blockindex)
|
||||||
|
|
|
@ -18,7 +18,6 @@ extern RecursiveMutex cs_main;
|
||||||
|
|
||||||
class CBlock;
|
class CBlock;
|
||||||
class CBlockIndex;
|
class CBlockIndex;
|
||||||
class CBlockPolicyEstimator;
|
|
||||||
class CChainState;
|
class CChainState;
|
||||||
class CTxMemPool;
|
class CTxMemPool;
|
||||||
class ChainstateManager;
|
class ChainstateManager;
|
||||||
|
@ -53,14 +52,6 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex
|
||||||
/** Used by getblockstats to get feerates at different percentiles by weight */
|
/** Used by getblockstats to get feerates at different percentiles by weight */
|
||||||
void CalculatePercentilesByWeight(CAmount result[NUM_GETBLOCKSTATS_PERCENTILES], std::vector<std::pair<CAmount, int64_t>>& scores, int64_t total_weight);
|
void CalculatePercentilesByWeight(CAmount result[NUM_GETBLOCKSTATS_PERCENTILES], std::vector<std::pair<CAmount, int64_t>>& scores, int64_t total_weight);
|
||||||
|
|
||||||
NodeContext& EnsureAnyNodeContext(const std::any& context);
|
|
||||||
CTxMemPool& EnsureMemPool(const NodeContext& node);
|
|
||||||
CTxMemPool& EnsureAnyMemPool(const std::any& context);
|
|
||||||
ChainstateManager& EnsureChainman(const NodeContext& node);
|
|
||||||
ChainstateManager& EnsureAnyChainman(const std::any& context);
|
|
||||||
CBlockPolicyEstimator& EnsureFeeEstimator(const NodeContext& node);
|
|
||||||
CBlockPolicyEstimator& EnsureAnyFeeEstimator(const std::any& context);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper to create UTXO snapshots given a chainstate and a file handle.
|
* Helper to create UTXO snapshots given a chainstate and a file handle.
|
||||||
* @return a UniValue map containing metadata about the snapshot.
|
* @return a UniValue map containing metadata about the snapshot.
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
#include <pow.h>
|
#include <pow.h>
|
||||||
#include <rpc/blockchain.h>
|
#include <rpc/blockchain.h>
|
||||||
#include <rpc/mining.h>
|
#include <rpc/mining.h>
|
||||||
#include <rpc/net.h>
|
|
||||||
#include <rpc/server.h>
|
#include <rpc/server.h>
|
||||||
|
#include <rpc/server_util.h>
|
||||||
#include <rpc/util.h>
|
#include <rpc/util.h>
|
||||||
#include <script/descriptor.h>
|
#include <script/descriptor.h>
|
||||||
#include <script/script.h>
|
#include <script/script.h>
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <outputtype.h>
|
#include <outputtype.h>
|
||||||
#include <rpc/blockchain.h>
|
#include <rpc/blockchain.h>
|
||||||
#include <rpc/server.h>
|
#include <rpc/server.h>
|
||||||
|
#include <rpc/server_util.h>
|
||||||
#include <rpc/util.h>
|
#include <rpc/util.h>
|
||||||
#include <scheduler.h>
|
#include <scheduler.h>
|
||||||
#include <script/descriptor.h>
|
#include <script/descriptor.h>
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include <chainparams.h>
|
#include <chainparams.h>
|
||||||
#include <clientversion.h>
|
#include <clientversion.h>
|
||||||
#include <core_io.h>
|
#include <core_io.h>
|
||||||
#include <net.h>
|
|
||||||
#include <net_permissions.h>
|
#include <net_permissions.h>
|
||||||
#include <net_processing.h>
|
#include <net_processing.h>
|
||||||
#include <net_types.h> // For banmap_t
|
#include <net_types.h> // For banmap_t
|
||||||
|
@ -17,12 +16,12 @@
|
||||||
#include <policy/settings.h>
|
#include <policy/settings.h>
|
||||||
#include <rpc/blockchain.h>
|
#include <rpc/blockchain.h>
|
||||||
#include <rpc/protocol.h>
|
#include <rpc/protocol.h>
|
||||||
|
#include <rpc/server_util.h>
|
||||||
#include <rpc/util.h>
|
#include <rpc/util.h>
|
||||||
#include <sync.h>
|
#include <sync.h>
|
||||||
#include <timedata.h>
|
#include <timedata.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
#include <util/string.h>
|
#include <util/string.h>
|
||||||
#include <util/system.h>
|
|
||||||
#include <util/translation.h>
|
#include <util/translation.h>
|
||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
#include <version.h>
|
#include <version.h>
|
||||||
|
@ -41,22 +40,6 @@ const std::vector<std::string> CONNECTION_TYPE_DOC{
|
||||||
"feeler (short-lived automatic connection for testing addresses)"
|
"feeler (short-lived automatic connection for testing addresses)"
|
||||||
};
|
};
|
||||||
|
|
||||||
CConnman& EnsureConnman(const NodeContext& node)
|
|
||||||
{
|
|
||||||
if (!node.connman) {
|
|
||||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
||||||
}
|
|
||||||
return *node.connman;
|
|
||||||
}
|
|
||||||
|
|
||||||
PeerManager& EnsurePeerman(const NodeContext& node)
|
|
||||||
{
|
|
||||||
if (!node.peerman) {
|
|
||||||
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
|
||||||
}
|
|
||||||
return *node.peerman;
|
|
||||||
}
|
|
||||||
|
|
||||||
static RPCHelpMan getconnectioncount()
|
static RPCHelpMan getconnectioncount()
|
||||||
{
|
{
|
||||||
return RPCHelpMan{"getconnectioncount",
|
return RPCHelpMan{"getconnectioncount",
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
// Copyright (c) 2021 The Bitcoin Core developers
|
|
||||||
// Distributed under the MIT software license, see the accompanying
|
|
||||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
|
|
||||||
#ifndef BITCOIN_RPC_NET_H
|
|
||||||
#define BITCOIN_RPC_NET_H
|
|
||||||
|
|
||||||
class CConnman;
|
|
||||||
class PeerManager;
|
|
||||||
struct NodeContext;
|
|
||||||
|
|
||||||
CConnman& EnsureConnman(const NodeContext& node);
|
|
||||||
PeerManager& EnsurePeerman(const NodeContext& node);
|
|
||||||
|
|
||||||
#endif // BITCOIN_RPC_NET_H
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <rpc/blockchain.h>
|
#include <rpc/blockchain.h>
|
||||||
#include <rpc/rawtransaction_util.h>
|
#include <rpc/rawtransaction_util.h>
|
||||||
#include <rpc/server.h>
|
#include <rpc/server.h>
|
||||||
|
#include <rpc/server_util.h>
|
||||||
#include <rpc/util.h>
|
#include <rpc/util.h>
|
||||||
#include <script/script.h>
|
#include <script/script.h>
|
||||||
#include <script/sign.h>
|
#include <script/sign.h>
|
||||||
|
|
80
src/rpc/server_util.cpp
Normal file
80
src/rpc/server_util.cpp
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
// Copyright (c) 2021 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#include <rpc/server_util.h>
|
||||||
|
|
||||||
|
#include <net_processing.h>
|
||||||
|
#include <node/context.h>
|
||||||
|
#include <policy/fees.h>
|
||||||
|
#include <rpc/protocol.h>
|
||||||
|
#include <rpc/request.h>
|
||||||
|
#include <txmempool.h>
|
||||||
|
#include <util/system.h>
|
||||||
|
#include <validation.h>
|
||||||
|
|
||||||
|
#include <any>
|
||||||
|
|
||||||
|
NodeContext& EnsureAnyNodeContext(const std::any& context)
|
||||||
|
{
|
||||||
|
auto node_context = util::AnyPtr<NodeContext>(context);
|
||||||
|
if (!node_context) {
|
||||||
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Node context not found");
|
||||||
|
}
|
||||||
|
return *node_context;
|
||||||
|
}
|
||||||
|
|
||||||
|
CTxMemPool& EnsureMemPool(const NodeContext& node)
|
||||||
|
{
|
||||||
|
if (!node.mempool) {
|
||||||
|
throw JSONRPCError(RPC_CLIENT_MEMPOOL_DISABLED, "Mempool disabled or instance not found");
|
||||||
|
}
|
||||||
|
return *node.mempool;
|
||||||
|
}
|
||||||
|
|
||||||
|
CTxMemPool& EnsureAnyMemPool(const std::any& context)
|
||||||
|
{
|
||||||
|
return EnsureMemPool(EnsureAnyNodeContext(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
ChainstateManager& EnsureChainman(const NodeContext& node)
|
||||||
|
{
|
||||||
|
if (!node.chainman) {
|
||||||
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Node chainman not found");
|
||||||
|
}
|
||||||
|
return *node.chainman;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChainstateManager& EnsureAnyChainman(const std::any& context)
|
||||||
|
{
|
||||||
|
return EnsureChainman(EnsureAnyNodeContext(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
CBlockPolicyEstimator& EnsureFeeEstimator(const NodeContext& node)
|
||||||
|
{
|
||||||
|
if (!node.fee_estimator) {
|
||||||
|
throw JSONRPCError(RPC_INTERNAL_ERROR, "Fee estimation disabled");
|
||||||
|
}
|
||||||
|
return *node.fee_estimator;
|
||||||
|
}
|
||||||
|
|
||||||
|
CBlockPolicyEstimator& EnsureAnyFeeEstimator(const std::any& context)
|
||||||
|
{
|
||||||
|
return EnsureFeeEstimator(EnsureAnyNodeContext(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
CConnman& EnsureConnman(const NodeContext& node)
|
||||||
|
{
|
||||||
|
if (!node.connman) {
|
||||||
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||||
|
}
|
||||||
|
return *node.connman;
|
||||||
|
}
|
||||||
|
|
||||||
|
PeerManager& EnsurePeerman(const NodeContext& node)
|
||||||
|
{
|
||||||
|
if (!node.peerman) {
|
||||||
|
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
|
||||||
|
}
|
||||||
|
return *node.peerman;
|
||||||
|
}
|
27
src/rpc/server_util.h
Normal file
27
src/rpc/server_util.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright (c) 2021 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_RPC_SERVER_UTIL_H
|
||||||
|
#define BITCOIN_RPC_SERVER_UTIL_H
|
||||||
|
|
||||||
|
#include <any>
|
||||||
|
|
||||||
|
class CBlockPolicyEstimator;
|
||||||
|
class CConnman;
|
||||||
|
class ChainstateManager;
|
||||||
|
class CTxMemPool;
|
||||||
|
struct NodeContext;
|
||||||
|
class PeerManager;
|
||||||
|
|
||||||
|
NodeContext& EnsureAnyNodeContext(const std::any& context);
|
||||||
|
CTxMemPool& EnsureMemPool(const NodeContext& node);
|
||||||
|
CTxMemPool& EnsureAnyMemPool(const std::any& context);
|
||||||
|
ChainstateManager& EnsureChainman(const NodeContext& node);
|
||||||
|
ChainstateManager& EnsureAnyChainman(const std::any& context);
|
||||||
|
CBlockPolicyEstimator& EnsureFeeEstimator(const NodeContext& node);
|
||||||
|
CBlockPolicyEstimator& EnsureAnyFeeEstimator(const std::any& context);
|
||||||
|
CConnman& EnsureConnman(const NodeContext& node);
|
||||||
|
PeerManager& EnsurePeerman(const NodeContext& node);
|
||||||
|
|
||||||
|
#endif // BITCOIN_RPC_SERVER_UTIL_H
|
Loading…
Add table
Reference in a new issue