|
|
|
@ -2136,59 +2136,64 @@ public:
|
|
|
|
|
static RPCHelpMan scantxoutset()
|
|
|
|
|
{
|
|
|
|
|
return 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"
|
|
|
|
|
"Examples of output descriptors are:\n"
|
|
|
|
|
" addr(<address>) Outputs whose scriptPubKey corresponds to the specified address (does not include P2PK)\n"
|
|
|
|
|
" raw(<hex script>) Outputs whose scriptPubKey equals the specified hex scripts\n"
|
|
|
|
|
" combo(<pubkey>) P2PK, P2PKH, P2WPKH, and P2SH-P2WPKH outputs for the given pubkey\n"
|
|
|
|
|
" pkh(<pubkey>) P2PKH outputs for the given pubkey\n"
|
|
|
|
|
" sh(multi(<n>,<pubkey>,<pubkey>,...)) P2SH-multisig outputs for the given threshold and pubkeys\n"
|
|
|
|
|
"\nIn the above, <pubkey> either refers to a fixed public key in hexadecimal notation, or to an xpub/xprv optionally followed by one\n"
|
|
|
|
|
"or more path elements separated by \"/\", and optionally ending in \"/*\" (unhardened), or \"/*'\" or \"/*h\" (hardened) to specify all\n"
|
|
|
|
|
"unhardened or hardened child keys.\n"
|
|
|
|
|
"In the latter case, a range needs to be specified by below if different from 1000.\n"
|
|
|
|
|
"For more information on output descriptors, see the documentation in the doc/descriptors.md file.\n",
|
|
|
|
|
"\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"
|
|
|
|
|
"Examples of output descriptors are:\n"
|
|
|
|
|
" addr(<address>) Outputs whose scriptPubKey corresponds to the specified address (does not include P2PK)\n"
|
|
|
|
|
" raw(<hex script>) Outputs whose scriptPubKey equals the specified hex scripts\n"
|
|
|
|
|
" combo(<pubkey>) P2PK, P2PKH, P2WPKH, and P2SH-P2WPKH outputs for the given pubkey\n"
|
|
|
|
|
" pkh(<pubkey>) P2PKH outputs for the given pubkey\n"
|
|
|
|
|
" sh(multi(<n>,<pubkey>,<pubkey>,...)) P2SH-multisig outputs for the given threshold and pubkeys\n"
|
|
|
|
|
"\nIn the above, <pubkey> either refers to a fixed public key in hexadecimal notation, or to an xpub/xprv optionally followed by one\n"
|
|
|
|
|
"or more path elements separated by \"/\", and optionally ending in \"/*\" (unhardened), or \"/*'\" or \"/*h\" (hardened) to specify all\n"
|
|
|
|
|
"unhardened or hardened child keys.\n"
|
|
|
|
|
"In the latter case, a range needs to be specified by below if different from 1000.\n"
|
|
|
|
|
"For more information on output descriptors, see the documentation in the doc/descriptors.md file.\n",
|
|
|
|
|
{
|
|
|
|
|
{"action", RPCArg::Type::STR, RPCArg::Optional::NO, "The action to execute\n"
|
|
|
|
|
"\"start\" for starting a scan\n"
|
|
|
|
|
"\"abort\" for aborting the current scan (returns true when abort was successful)\n"
|
|
|
|
|
"\"status\" for progress report (in %) of the current scan"},
|
|
|
|
|
{"scanobjects", RPCArg::Type::ARR, RPCArg::Optional::OMITTED, "Array of scan objects. Required for \"start\" action\n"
|
|
|
|
|
"Every scan object is either a string descriptor or an object:",
|
|
|
|
|
{
|
|
|
|
|
{"descriptor", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "An output descriptor"},
|
|
|
|
|
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "An object with output descriptor and metadata",
|
|
|
|
|
{
|
|
|
|
|
{"action", RPCArg::Type::STR, RPCArg::Optional::NO, "The action to execute\n"
|
|
|
|
|
" \"start\" for starting a scan\n"
|
|
|
|
|
" \"abort\" for aborting the current scan (returns true when abort was successful)\n"
|
|
|
|
|
" \"status\" for progress report (in %) of the current scan"},
|
|
|
|
|
{"scanobjects", RPCArg::Type::ARR, RPCArg::Optional::OMITTED, "Array of scan objects. Required for \"start\" action\n"
|
|
|
|
|
" Every scan object is either a string descriptor or an object:",
|
|
|
|
|
{
|
|
|
|
|
{"descriptor", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "An output descriptor"},
|
|
|
|
|
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "An object with output descriptor and metadata",
|
|
|
|
|
{
|
|
|
|
|
{"desc", RPCArg::Type::STR, RPCArg::Optional::NO, "An output descriptor"},
|
|
|
|
|
{"range", RPCArg::Type::RANGE, /* default */ "1000", "The range of HD chain indexes to explore (either end or [begin,end])"},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{"desc", RPCArg::Type::STR, RPCArg::Optional::NO, "An output descriptor"},
|
|
|
|
|
{"range", RPCArg::Type::RANGE, /* default */ "1000", "The range of HD chain indexes to explore (either end or [begin,end])"},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
"[scanobjects,...]"},
|
|
|
|
|
},
|
|
|
|
|
RPCResult{
|
|
|
|
|
RPCResult::Type::OBJ, "", "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
RPCResult{"When action=='abort'", RPCResult::Type::BOOL, "", ""},
|
|
|
|
|
RPCResult{"When action=='status' and no scan is in progress", RPCResult::Type::NONE, "", ""},
|
|
|
|
|
RPCResult{"When action=='status' and scan is in progress", RPCResult::Type::OBJ, "", "",
|
|
|
|
|
{
|
|
|
|
|
{RPCResult::Type::NUM, "progress", "The scan progress"},
|
|
|
|
|
}},
|
|
|
|
|
RPCResult{"When action=='start'", RPCResult::Type::OBJ, "", "", {
|
|
|
|
|
{RPCResult::Type::BOOL, "success", "Whether the scan was completed"},
|
|
|
|
|
{RPCResult::Type::NUM, "txouts", "The number of unspent transaction outputs scanned"},
|
|
|
|
|
{RPCResult::Type::NUM, "height", "The current block height (index)"},
|
|
|
|
|
{RPCResult::Type::STR_HEX, "bestblock", "The hash of the block at the tip of the chain"},
|
|
|
|
|
{RPCResult::Type::ARR, "unspents", "",
|
|
|
|
|
{
|
|
|
|
|
{RPCResult::Type::OBJ, "", "",
|
|
|
|
|
{
|
|
|
|
|
{RPCResult::Type::BOOL, "success", "Whether the scan was completed"},
|
|
|
|
|
{RPCResult::Type::NUM, "txouts", "The number of unspent transaction outputs scanned"},
|
|
|
|
|
{RPCResult::Type::NUM, "height", "The current block height (index)"},
|
|
|
|
|
{RPCResult::Type::STR_HEX, "bestblock", "The hash of the block at the tip of the chain"},
|
|
|
|
|
{RPCResult::Type::ARR, "unspents", "",
|
|
|
|
|
{
|
|
|
|
|
{RPCResult::Type::OBJ, "", "",
|
|
|
|
|
{
|
|
|
|
|
{RPCResult::Type::STR_HEX, "txid", "The transaction id"},
|
|
|
|
|
{RPCResult::Type::NUM, "vout", "The vout value"},
|
|
|
|
|
{RPCResult::Type::STR_HEX, "scriptPubKey", "The script key"},
|
|
|
|
|
{RPCResult::Type::STR, "desc", "A specialized descriptor for the matched scriptPubKey"},
|
|
|
|
|
{RPCResult::Type::STR_AMOUNT, "amount", "The total amount in " + CURRENCY_UNIT + " of the unspent output"},
|
|
|
|
|
{RPCResult::Type::NUM, "height", "Height of the unspent transaction output"},
|
|
|
|
|
}},
|
|
|
|
|
}},
|
|
|
|
|
{RPCResult::Type::STR_AMOUNT, "total_amount", "The total amount of all found unspent outputs in " + CURRENCY_UNIT},
|
|
|
|
|
{RPCResult::Type::STR_HEX, "txid", "The transaction id"},
|
|
|
|
|
{RPCResult::Type::NUM, "vout", "The vout value"},
|
|
|
|
|
{RPCResult::Type::STR_HEX, "scriptPubKey", "The script key"},
|
|
|
|
|
{RPCResult::Type::STR, "desc", "A specialized descriptor for the matched scriptPubKey"},
|
|
|
|
|
{RPCResult::Type::STR_AMOUNT, "amount", "The total amount in " + CURRENCY_UNIT + " of the unspent output"},
|
|
|
|
|
{RPCResult::Type::NUM, "height", "Height of the unspent transaction output"},
|
|
|
|
|
}},
|
|
|
|
|
RPCExamples{""},
|
|
|
|
|
}},
|
|
|
|
|
{RPCResult::Type::STR_AMOUNT, "total_amount", "The total amount of all found unspent outputs in " + CURRENCY_UNIT},
|
|
|
|
|
}},
|
|
|
|
|
},
|
|
|
|
|
RPCExamples{""},
|
|
|
|
|
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
|
|
|
|
{
|
|
|
|
|
RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VARR});
|
|
|
|
|