Bitcoin Core 31.99.0
P2P Digital Currency
util.h
Go to the documentation of this file.
1// Copyright (c) 2017-present 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_RPC_UTIL_H
6#define BITCOIN_RPC_UTIL_H
7
8#include <addresstype.h>
9#include <consensus/amount.h>
10#include <node/transaction.h>
11#include <outputtype.h>
12#include <pubkey.h>
13#include <rpc/protocol.h>
14#include <rpc/request.h>
15#include <script/script.h>
16#include <script/sign.h>
17#include <uint256.h>
18#include <univalue.h>
19#include <util/check.h>
20
21#include <cstddef>
22#include <cstdint>
23#include <functional>
24#include <initializer_list>
25#include <map>
26#include <optional>
27#include <string>
28#include <string_view>
29#include <type_traits>
30#include <utility>
31#include <variant>
32#include <vector>
33
34class JSONRPCRequest;
35enum ServiceFlags : uint64_t;
36enum class OutputType;
38struct bilingual_str;
39namespace common {
40enum class PSBTError;
41} // namespace common
42namespace node {
43enum class TransactionError;
44} // namespace node
45
46inline constexpr bool DEFAULT_RPC_DOC_CHECK{
47#ifdef RPC_DOC_CHECK
48 true
49#else
50 false
51#endif
52};
53
58extern const std::string UNIX_EPOCH_TIME;
59
64extern const std::string EXAMPLE_ADDRESS[2];
65
67class CScript;
68struct Sections;
69
70struct HelpResult : std::runtime_error {
71 explicit HelpResult(const std::string& msg) : std::runtime_error{msg} {}
72};
73
79std::string GetAllOutputTypes();
80
84 UniValueType(UniValue::VType _type) : typeAny(false), type(_type) {}
85 UniValueType() : typeAny(true) {}
86 bool typeAny;
88};
89
90/*
91 Check for expected keys/value types in an Object.
92*/
93void RPCTypeCheckObj(const UniValue& o,
94 const std::map<std::string, UniValueType>& typesExpected,
95 bool fAllowNull = false,
96 bool fStrict = false);
97
102uint256 ParseHashV(const UniValue& v, std::string_view name);
103uint256 ParseHashO(const UniValue& o, std::string_view strKey);
104std::vector<unsigned char> ParseHexV(const UniValue& v, std::string_view name);
105std::vector<unsigned char> ParseHexO(const UniValue& o, std::string_view strKey);
106
116int ParseVerbosity(const UniValue& arg, int default_verbosity, bool allow_bool);
117
125CAmount AmountFromValue(const UniValue& value, int decimals = 8);
131
132using RPCArgList = std::vector<std::pair<std::string, UniValue>>;
133std::string HelpExampleCli(const std::string& methodname, const std::string& args);
134std::string HelpExampleCliNamed(const std::string& methodname, const RPCArgList& args);
135std::string HelpExampleRpc(const std::string& methodname, const std::string& args);
136std::string HelpExampleRpcNamed(const std::string& methodname, const RPCArgList& args);
137
138CPubKey HexToPubKey(const std::string& hex_in);
139CTxDestination AddAndGetMultisigDestination(int required, const std::vector<CPubKey>& pubkeys, OutputType type, FlatSigningProvider& keystore, CScript& script_out);
140
142
144std::optional<int> ParseSighashString(const UniValue& sighash);
145
147unsigned int ParseConfirmTarget(const UniValue& value, unsigned int max_target);
148
151UniValue JSONRPCTransactionError(node::TransactionError terr, const std::string& err_string = "");
152
154std::pair<int64_t, int64_t> ParseDescriptorRange(const UniValue& value);
155
157std::vector<CScript> EvalDescriptorStringOrObject(const UniValue& scanobject, FlatSigningProvider& provider, bool expand_priv = false);
158
160std::vector<uint32_t> ParsePathBIP32(const std::string& path);
161
166enum class OuterType {
167 ARR,
168 OBJ,
169 NONE, // Only set on first recursion
170};
171
173 bool skip_type_check{false};
174 std::string oneline_description{};
175 std::vector<std::string> type_str{};
176 bool placeholder{false};
177 bool hidden{false};
178 bool also_positional{false};
187};
188
189// NOLINTNEXTLINE(misc-no-recursion)
190struct RPCArg {
191 enum class Type {
192 OBJ,
193 ARR,
194 STR,
195 NUM,
196 BOOL,
197 OBJ_NAMED_PARAMS,
204 OBJ_USER_KEYS,
205 AMOUNT,
206 STR_HEX,
207 RANGE,
208 };
209
210 enum class Optional {
212 NO,
221 OMITTED,
222 };
224 using DefaultHint = std::string;
227 using Fallback = std::variant<Optional, DefaultHint, Default>;
228
229 const std::string m_names;
231 const std::vector<RPCArg> m_inner;
233 const std::string m_description;
235
237 std::string name,
238 Type type,
239 Fallback fallback,
240 std::string description,
241 RPCArgOptions opts = {})
242 : m_names{std::move(name)},
243 m_type{type},
244 m_fallback{std::move(fallback)},
245 m_description{std::move(description)},
246 m_opts{std::move(opts)}
247 {
248 CHECK_NONFATAL(type != Type::ARR && type != Type::OBJ && type != Type::OBJ_NAMED_PARAMS && type != Type::OBJ_USER_KEYS);
249 }
250
252 std::string name,
253 Type type,
254 Fallback fallback,
255 std::string description,
256 std::vector<RPCArg> inner,
257 RPCArgOptions opts = {})
258 : m_names{std::move(name)},
259 m_type{type},
260 m_inner{std::move(inner)},
261 m_fallback{std::move(fallback)},
262 m_description{std::move(description)},
263 m_opts{std::move(opts)}
264 {
265 CHECK_NONFATAL(type == Type::ARR || type == Type::OBJ || type == Type::OBJ_NAMED_PARAMS || type == Type::OBJ_USER_KEYS);
266 }
267
268 bool IsOptional() const;
269
274 UniValue MatchesType(const UniValue& request) const;
275
277 std::string GetFirstName() const;
278
280 std::string GetName() const;
281
286 std::string ToString(bool oneline) const;
291 std::string ToStringObj(bool oneline) const;
296 std::string ToDescriptionString(bool is_named_arg) const;
297};
298
303using HelpElision = std::variant<HelpElisionNone, HelpElisionSkip, std::string>;
304
306 bool skip_type_check{false};
308};
309
310// NOLINTNEXTLINE(misc-no-recursion)
311struct RPCResult {
312 enum class Type {
313 OBJ,
314 ARR,
315 STR,
316 NUM,
317 BOOL,
318 NONE,
319 ANY,
320 STR_AMOUNT,
321 STR_HEX,
322 OBJ_DYN,
323 ARR_FIXED,
324 NUM_TIME,
325 };
326
328 const std::string m_key_name;
329 const std::vector<RPCResult> m_inner;
330 const bool m_optional;
332 const std::string m_description;
333 const std::string m_cond;
334
336 std::string cond,
337 Type type,
338 std::string m_key_name,
339 bool optional,
340 std::string description,
341 std::vector<RPCResult> inner = {},
342 RPCResultOptions opts = {})
343 : m_type{type},
344 m_key_name{std::move(m_key_name)},
345 m_inner{std::move(inner)},
346 m_optional{optional},
347 m_opts{std::move(opts)},
348 m_description{std::move(description)},
349 m_cond{std::move(cond)}
350 {
351 CHECK_NONFATAL(!m_cond.empty());
353 }
354
356 std::string cond,
357 Type type,
358 std::string m_key_name,
359 std::string description,
360 std::vector<RPCResult> inner = {},
361 RPCResultOptions opts = {})
362 : RPCResult{std::move(cond), type, std::move(m_key_name), /*optional=*/false, std::move(description), std::move(inner), std::move(opts)} {}
363
365 Type type,
366 std::string m_key_name,
367 bool optional,
368 std::string description,
369 std::vector<RPCResult> inner = {},
370 RPCResultOptions opts = {})
371 : m_type{type},
372 m_key_name{std::move(m_key_name)},
373 m_inner{std::move(inner)},
374 m_optional{optional},
375 m_opts{std::move(opts)},
376 m_description{std::move(description)},
377 m_cond{}
378 {
380 }
381
383 Type type,
384 std::string m_key_name,
385 std::string description,
386 std::vector<RPCResult> inner = {},
387 RPCResultOptions opts = {})
388 : RPCResult{type, std::move(m_key_name), /*optional=*/false, std::move(description), std::move(inner), std::move(opts)} {}
389
392 : m_type{other.m_type},
393 m_key_name{other.m_key_name},
394 m_inner{other.m_inner},
395 m_optional{other.m_optional},
396 m_opts{std::move(opts)},
398 m_cond{other.m_cond} {}
399
401 void ToSections(Sections& sections, OuterType outer_type = OuterType::NONE, int current_indent = 0) const;
403 std::string ToStringObj() const;
405 std::string ToDescriptionString() const;
409 UniValue MatchesType(const UniValue& result) const;
410
411private:
412 void CheckInnerDoc() const;
413};
414
417std::vector<RPCResult> ElideGroup(std::vector<RPCResult> fields, std::string summary = "");
418
420 const std::vector<RPCResult> m_results;
421
423 : m_results{{result}}
424 {
425 }
426
427 RPCResults(std::initializer_list<RPCResult> results)
428 : m_results{results}
429 {
430 }
431
435 std::string ToDescriptionString() const;
436};
437
439 const std::string m_examples;
440 explicit RPCExamples(
441 std::string examples)
442 : m_examples(std::move(examples))
443 {
444 }
445 std::string ToDescriptionString() const;
446};
447
449{
450public:
451 RPCMethod(std::string name, std::string description, std::vector<RPCArg> args, RPCResults results, RPCExamples examples);
452 using RPCMethodImpl = std::function<UniValue(const RPCMethod&, const JSONRPCRequest&)>;
453 RPCMethod(std::string name, std::string description, std::vector<RPCArg> args, RPCResults results, RPCExamples examples, RPCMethodImpl fun);
454
455 UniValue HandleRequest(const JSONRPCRequest& request) const;
473 template <typename R>
474 auto Arg(std::string_view key) const
475 {
476 auto i{GetParamIndex(key)};
477 // Return argument (required or with default value).
478 if constexpr (std::is_trivially_copyable_v<R>) {
479 // Return trivially copyable types by value.
480 return ArgValue<R>(i);
481 } else {
482 // Return everything else by reference.
483 return ArgValue<const R&>(i);
484 }
485 }
505 template <typename R>
506 auto MaybeArg(std::string_view key) const
507 {
508 auto i{GetParamIndex(key)};
509 // Return optional argument (without default).
510 if constexpr (std::is_trivially_copyable_v<R>) {
511 // Return trivially copyable types by value, wrapped in optional.
512 return ArgValue<std::optional<R>>(i);
513 } else {
514 // Return other types by pointer.
515 return ArgValue<const R*>(i);
516 }
517 }
518 std::string ToString() const;
520 UniValue GetArgMap() const;
522 bool IsValidNumArgs(size_t num_args) const;
524 std::vector<std::pair<std::string, bool>> GetArgNames() const;
525 const std::string& GetDescription() const { return m_description; }
526 const std::vector<RPCArg>& GetArgs() const { return m_args; }
527 const RPCResults& GetResults() const { return m_results; }
528
529 const std::string m_name;
530
531private:
533 const std::string m_description;
534 const std::vector<RPCArg> m_args;
537 mutable const JSONRPCRequest* m_req{nullptr}; // A pointer to the request for the duration of m_fun()
538 template <typename R>
539 R ArgValue(size_t i) const;
541 size_t GetParamIndex(std::string_view key) const;
542};
543
550void PushWarnings(const UniValue& warnings, UniValue& obj);
551void PushWarnings(const std::vector<bilingual_str>& warnings, UniValue& obj);
552
553std::vector<RPCResult> ScriptPubKeyDoc();
554
555/***
556 * Get the target for a given block index.
557 *
558 * @param[in] blockindex the block
559 * @param[in] pow_limit PoW limit (consensus parameter)
560 *
561 * @return the target
562 */
563uint256 GetTarget(const CBlockIndex& blockindex, uint256 pow_limit);
564
565#endif // BITCOIN_RPC_UTIL_H
std::variant< CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown > CTxDestination
A txout script categorized into standard templates.
Definition: addresstype.h:143
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
ArgsManager & args
Definition: bitcoind.cpp:280
#define CHECK_NONFATAL(condition)
Identity function.
Definition: check.h:112
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: chain.h:94
Fee rate in satoshis per virtualbyte: CAmount / vB the feerate is represented internally as FeeFrac.
Definition: feerate.h:32
An encapsulated public key.
Definition: pubkey.h:40
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:406
Fillable signing provider that keeps keys in an address->secret map.
const RPCExamples m_examples
Definition: util.h:536
const std::string m_name
Definition: util.h:529
const std::string m_description
Definition: util.h:533
R ArgValue(size_t i) const
const RPCResults & GetResults() const
Definition: util.h:527
const std::vector< RPCArg > & GetArgs() const
Definition: util.h:526
const JSONRPCRequest * m_req
Definition: util.h:537
std::function< UniValue(const RPCMethod &, const JSONRPCRequest &)> RPCMethodImpl
Definition: util.h:452
RPCMethod(std::string name, std::string description, std::vector< RPCArg > args, RPCResults results, RPCExamples examples)
Definition: util.cpp:548
const RPCMethodImpl m_fun
Definition: util.h:532
bool IsValidNumArgs(size_t num_args) const
If the supplied number of args is neither too small nor too high.
Definition: util.cpp:738
auto MaybeArg(std::string_view key) const
Helper to get an optional request argument.
Definition: util.h:506
std::vector< std::pair< std::string, bool > > GetArgNames() const
Return list of arguments and whether they are named-only.
Definition: util.cpp:750
const RPCResults m_results
Definition: util.h:535
const std::vector< RPCArg > m_args
Definition: util.h:534
size_t GetParamIndex(std::string_view key) const
Return positional index of a parameter using its name as key.
Definition: util.cpp:765
UniValue HandleRequest(const JSONRPCRequest &request) const
Definition: util.cpp:640
UniValue GetArgMap() const
Return the named args that need to be converted from string to another JSON type.
Definition: util.cpp:838
std::string ToString() const
Definition: util.cpp:775
const std::string & GetDescription() const
Definition: util.h:525
auto Arg(std::string_view key) const
Helper to get a required or default-valued request argument.
Definition: util.h:474
256-bit opaque blob.
Definition: uint256.h:196
char const * json() noexcept
Template to generate JSON data.
Definition: init.cpp:17
PSBTError
Definition: types.h:19
Definition: messages.h:22
TransactionError
Definition: types.h:19
OutputType
Definition: outputtype.h:18
ServiceFlags
nServices flags
Definition: protocol.h:321
const char * name
Definition: rest.cpp:56
RPCErrorCode
Bitcoin RPC error codes.
Definition: protocol.h:48
std::vector< uint32_t > ParsePathBIP32(const std::string &path)
Parse BIP32 path.
Definition: util.cpp:1383
RPCErrorCode RPCErrorFromTransactionError(node::TransactionError terr)
CTxDestination AddAndGetMultisigDestination(int required, const std::vector< CPubKey > &pubkeys, OutputType type, FlatSigningProvider &keystore, CScript &script_out)
Definition: util.cpp:236
std::pair< int64_t, int64_t > ParseDescriptorRange(const UniValue &value)
Parse a JSON range specified as int64, or [int64, int64].
Definition: util.cpp:1324
std::string HelpExampleCli(const std::string &methodname, const std::string &args)
Definition: util.cpp:184
std::vector< std::pair< std::string, UniValue > > RPCArgList
Definition: util.h:132
std::string HelpExampleRpcNamed(const std::string &methodname, const RPCArgList &args)
Definition: util.cpp:208
std::vector< CScript > EvalDescriptorStringOrObject(const UniValue &scanobject, FlatSigningProvider &provider, bool expand_priv=false)
Evaluate a descriptor given as a string, or as a {"desc":...,"range":...} object, with default range ...
Definition: util.cpp:1340
std::vector< unsigned char > ParseHexV(const UniValue &v, std::string_view name)
Definition: util.cpp:131
constexpr bool DEFAULT_RPC_DOC_CHECK
Definition: util.h:46
void PushWarnings(const UniValue &warnings, UniValue &obj)
Push warning messages to an RPC "warnings" field as a JSON array of strings.
Definition: util.cpp:1403
uint256 GetTarget(const CBlockIndex &blockindex, uint256 pow_limit)
Definition: util.cpp:1426
std::vector< RPCResult > ElideGroup(std::vector< RPCResult > fields, std::string summary="")
Stamp elision onto an entire vector of RPCResult fields at once.
Definition: util.cpp:1432
std::vector< unsigned char > ParseHexO(const UniValue &o, std::string_view strKey)
Definition: util.cpp:140
CFeeRate ParseFeeRate(const UniValue &json)
Parse a json number or string, denoting BTC/kvB, into a CFeeRate (sat/kvB).
Definition: util.cpp:111
OuterType
Serializing JSON objects depends on the outer type.
Definition: util.h:166
std::variant< HelpElisionNone, HelpElisionSkip, std::string > HelpElision
Definition: util.h:303
std::string HelpExampleRpc(const std::string &methodname, const std::string &args)
Definition: util.cpp:202
CAmount AmountFromValue(const UniValue &value, int decimals=8)
Validate and return a CAmount from a UniValue number or string.
Definition: util.cpp:99
const std::string UNIX_EPOCH_TIME
String used to describe UNIX epoch time in documentation, factored out to a constant for consistency.
Definition: util.cpp:44
void RPCTypeCheckObj(const UniValue &o, const std::map< std::string, UniValueType > &typesExpected, bool fAllowNull=false, bool fStrict=false)
Definition: util.cpp:57
std::string GetAllOutputTypes()
Gets all existing output types formatted for RPC help sections.
Definition: util.cpp:47
UniValue JSONRPCTransactionError(node::TransactionError terr, const std::string &err_string="")
int ParseVerbosity(const UniValue &arg, int default_verbosity, bool allow_bool)
Parses verbosity from provided UniValue.
Definition: util.cpp:84
UniValue JSONRPCPSBTError(common::PSBTError err)
CPubKey HexToPubKey(const std::string &hex_in)
Definition: util.cpp:220
std::optional< int > ParseSighashString(const UniValue &sighash)
Parse a sighash string representation and raise an RPC error if it is invalid.
Definition: util.cpp:358
const std::string EXAMPLE_ADDRESS[2]
Example bech32 addresses for the RPCExamples help documentation.
Definition: util.cpp:45
uint256 ParseHashO(const UniValue &o, std::string_view strKey)
Definition: util.cpp:127
unsigned int ParseConfirmTarget(const UniValue &value, unsigned int max_target)
Parse a confirm target option and raise an RPC error if it is invalid.
Definition: util.cpp:370
std::string HelpExampleCliNamed(const std::string &methodname, const RPCArgList &args)
Definition: util.cpp:189
uint256 ParseHashV(const UniValue &v, std::string_view name)
Utilities: convert hex-encoded Values (throws error if not hex).
Definition: util.cpp:118
UniValue DescribeAddress(const CTxDestination &dest)
Definition: util.cpp:348
std::vector< RPCResult > ScriptPubKeyDoc()
Definition: util.cpp:1415
#define STR(x)
Definition: util.h:23
Controls how an RPCResult is rendered in human-readable help text.field printed normally.
Definition: util.h:301
field hidden from help
Definition: util.h:302
HelpResult(const std::string &msg)
Definition: util.h:71
Definition: util.h:190
Type
Definition: util.h:191
@ OBJ_USER_KEYS
Special type where the user must set the keys e.g. to define multiple addresses; as opposed to e....
@ OBJ_NAMED_PARAMS
Special type that behaves almost exactly like OBJ, defining an options object with a list of pre-defi...
const std::vector< RPCArg > m_inner
Only used for arrays or dicts.
Definition: util.h:231
const RPCArgOptions m_opts
Definition: util.h:234
const std::string m_names
The name of the arg (can be empty for inner args, can contain multiple aliases separated by | for nam...
Definition: util.h:229
const Fallback m_fallback
Definition: util.h:232
std::string ToString(bool oneline) const
Return the type string of the argument.
Definition: util.cpp:1265
RPCArg(std::string name, Type type, Fallback fallback, std::string description, RPCArgOptions opts={})
Definition: util.h:236
UniValue MatchesType(const UniValue &request) const
Check whether the request JSON type matches.
Definition: util.cpp:904
const std::string m_description
Definition: util.h:233
std::string DefaultHint
Hint for default value.
Definition: util.h:224
bool IsOptional() const
Definition: util.cpp:928
std::variant< Optional, DefaultHint, Default > Fallback
Definition: util.h:227
std::string ToDescriptionString(bool is_named_arg) const
Return the description string, including the argument type and whether the argument is required.
Definition: util.cpp:937
const Type m_type
Definition: util.h:230
RPCArg(std::string name, Type type, Fallback fallback, std::string description, std::vector< RPCArg > inner, RPCArgOptions opts={})
Definition: util.h:251
std::string GetName() const
Return the name, throws when there are aliases.
Definition: util.cpp:922
std::string GetFirstName() const
Return the first of all aliases.
Definition: util.cpp:917
std::string ToStringObj(bool oneline) const
Return the type string of the argument when it is in an object (dict).
Definition: util.cpp:1226
Optional
Definition: util.h:210
bool hidden
For testing only.
Definition: util.h:177
std::vector< std::string > type_str
Should be empty unless it is supposed to override the auto-generated type strings....
Definition: util.h:175
std::string oneline_description
Should be empty unless it is supposed to override the auto-generated summary line.
Definition: util.h:174
bool also_positional
If set allows a named-parameter field in an OBJ_NAMED_PARAM options object to have the same name as a...
Definition: util.h:178
bool placeholder
If set, the argument is retained only for compatibility and should generally be omitted.
Definition: util.h:176
bool skip_type_check
Definition: util.h:173
std::string ToDescriptionString() const
Definition: util.cpp:635
RPCExamples(std::string examples)
Definition: util.h:440
const std::string m_examples
Definition: util.h:439
const std::string m_description
Definition: util.h:332
void ToSections(Sections &sections, OuterType outer_type=OuterType::NONE, int current_indent=0) const
Append the sections of the result.
Definition: util.cpp:1002
const std::vector< RPCResult > m_inner
Only used for arrays or dicts.
Definition: util.h:329
RPCResult(std::string cond, Type type, std::string m_key_name, bool optional, std::string description, std::vector< RPCResult > inner={}, RPCResultOptions opts={})
Definition: util.h:335
RPCResult(Type type, std::string m_key_name, bool optional, std::string description, std::vector< RPCResult > inner={}, RPCResultOptions opts={})
Definition: util.h:364
const std::string m_cond
Definition: util.h:333
UniValue MatchesType(const UniValue &result) const
Check whether the result JSON type matches.
Definition: util.cpp:1148
std::string ToDescriptionString() const
Return the description string, including the result type.
std::string ToStringObj() const
Return the type string of the result when it is in an object (dict).
RPCResult(Type type, std::string m_key_name, std::string description, std::vector< RPCResult > inner={}, RPCResultOptions opts={})
Definition: util.h:382
void CheckInnerDoc() const
Definition: util.cpp:1214
RPCResult(std::string cond, Type type, std::string m_key_name, std::string description, std::vector< RPCResult > inner={}, RPCResultOptions opts={})
Definition: util.h:355
RPCResult(const RPCResult &other, RPCResultOptions opts)
Copy with replacement options, for stamping new opts onto an existing result.
Definition: util.h:391
const bool m_optional
Definition: util.h:330
const RPCResultOptions m_opts
Definition: util.h:331
const std::string m_key_name
Only used for dicts.
Definition: util.h:328
const Type m_type
Definition: util.h:327
bool skip_type_check
Definition: util.h:306
HelpElision print_elision
Definition: util.h:307
RPCResults(RPCResult result)
Definition: util.h:422
const std::vector< RPCResult > m_results
Definition: util.h:420
RPCResults(std::initializer_list< RPCResult > results)
Definition: util.h:427
Keeps track of RPCArgs by transforming them into sections for the purpose of serializing everything t...
Definition: util.cpp:435
Wrapper for UniValue::VType, which includes typeAny: Used to denote don't care type.
Definition: util.h:83
bool typeAny
Definition: util.h:86
UniValueType(UniValue::VType _type)
Definition: util.h:84
UniValue::VType type
Definition: util.h:87
UniValueType()
Definition: util.h:85
Bilingual messages:
Definition: translation.h:24
FuzzedDataProvider provider
Definition: dbwrapper.cpp:366
#define NUM
Definition: tests.c:3899