mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-13 07:28:59 +01:00
Merge #16240: JSONRPCRequest-aware RPCHelpMan
b6fb617aaarpc: switch to using RPCHelpMan.Check() (Karl-Johan Alm)c7a9fc234fMake the RPCHelpMan aware of JSONRPCRequest and add Check() helper (Karl-Johan Alm)5c5e32bbe3rpc: migrate JSONRPCRequest functionality into request.cpp (Karl-Johan Alm)0ab8ba1ac6rpc: fix RPC help requirements for getblocktemplate (Karl-Johan Alm) Pull request description: Every single RPC call has a helper-section at the start, which throws a help string if the user asks for help or if the user provided too few/many arguments. ```C++ const RPCHelpMan help{...}; if (request.fHelp || !help.IsValidNumArgs(request.params.size())) { throw std::runtime_error(help.ToString()); } ``` or (older version) ```C++ if (request.fHelp || request.params.size() < min || request.params.size() > max) throw std::runtime_error( RPCHelpMan{...}.ToString() ); ``` It seems like an obvious improvement, and less copy-pasting, to make `RPCHelpMan` aware of `JSONRPCRequest`, and to let it handle the checks instead. Both of the above become ```C++ RPCHelpMan{...}.Check(request); ``` which means we save roughly 3 lines per RPC command, and the `RPCHelpMan` instance is never referenced afterwards, so the approach is a tiny fraction cleaner. This is a complete update, sans a few special case locations that had special rules. 623 lines turn into 284 (which includes the addition to `RPCHelpMan`). ACKs for top commit: laanwj: code rview and lightly tested ACKb6fb617aaaMarcoFalke: ACKb6fb617aaa, looked at the diff, verified move-only where applicable Tree-SHA512: eb73f47f812512905b852e313281d1c8df803db40a6188aa39d5a7586631664db6764491152a8a96769946c796dc56d38c6e3a66ddd06ba3fb9d20050e6274e1
This commit is contained in:
@@ -165,8 +165,6 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* tip, const CBlockIn
|
||||
|
||||
static UniValue getblockcount(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getblockcount",
|
||||
"\nReturns the height of the most-work fully-validated chain.\n"
|
||||
"The genesis block has height 0.\n",
|
||||
@@ -178,7 +176,7 @@ static UniValue getblockcount(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getblockcount", "")
|
||||
+ HelpExampleRpc("getblockcount", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
return ::ChainActive().Height();
|
||||
@@ -186,8 +184,6 @@ static UniValue getblockcount(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getbestblockhash(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getbestblockhash",
|
||||
"\nReturns the hash of the best (tip) block in the most-work fully-validated chain.\n",
|
||||
{},
|
||||
@@ -198,7 +194,7 @@ static UniValue getbestblockhash(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getbestblockhash", "")
|
||||
+ HelpExampleRpc("getbestblockhash", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
return ::ChainActive().Tip()->GetBlockHash().GetHex();
|
||||
@@ -216,8 +212,6 @@ void RPCNotifyBlockChange(bool ibd, const CBlockIndex * pindex)
|
||||
|
||||
static UniValue waitfornewblock(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() > 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"waitfornewblock",
|
||||
"\nWaits for a specific new block and returns useful info about it.\n"
|
||||
"\nReturns the current block on timeout or exit.\n",
|
||||
@@ -234,7 +228,7 @@ static UniValue waitfornewblock(const JSONRPCRequest& request)
|
||||
HelpExampleCli("waitfornewblock", "1000")
|
||||
+ HelpExampleRpc("waitfornewblock", "1000")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
int timeout = 0;
|
||||
if (!request.params[0].isNull())
|
||||
timeout = request.params[0].get_int();
|
||||
@@ -257,8 +251,6 @@ static UniValue waitfornewblock(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue waitforblock(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"waitforblock",
|
||||
"\nWaits for a specific new block and returns useful info about it.\n"
|
||||
"\nReturns the current block on timeout or exit.\n",
|
||||
@@ -276,7 +268,7 @@ static UniValue waitforblock(const JSONRPCRequest& request)
|
||||
HelpExampleCli("waitforblock", "\"0000000000079f8ef3d2c688c244eb7a4570b24c9ed7b4a8c619eb02596f8862\", 1000")
|
||||
+ HelpExampleRpc("waitforblock", "\"0000000000079f8ef3d2c688c244eb7a4570b24c9ed7b4a8c619eb02596f8862\", 1000")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
int timeout = 0;
|
||||
|
||||
uint256 hash(ParseHashV(request.params[0], "blockhash"));
|
||||
@@ -302,8 +294,6 @@ static UniValue waitforblock(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue waitforblockheight(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"waitforblockheight",
|
||||
"\nWaits for (at least) block height and returns the height and hash\n"
|
||||
"of the current tip.\n"
|
||||
@@ -322,7 +312,7 @@ static UniValue waitforblockheight(const JSONRPCRequest& request)
|
||||
HelpExampleCli("waitforblockheight", "\"100\", 1000")
|
||||
+ HelpExampleRpc("waitforblockheight", "\"100\", 1000")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
int timeout = 0;
|
||||
|
||||
int height = request.params[0].get_int();
|
||||
@@ -347,8 +337,6 @@ static UniValue waitforblockheight(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue syncwithvalidationinterfacequeue(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() > 0) {
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"syncwithvalidationinterfacequeue",
|
||||
"\nWaits for the validation interface queue to catch up on everything that was there when we entered this function.\n",
|
||||
{},
|
||||
@@ -357,16 +345,14 @@ static UniValue syncwithvalidationinterfacequeue(const JSONRPCRequest& request)
|
||||
HelpExampleCli("syncwithvalidationinterfacequeue","")
|
||||
+ HelpExampleRpc("syncwithvalidationinterfacequeue","")
|
||||
},
|
||||
}.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
SyncWithValidationInterfaceQueue();
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
static UniValue getdifficulty(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getdifficulty",
|
||||
"\nReturns the proof-of-work difficulty as a multiple of the minimum difficulty.\n",
|
||||
{},
|
||||
@@ -377,7 +363,7 @@ static UniValue getdifficulty(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getdifficulty", "")
|
||||
+ HelpExampleRpc("getdifficulty", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
return GetDifficulty(::ChainActive().Tip());
|
||||
@@ -504,8 +490,6 @@ UniValue MempoolToJSON(const CTxMemPool& pool, bool verbose)
|
||||
|
||||
static UniValue getrawmempool(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() > 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getrawmempool",
|
||||
"\nReturns all transaction ids in memory pool as a json array of string transaction ids.\n"
|
||||
"\nHint: use getmempoolentry to fetch a specific transaction from the mempool.\n",
|
||||
@@ -528,7 +512,7 @@ static UniValue getrawmempool(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getrawmempool", "true")
|
||||
+ HelpExampleRpc("getrawmempool", "true")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
bool fVerbose = false;
|
||||
if (!request.params[0].isNull())
|
||||
@@ -539,8 +523,6 @@ static UniValue getrawmempool(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getmempoolancestors(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) {
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getmempoolancestors",
|
||||
"\nIf txid is in the mempool, returns all in-mempool ancestors.\n",
|
||||
{
|
||||
@@ -566,8 +548,7 @@ static UniValue getmempoolancestors(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getmempoolancestors", "\"mytxid\"")
|
||||
+ HelpExampleRpc("getmempoolancestors", "\"mytxid\"")
|
||||
},
|
||||
}.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
bool fVerbose = false;
|
||||
if (!request.params[1].isNull())
|
||||
@@ -609,8 +590,6 @@ static UniValue getmempoolancestors(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getmempooldescendants(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) {
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getmempooldescendants",
|
||||
"\nIf txid is in the mempool, returns all in-mempool descendants.\n",
|
||||
{
|
||||
@@ -636,8 +615,7 @@ static UniValue getmempooldescendants(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getmempooldescendants", "\"mytxid\"")
|
||||
+ HelpExampleRpc("getmempooldescendants", "\"mytxid\"")
|
||||
},
|
||||
}.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
bool fVerbose = false;
|
||||
if (!request.params[1].isNull())
|
||||
@@ -679,8 +657,6 @@ static UniValue getmempooldescendants(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getmempoolentry(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 1) {
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getmempoolentry",
|
||||
"\nReturns mempool data for given transaction\n",
|
||||
{
|
||||
@@ -695,8 +671,7 @@ static UniValue getmempoolentry(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getmempoolentry", "\"mytxid\"")
|
||||
+ HelpExampleRpc("getmempoolentry", "\"mytxid\"")
|
||||
},
|
||||
}.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
uint256 hash = ParseHashV(request.params[0], "parameter 1");
|
||||
|
||||
@@ -715,8 +690,6 @@ static UniValue getmempoolentry(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getblockhash(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getblockhash",
|
||||
"\nReturns hash of block in best-block-chain at height provided.\n",
|
||||
{
|
||||
@@ -729,7 +702,7 @@ static UniValue getblockhash(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getblockhash", "1000")
|
||||
+ HelpExampleRpc("getblockhash", "1000")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -743,8 +716,6 @@ static UniValue getblockhash(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getblockheader(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getblockheader",
|
||||
"\nIf verbose is false, returns a string that is serialized, hex-encoded data for blockheader 'hash'.\n"
|
||||
"If verbose is true, returns an Object with information about blockheader <hash>.\n",
|
||||
@@ -780,7 +751,7 @@ static UniValue getblockheader(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getblockheader", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"")
|
||||
+ HelpExampleRpc("getblockheader", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
uint256 hash(ParseHashV(request.params[0], "hash"));
|
||||
|
||||
@@ -846,7 +817,7 @@ static CBlockUndo GetUndoChecked(const CBlockIndex* pblockindex)
|
||||
|
||||
static UniValue getblock(const JSONRPCRequest& request)
|
||||
{
|
||||
const RPCHelpMan help{"getblock",
|
||||
RPCHelpMan{"getblock",
|
||||
"\nIf verbosity is 0, returns a string that is serialized, hex-encoded data for block 'hash'.\n"
|
||||
"If verbosity is 1, returns an Object with information about block <hash>.\n"
|
||||
"If verbosity is 2, returns an Object with information about block <hash> and information about each transaction. \n",
|
||||
@@ -898,11 +869,7 @@ static UniValue getblock(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getblock", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"")
|
||||
+ HelpExampleRpc("getblock", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"")
|
||||
},
|
||||
};
|
||||
|
||||
if (request.fHelp || !help.IsValidNumArgs(request.params.size())) {
|
||||
throw std::runtime_error(help.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
uint256 hash(ParseHashV(request.params[0], "blockhash"));
|
||||
|
||||
@@ -1013,8 +980,6 @@ static bool GetUTXOStats(CCoinsView *view, CCoinsStats &stats)
|
||||
|
||||
static UniValue pruneblockchain(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"pruneblockchain", "",
|
||||
{
|
||||
{"height", RPCArg::Type::NUM, RPCArg::Optional::NO, "The block height to prune up to. May be set to a discrete height, or a unix timestamp\n"
|
||||
@@ -1027,7 +992,7 @@ static UniValue pruneblockchain(const JSONRPCRequest& request)
|
||||
HelpExampleCli("pruneblockchain", "1000")
|
||||
+ HelpExampleRpc("pruneblockchain", "1000")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
if (!fPruneMode)
|
||||
throw JSONRPCError(RPC_MISC_ERROR, "Cannot prune blocks because node is not in prune mode.");
|
||||
@@ -1071,8 +1036,6 @@ static UniValue pruneblockchain(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue gettxoutsetinfo(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"gettxoutsetinfo",
|
||||
"\nReturns statistics about the unspent transaction output set.\n"
|
||||
"Note this call may take some time.\n",
|
||||
@@ -1093,7 +1056,7 @@ static UniValue gettxoutsetinfo(const JSONRPCRequest& request)
|
||||
HelpExampleCli("gettxoutsetinfo", "")
|
||||
+ HelpExampleRpc("gettxoutsetinfo", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
UniValue ret(UniValue::VOBJ);
|
||||
|
||||
@@ -1116,8 +1079,6 @@ static UniValue gettxoutsetinfo(const JSONRPCRequest& request)
|
||||
|
||||
UniValue gettxout(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 2 || request.params.size() > 3)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"gettxout",
|
||||
"\nReturns details about an unspent transaction output.\n",
|
||||
{
|
||||
@@ -1151,7 +1112,7 @@ UniValue gettxout(const JSONRPCRequest& request)
|
||||
"\nAs a JSON-RPC call\n"
|
||||
+ HelpExampleRpc("gettxout", "\"txid\", 1")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -1197,8 +1158,6 @@ static UniValue verifychain(const JSONRPCRequest& request)
|
||||
{
|
||||
int nCheckLevel = gArgs.GetArg("-checklevel", DEFAULT_CHECKLEVEL);
|
||||
int nCheckDepth = gArgs.GetArg("-checkblocks", DEFAULT_CHECKBLOCKS);
|
||||
if (request.fHelp || request.params.size() > 2)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"verifychain",
|
||||
"\nVerifies blockchain database.\n",
|
||||
{
|
||||
@@ -1212,7 +1171,7 @@ static UniValue verifychain(const JSONRPCRequest& request)
|
||||
HelpExampleCli("verifychain", "")
|
||||
+ HelpExampleRpc("verifychain", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -1297,8 +1256,6 @@ static void BIP9SoftForkDescPushBack(UniValue& bip9_softforks, const Consensus::
|
||||
|
||||
UniValue getblockchaininfo(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getblockchaininfo",
|
||||
"Returns an object containing various state info regarding blockchain processing.\n",
|
||||
{},
|
||||
@@ -1350,7 +1307,7 @@ UniValue getblockchaininfo(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getblockchaininfo", "")
|
||||
+ HelpExampleRpc("getblockchaininfo", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -1417,8 +1374,6 @@ struct CompareBlocksByHeight
|
||||
|
||||
static UniValue getchaintips(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getchaintips",
|
||||
"Return information about all known tips in the block tree,"
|
||||
" including the main chain as well as orphaned branches.\n",
|
||||
@@ -1449,7 +1404,7 @@ static UniValue getchaintips(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getchaintips", "")
|
||||
+ HelpExampleRpc("getchaintips", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -1540,8 +1495,6 @@ UniValue MempoolInfoToJSON(const CTxMemPool& pool)
|
||||
|
||||
static UniValue getmempoolinfo(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getmempoolinfo",
|
||||
"\nReturns details on the active state of the TX memory pool.\n",
|
||||
{},
|
||||
@@ -1560,15 +1513,13 @@ static UniValue getmempoolinfo(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getmempoolinfo", "")
|
||||
+ HelpExampleRpc("getmempoolinfo", "")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
return MempoolInfoToJSON(::mempool);
|
||||
}
|
||||
|
||||
static UniValue preciousblock(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"preciousblock",
|
||||
"\nTreats a block as if it were received before others with the same work.\n"
|
||||
"\nA later preciousblock call can override the effect of an earlier one.\n"
|
||||
@@ -1581,7 +1532,7 @@ static UniValue preciousblock(const JSONRPCRequest& request)
|
||||
HelpExampleCli("preciousblock", "\"blockhash\"")
|
||||
+ HelpExampleRpc("preciousblock", "\"blockhash\"")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
uint256 hash(ParseHashV(request.params[0], "blockhash"));
|
||||
CBlockIndex* pblockindex;
|
||||
@@ -1606,8 +1557,6 @@ static UniValue preciousblock(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue invalidateblock(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"invalidateblock",
|
||||
"\nPermanently marks a block as invalid, as if it violated a consensus rule.\n",
|
||||
{
|
||||
@@ -1618,7 +1567,7 @@ static UniValue invalidateblock(const JSONRPCRequest& request)
|
||||
HelpExampleCli("invalidateblock", "\"blockhash\"")
|
||||
+ HelpExampleRpc("invalidateblock", "\"blockhash\"")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
uint256 hash(ParseHashV(request.params[0], "blockhash"));
|
||||
CValidationState state;
|
||||
@@ -1646,8 +1595,6 @@ static UniValue invalidateblock(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue reconsiderblock(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 1)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"reconsiderblock",
|
||||
"\nRemoves invalidity status of a block, its ancestors and its descendants, reconsider them for activation.\n"
|
||||
"This can be used to undo the effects of invalidateblock.\n",
|
||||
@@ -1659,7 +1606,7 @@ static UniValue reconsiderblock(const JSONRPCRequest& request)
|
||||
HelpExampleCli("reconsiderblock", "\"blockhash\"")
|
||||
+ HelpExampleRpc("reconsiderblock", "\"blockhash\"")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
uint256 hash(ParseHashV(request.params[0], "blockhash"));
|
||||
|
||||
@@ -1685,8 +1632,6 @@ static UniValue reconsiderblock(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getchaintxstats(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() > 2)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getchaintxstats",
|
||||
"\nCompute statistics about the total number and rate of transactions in the chain.\n",
|
||||
{
|
||||
@@ -1708,7 +1653,7 @@ static UniValue getchaintxstats(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getchaintxstats", "")
|
||||
+ HelpExampleRpc("getchaintxstats", "2016")
|
||||
},
|
||||
}.ToString());
|
||||
}.Check(request);
|
||||
|
||||
const CBlockIndex* pindex;
|
||||
int blockcount = 30 * 24 * 60 * 60 / Params().GetConsensus().nPowTargetSpacing; // By default: 1 month
|
||||
@@ -1818,7 +1763,7 @@ static constexpr size_t PER_UTXO_OVERHEAD = sizeof(COutPoint) + sizeof(uint32_t)
|
||||
|
||||
static UniValue getblockstats(const JSONRPCRequest& request)
|
||||
{
|
||||
const RPCHelpMan help{"getblockstats",
|
||||
RPCHelpMan{"getblockstats",
|
||||
"\nCompute per block statistics for a given window. All amounts are in satoshis.\n"
|
||||
"It won't work for some heights with pruning.\n",
|
||||
{
|
||||
@@ -1873,10 +1818,7 @@ static UniValue getblockstats(const JSONRPCRequest& request)
|
||||
HelpExampleCli("getblockstats", "1000 '[\"minfeerate\",\"avgfeerate\"]'")
|
||||
+ HelpExampleRpc("getblockstats", "1000 '[\"minfeerate\",\"avgfeerate\"]'")
|
||||
},
|
||||
};
|
||||
if (request.fHelp || !help.IsValidNumArgs(request.params.size())) {
|
||||
throw std::runtime_error(help.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -2077,8 +2019,6 @@ static UniValue getblockstats(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue savemempool(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() != 0) {
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"savemempool",
|
||||
"\nDumps the mempool to disk. It will fail until the previous dump is fully loaded.\n",
|
||||
{},
|
||||
@@ -2087,8 +2027,7 @@ static UniValue savemempool(const JSONRPCRequest& request)
|
||||
HelpExampleCli("savemempool", "")
|
||||
+ HelpExampleRpc("savemempool", "")
|
||||
},
|
||||
}.ToString());
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
if (!::mempool.IsLoaded()) {
|
||||
throw JSONRPCError(RPC_MISC_ERROR, "The mempool was not loaded yet");
|
||||
@@ -2163,8 +2102,6 @@ public:
|
||||
|
||||
UniValue scantxoutset(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"scantxoutset",
|
||||
"\nEXPERIMENTAL warning: this call may be removed or changed in future releases.\n"
|
||||
"\nScans the unspent transaction output set for entries that match certain output descriptors.\n"
|
||||
@@ -2213,8 +2150,7 @@ UniValue scantxoutset(const JSONRPCRequest& request)
|
||||
"]\n"
|
||||
},
|
||||
RPCExamples{""},
|
||||
}.ToString()
|
||||
);
|
||||
}.Check(request);
|
||||
|
||||
RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VARR});
|
||||
|
||||
@@ -2301,8 +2237,6 @@ UniValue scantxoutset(const JSONRPCRequest& request)
|
||||
|
||||
static UniValue getblockfilter(const JSONRPCRequest& request)
|
||||
{
|
||||
if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) {
|
||||
throw std::runtime_error(
|
||||
RPCHelpMan{"getblockfilter",
|
||||
"\nRetrieve a BIP 157 content filter for a particular block.\n",
|
||||
{
|
||||
@@ -2318,9 +2252,7 @@ static UniValue getblockfilter(const JSONRPCRequest& request)
|
||||
RPCExamples{
|
||||
HelpExampleCli("getblockfilter", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\" \"basic\"")
|
||||
}
|
||||
}.ToString()
|
||||
);
|
||||
}
|
||||
}.Check(request);
|
||||
|
||||
uint256 block_hash = ParseHashV(request.params[0], "blockhash");
|
||||
std::string filtertype_name = "basic";
|
||||
|
||||
Reference in New Issue
Block a user