mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-28 16:36:04 +01:00
Add query options to listunspent rpc call
This commit is contained in:
committed by
Wladimir J. van der Laan
parent
541199788c
commit
bc63d0ed3b
@@ -2470,22 +2470,29 @@ UniValue listunspent(const JSONRPCRequest& request)
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
if (request.fHelp || request.params.size() > 4)
|
||||
if (request.fHelp || request.params.size() > 5)
|
||||
throw std::runtime_error(
|
||||
"listunspent ( minconf maxconf [\"addresses\",...] [include_unsafe] )\n"
|
||||
"listunspent ( minconf maxconf [\"addresses\",...] [include_unsafe] [query_options])\n"
|
||||
"\nReturns array of unspent transaction outputs\n"
|
||||
"with between minconf and maxconf (inclusive) confirmations.\n"
|
||||
"Optionally filter to only include txouts paid to specified addresses.\n"
|
||||
"\nArguments:\n"
|
||||
"1. minconf (numeric, optional, default=1) The minimum confirmations to filter\n"
|
||||
"2. maxconf (numeric, optional, default=9999999) The maximum confirmations to filter\n"
|
||||
"3. \"addresses\" (string) A json array of bitcoin addresses to filter\n"
|
||||
"3. \"addresses\" (string) A json array of bitcoin addresses to filter\n"
|
||||
" [\n"
|
||||
" \"address\" (string) bitcoin address\n"
|
||||
" \"address\" (string) bitcoin address\n"
|
||||
" ,...\n"
|
||||
" ]\n"
|
||||
"4. include_unsafe (bool, optional, default=true) Include outputs that are not safe to spend\n"
|
||||
" See description of \"safe\" attribute below.\n"
|
||||
"5. query_options (json, optional) JSON with query options\n"
|
||||
" {\n"
|
||||
" \"minimumAmount\" (numeric or string, default=0) Minimum value of each UTXO in " + CURRENCY_UNIT + "\n"
|
||||
" \"maximumAmount\" (numeric or string, default=unlimited) Maximum value of each UTXO in " + CURRENCY_UNIT + "\n"
|
||||
" \"maximumCount\" (numeric or string, default=unlimited) Maximum number of UTXOs\n"
|
||||
" \"minimumSumAmount\" (numeric or string, default=unlimited) Minimum sum value of all UTXOs in " + CURRENCY_UNIT + "\n"
|
||||
" }\n"
|
||||
"\nResult\n"
|
||||
"[ (array of json object)\n"
|
||||
" {\n"
|
||||
@@ -2510,6 +2517,8 @@ UniValue listunspent(const JSONRPCRequest& request)
|
||||
+ HelpExampleCli("listunspent", "")
|
||||
+ HelpExampleCli("listunspent", "6 9999999 \"[\\\"1PGFqEzfmQch1gKD3ra4k18PNj3tTUUSqg\\\",\\\"1LtvqCaApEdUGFkpKMM4MstjcaL4dKg8SP\\\"]\"")
|
||||
+ HelpExampleRpc("listunspent", "6, 9999999 \"[\\\"1PGFqEzfmQch1gKD3ra4k18PNj3tTUUSqg\\\",\\\"1LtvqCaApEdUGFkpKMM4MstjcaL4dKg8SP\\\"]\"")
|
||||
+ HelpExampleCli("listunspent", "6 9999999 '[]' true '{ \"minimumAmount\": 0.005 }'")
|
||||
+ HelpExampleRpc("listunspent", "6, 9999999, [] , true, { \"minimumAmount\": 0.005 } ")
|
||||
);
|
||||
|
||||
int nMinDepth = 1;
|
||||
@@ -2545,15 +2554,34 @@ UniValue listunspent(const JSONRPCRequest& request)
|
||||
include_unsafe = request.params[3].get_bool();
|
||||
}
|
||||
|
||||
CAmount nMinimumAmount = 0;
|
||||
CAmount nMaximumAmount = MAX_MONEY;
|
||||
CAmount nMinimumSumAmount = MAX_MONEY;
|
||||
uint64_t nMaximumCount = 0;
|
||||
|
||||
if (request.params.size() > 4) {
|
||||
const UniValue& options = request.params[4].get_obj();
|
||||
|
||||
if (options.exists("minimumAmount"))
|
||||
nMinimumAmount = AmountFromValue(options["minimumAmount"]);
|
||||
|
||||
if (options.exists("maximumAmount"))
|
||||
nMaximumAmount = AmountFromValue(options["maximumAmount"]);
|
||||
|
||||
if (options.exists("minimumSumAmount"))
|
||||
nMinimumSumAmount = AmountFromValue(options["minimumSumAmount"]);
|
||||
|
||||
if (options.exists("maximumCount"))
|
||||
nMaximumCount = options["maximumCount"].get_int64();
|
||||
}
|
||||
|
||||
UniValue results(UniValue::VARR);
|
||||
std::vector<COutput> vecOutputs;
|
||||
assert(pwallet != NULL);
|
||||
LOCK2(cs_main, pwallet->cs_wallet);
|
||||
pwallet->AvailableCoins(vecOutputs, !include_unsafe, NULL, true);
|
||||
BOOST_FOREACH(const COutput& out, vecOutputs) {
|
||||
if (out.nDepth < nMinDepth || out.nDepth > nMaxDepth)
|
||||
continue;
|
||||
|
||||
pwallet->AvailableCoins(vecOutputs, !include_unsafe, NULL, nMinimumAmount, nMaximumAmount, nMinimumSumAmount, nMaximumCount, nMinDepth, nMaxDepth);
|
||||
BOOST_FOREACH(const COutput& out, vecOutputs) {
|
||||
CTxDestination address;
|
||||
const CScript& scriptPubKey = out.tx->tx->vout[out.i].scriptPubKey;
|
||||
bool fValidAddress = ExtractDestination(scriptPubKey, address);
|
||||
@@ -2936,7 +2964,7 @@ static const CRPCCommand commands[] =
|
||||
{ "wallet", "listreceivedbyaddress", &listreceivedbyaddress, false, {"minconf","include_empty","include_watchonly"} },
|
||||
{ "wallet", "listsinceblock", &listsinceblock, false, {"blockhash","target_confirmations","include_watchonly"} },
|
||||
{ "wallet", "listtransactions", &listtransactions, false, {"account","count","skip","include_watchonly"} },
|
||||
{ "wallet", "listunspent", &listunspent, false, {"minconf","maxconf","addresses","include_unsafe"} },
|
||||
{ "wallet", "listunspent", &listunspent, false, {"minconf","maxconf","addresses","include_unsafe","query_options"} },
|
||||
{ "wallet", "lockunspent", &lockunspent, true, {"unlock","transactions"} },
|
||||
{ "wallet", "move", &movecmd, false, {"fromaccount","toaccount","amount","minconf","comment"} },
|
||||
{ "wallet", "sendfrom", &sendfrom, false, {"fromaccount","toaddress","amount","minconf","comment","comment_to"} },
|
||||
|
||||
Reference in New Issue
Block a user