@@ -143,6 +143,46 @@ static UniValue createmultisig(const JSONRPCRequest& request)
143
143
return result;
144
144
}
145
145
146
+ UniValue getdescriptorinfo (const JSONRPCRequest& request)
147
+ {
148
+ if (request.fHelp || request.params .size () != 1 ) {
149
+ throw std::runtime_error (
150
+ RPCHelpMan{" getdescriptorinfo" ,
151
+ {" \n Analyses a descriptor.\n " },
152
+ {
153
+ {" descriptor" , RPCArg::Type::STR, RPCArg::Optional::NO, " The descriptor." },
154
+ },
155
+ RPCResult{
156
+ " {\n "
157
+ " \" descriptor\" : \" desc\" , (string) The descriptor in canonical form, without private keys\n "
158
+ " \" isrange\" : true|false, (boolean) Whether the descriptor is ranged\n "
159
+ " \" issolvable\" : true|false, (boolean) Whether the descriptor is solvable\n "
160
+ " \" hasprivatekeys\" : true|false, (boolean) Whether the input descriptor contained at least one private key\n "
161
+ " }\n "
162
+ },
163
+ RPCExamples{
164
+ " Analyse a descriptor\n " +
165
+ HelpExampleCli (" getdescriptorinfo" , " \" wpkh([d34db33f/84h/0h/0h]0279be667ef9dcbbac55a06295Ce870b07029Bfcdb2dce28d959f2815b16f81798)\" " )
166
+ }}.ToString ()
167
+ );
168
+ }
169
+
170
+ RPCTypeCheck (request.params , {UniValue::VSTR});
171
+
172
+ FlatSigningProvider provider;
173
+ auto desc = Parse (request.params [0 ].get_str (), provider);
174
+ if (!desc) {
175
+ throw JSONRPCError (RPC_INVALID_ADDRESS_OR_KEY, strprintf (" Invalid descriptor" ));
176
+ }
177
+
178
+ UniValue result (UniValue::VOBJ);
179
+ result.pushKV (" descriptor" , desc->ToString ());
180
+ result.pushKV (" isrange" , desc->IsRange ());
181
+ result.pushKV (" issolvable" , desc->IsSolvable ());
182
+ result.pushKV (" hasprivatekeys" , provider.keys .size () > 0 );
183
+ return result;
184
+ }
185
+
146
186
UniValue deriveaddresses (const JSONRPCRequest& request)
147
187
{
148
188
if (request.fHelp || request.params .empty () || request.params .size () > 3 ) {
@@ -564,6 +604,7 @@ static const CRPCCommand commands[] =
564
604
{ " util" , " validateaddress" , &validateaddress, {" address" } },
565
605
{ " util" , " createmultisig" , &createmultisig, {" nrequired" ," keys" ," address_type" } },
566
606
{ " util" , " deriveaddresses" , &deriveaddresses, {" descriptor" , " begin" , " end" } },
607
+ { " util" , " getdescriptorinfo" , &getdescriptorinfo, {" descriptor" } },
567
608
{ " util" , " verifymessage" , &verifymessage, {" address" ," signature" ," message" } },
568
609
{ " util" , " signmessagewithprivkey" , &signmessagewithprivkey, {" privkey" ," message" } },
569
610
0 commit comments