30 {
"setmocktime", 0,
"timestamp"},
31 {
"mockscheduler", 0,
"delta_time"},
32 {
"utxoupdatepsbt", 1,
"descriptors"},
33 {
"generatetoaddress", 0,
"nblocks"},
34 {
"generatetoaddress", 2,
"maxtries"},
35 {
"generatetodescriptor", 0,
"num_blocks"},
36 {
"generatetodescriptor", 2,
"maxtries"},
37 {
"generateblock", 1,
"transactions"},
38 {
"getnetworkhashps", 0,
"nblocks"},
39 {
"getnetworkhashps", 1,
"height"},
40 {
"sendtoaddress", 1,
"amount"},
41 {
"sendtoaddress", 4,
"subtractfeefromamount"},
42 {
"sendtoaddress", 5,
"avoid_reuse"},
43 {
"settxfee", 0,
"amount"},
44 {
"sethdseed", 0,
"newkeypool"},
45 {
"getreceivedbyaddress", 1,
"minconf"},
46 {
"getreceivedbylabel", 1,
"minconf"},
47 {
"listreceivedbyaddress", 0,
"minconf"},
48 {
"listreceivedbyaddress", 1,
"include_empty"},
49 {
"listreceivedbyaddress", 2,
"include_watchonly"},
50 {
"listreceivedbylabel", 0,
"minconf"},
51 {
"listreceivedbylabel", 1,
"include_empty"},
52 {
"listreceivedbylabel", 2,
"include_watchonly"},
53 {
"getbalance", 1,
"minconf"},
54 {
"getbalance", 2,
"include_watchonly"},
55 {
"getbalance", 3,
"avoid_reuse"},
56 {
"getblockfrompeer", 1,
"peer_id"},
57 {
"getblockhash", 0,
"height"},
58 {
"waitforblockheight", 0,
"height"},
59 {
"waitforblockheight", 1,
"timeout"},
60 {
"waitforblock", 1,
"timeout"},
61 {
"waitfornewblock", 0,
"timeout"},
62 {
"listtransactions", 1,
"count"},
63 {
"listtransactions", 2,
"skip"},
64 {
"listtransactions", 3,
"include_watchonly"},
65 {
"walletpassphrase", 1,
"timeout"},
66 {
"getblocktemplate", 0,
"template_request"},
67 {
"listsinceblock", 1,
"target_confirmations"},
68 {
"listsinceblock", 2,
"include_watchonly"},
69 {
"listsinceblock", 3,
"include_removed"},
70 {
"sendmany", 1,
"amounts"},
71 {
"sendmany", 2,
"minconf"},
72 {
"sendmany", 4,
"subtractfeefrom"},
73 {
"deriveaddresses", 1,
"range"},
74 {
"scantxoutset", 1,
"scanobjects"},
75 {
"addmultisigaddress", 0,
"nrequired"},
76 {
"addmultisigaddress", 1,
"keys"},
77 {
"createmultisig", 0,
"nrequired"},
78 {
"createmultisig", 1,
"keys"},
79 {
"listunspent", 0,
"minconf"},
80 {
"listunspent", 1,
"maxconf"},
81 {
"listunspent", 2,
"addresses"},
82 {
"listunspent", 3,
"include_unsafe"},
83 {
"listunspent", 4,
"query_options"},
84 {
"listunspent", 4,
"minimumAmount"},
85 {
"listunspent", 4,
"maximumAmount"},
86 {
"listunspent", 4,
"maximumCount"},
87 {
"listunspent", 4,
"minimumSumAmount"},
88 {
"getblock", 1,
"verbosity"},
89 {
"getblock", 1,
"verbose"},
90 {
"getblockheader", 1,
"verbose"},
91 {
"getchaintxstats", 0,
"nblocks"},
92 {
"gettransaction", 1,
"include_watchonly"},
93 {
"gettransaction", 2,
"verbose"},
94 {
"getrawtransaction", 1,
"verbose"},
95 {
"createrawtransaction", 0,
"inputs"},
96 {
"createrawtransaction", 1,
"outputs"},
97 {
"createrawtransaction", 2,
"locktime"},
98 {
"signrawtransactionwithkey", 1,
"privkeys"},
99 {
"signrawtransactionwithkey", 2,
"prevtxs"},
100 {
"signrawtransactionwithwallet", 1,
"prevtxs"},
101 {
"sendrawtransaction", 1,
"maxfeerate"},
102 {
"submitpackage", 0,
"package"},
103 {
"testmempoolaccept", 0,
"rawtxs"},
104 {
"testmempoolaccept", 1,
"maxfeerate"},
105 {
"combinerawtransaction", 0,
"txs"},
106 {
"fundrawtransaction", 1,
"options"},
107 {
"fundrawtransaction", 1,
"add_inputs"},
108 {
"fundrawtransaction", 1,
"include_unsafe"},
109 {
"fundrawtransaction", 1,
"changePosition"},
110 {
"fundrawtransaction", 1,
"includeWatching"},
111 {
"fundrawtransaction", 1,
"lockUnspents"},
112 {
"fundrawtransaction", 1,
"feeRate"},
113 {
"fundrawtransaction", 1,
"subtractFeeFromOutputs"},
114 {
"walletcreatefundedpsbt", 0,
"inputs"},
115 {
"walletcreatefundedpsbt", 1,
"outputs"},
116 {
"walletcreatefundedpsbt", 2,
"locktime"},
117 {
"walletcreatefundedpsbt", 3,
"options"},
118 {
"walletcreatefundedpsbt", 3,
"add_inputs"},
119 {
"walletcreatefundedpsbt", 3,
"include_unsafe"},
120 {
"walletcreatefundedpsbt", 3,
"changePosition"},
121 {
"walletcreatefundedpsbt", 3,
"includeWatching"},
122 {
"walletcreatefundedpsbt", 3,
"lockUnspents"},
123 {
"walletcreatefundedpsbt", 3,
"feeRate"},
124 {
"walletcreatefundedpsbt", 3,
"subtractFeeFromOutputs"},
125 {
"walletcreatefundedpsbt", 4,
"bip32derivs"},
126 {
"walletprocesspsbt", 1,
"sign"},
127 {
"walletprocesspsbt", 3,
"bip32derivs"},
128 {
"createpsbt", 0,
"inputs"},
129 {
"createpsbt", 1,
"outputs"},
130 {
"createpsbt", 2,
"locktime"},
131 {
"combinepsbt", 0,
"txs"},
132 {
"joinpsbts", 0,
"txs"},
133 {
"finalizepsbt", 1,
"extract"},
134 {
"converttopsbt", 1,
"permitsigdata"},
135 {
"gettxout", 1,
"n"},
136 {
"gettxout", 2,
"include_mempool"},
137 {
"gettxoutproof", 0,
"txids"},
138 {
"gettxoutsetinfo", 1,
"hash_or_height"},
139 {
"gettxoutsetinfo", 2,
"use_index"},
140 {
"lockunspent", 0,
"unlock"},
141 {
"lockunspent", 1,
"transactions"},
142 {
"send", 0,
"outputs"},
143 {
"send", 1,
"options"},
144 {
"send", 1,
"add_inputs"},
145 {
"send", 1,
"include_unsafe"},
146 {
"send", 1,
"add_to_wallet"},
147 {
"send", 1,
"change_position"},
148 {
"send", 1,
"fee_rate"},
149 {
"send", 1,
"include_watching"},
150 {
"send", 1,
"inputs"},
151 {
"send", 1,
"locktime"},
152 {
"send", 1,
"lock_unspents"},
154 {
"send", 1,
"subtract_fee_from_outputs"},
155 {
"importprivkey", 2,
"rescan"},
156 {
"importaddress", 2,
"rescan"},
157 {
"importaddress", 3,
"p2sh"},
158 {
"importpubkey", 2,
"rescan"},
159 {
"importmulti", 0,
"requests"},
160 {
"importmulti", 1,
"options"},
161 {
"importmulti", 1,
"rescan"},
162 {
"importdescriptors", 0,
"requests"},
163 {
"verifychain", 0,
"checklevel"},
164 {
"verifychain", 1,
"nblocks"},
165 {
"getblockstats", 0,
"hash_or_height"},
166 {
"getblockstats", 1,
"stats"},
167 {
"pruneblockchain", 0,
"height"},
168 {
"keypoolrefill", 0,
"newsize"},
169 {
"getrawmempool", 0,
"verbose"},
170 {
"getrawmempool", 1,
"mempool_sequence"},
171 {
"prioritisetransaction", 1,
"dummy"},
172 {
"prioritisetransaction", 2,
"fee_delta"},
173 {
"setban", 2,
"bantime"},
174 {
"setban", 3,
"absolute"},
175 {
"setnetworkactive", 0,
"state"},
176 {
"setwalletflag", 1,
"value"},
177 {
"getmempoolancestors", 1,
"verbose"},
178 {
"getmempooldescendants", 1,
"verbose"},
179 {
"disconnectnode", 1,
"nodeid"},
180 {
"logging", 0,
"include"},
181 {
"logging", 1,
"exclude"},
182 {
"upgradewallet", 0,
"version"},
184 {
"echojson", 0,
"arg0"},
185 {
"echojson", 1,
"arg1"},
186 {
"echojson", 2,
"arg2"},
187 {
"echojson", 3,
"arg3"},
188 {
"echojson", 4,
"arg4"},
189 {
"echojson", 5,
"arg5"},
190 {
"echojson", 6,
"arg6"},
191 {
"echojson", 7,
"arg7"},
192 {
"echojson", 8,
"arg8"},
193 {
"echojson", 9,
"arg9"},
194 {
"rescanblockchain", 0,
"start_height"},
195 {
"rescanblockchain", 1,
"stop_height"},
196 {
"createwallet", 1,
"disable_private_keys"},
197 {
"createwallet", 2,
"blank"},
198 {
"createwallet", 4,
"avoid_reuse"},
199 {
"createwallet", 5,
"descriptors"},
200 {
"createwallet", 6,
"load_on_startup"},
201 {
"restorewallet", 2,
"load_on_startup"},
202 {
"loadwallet", 1,
"load_on_startup"},
203 {
"unloadwallet", 1,
"load_on_startup"},
204 {
"getnodeaddresses", 0,
"count"},
205 {
"addpeeraddress", 1,
"port"},
206 {
"addpeeraddress", 2,
"tried"},
207 {
"sendmsgtopeer", 0,
"peer_id"},
209 {
"createwallettransaction", 1,
"amount"},
211 {
"addavalanchenode", 0,
"nodeid"},
212 {
"buildavalancheproof", 0,
"sequence"},
213 {
"buildavalancheproof", 1,
"expiration"},
214 {
"buildavalancheproof", 3,
"stakes"},
215 {
"getremoteproofs", 0,
"nodeid"},
216 {
"getstakingreward", 1,
"recompute"},
217 {
"setstakingreward", 2,
"append"},
218 {
"setflakyproof", 1,
"flaky"},
227 if (!parsed.
read(raw)) {
228 throw std::runtime_error(
tfm::format(
"Error parsing JSON: %s", raw));
236 std::set<std::pair<std::string, int>>
members;
247 const std::string &method,
int param_idx) {
248 return members.count({method, param_idx}) > 0 ?
Parse(arg_value)
257 const std::string &method,
258 const std::string ¶m_name) {
266 members.emplace(cp.methodName, cp.paramIdx);
274 const std::vector<std::string> &strParams) {
277 for (
unsigned int idx = 0; idx < strParams.size(); idx++) {
278 std::string_view value{strParams[idx]};
286 const std::vector<std::string> &strParams) {
290 for (std::string_view s : strParams) {
291 size_t pos = s.find(
'=');
292 if (pos == std::string::npos) {
294 s, strMethod, positional_args.size()));
298 std::string
name{s.substr(0, pos)};
299 std::string_view value{s.substr(pos + 1)};
307 if (!positional_args.empty()) {
311 params.
pushKVEnd(
"args", positional_args);
std::string methodName
method whose params want conversion
int paramIdx
0-based idx of param to convert
std::string paramName
parameter name
std::set< std::pair< std::string, std::string > > membersByName
UniValue ArgToUniValue(std::string_view arg_value, const std::string &method, int param_idx)
Return arg_value as UniValue, and first parse it if it is a non-string parameter.
std::set< std::pair< std::string, int > > members
UniValue ArgToUniValue(std::string_view arg_value, const std::string &method, const std::string ¶m_name)
Return arg_value as UniValue, and first parse it if it is a non-string parameter.
void push_back(UniValue val)
void pushKVEnd(std::string key, UniValue val)
bool read(std::string_view raw)
void pushKV(std::string key, UniValue val)
UniValue RPCConvertValues(const std::string &strMethod, const std::vector< std::string > &strParams)
Convert positional arguments to command-specific RPC representation.
static UniValue Parse(std::string_view raw)
Parse string to UniValue or throw runtime_error if string contains invalid JSON.
UniValue RPCConvertNamedValues(const std::string &strMethod, const std::vector< std::string > &strParams)
Convert named arguments to command-specific RPC representation.
static CRPCConvertTable rpcCvtTable
static const CRPCConvertParam vRPCConvertParams[]
Specify a (method, idx, name) here if the argument is a non-string RPC argument and needs to be conve...