Clean up getbalance RPC parameter handling
Only change in behavior is that unsupported combinations of parameters now trigger more specific error messages instead of the vague "JSON value is not a string as expected" error.
This commit is contained in:
parent
fd5d71ec4b
commit
745d2e315f
1 changed files with 20 additions and 7 deletions
|
@ -768,18 +768,31 @@ UniValue getbalance(const JSONRPCRequest& request)
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
if (request.params[0].isNull() && request.params[1].isNull() && request.params[2].isNull())
|
const UniValue& account_value = request.params[0];
|
||||||
return ValueFromAmount(pwallet->GetBalance());
|
const UniValue& minconf = request.params[1];
|
||||||
|
const UniValue& include_watchonly = request.params[2];
|
||||||
|
|
||||||
const std::string& account_param = request.params[0].get_str();
|
if (account_value.isNull()) {
|
||||||
|
if (!minconf.isNull()) {
|
||||||
|
throw JSONRPCError(RPC_INVALID_PARAMETER,
|
||||||
|
"getbalance minconf option is only currently supported if an account is specified");
|
||||||
|
}
|
||||||
|
if (!include_watchonly.isNull()) {
|
||||||
|
throw JSONRPCError(RPC_INVALID_PARAMETER,
|
||||||
|
"getbalance include_watchonly option is only currently supported if an account is specified");
|
||||||
|
}
|
||||||
|
return ValueFromAmount(pwallet->GetBalance());
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& account_param = account_value.get_str();
|
||||||
const std::string* account = account_param != "*" ? &account_param : nullptr;
|
const std::string* account = account_param != "*" ? &account_param : nullptr;
|
||||||
|
|
||||||
int nMinDepth = 1;
|
int nMinDepth = 1;
|
||||||
if (!request.params[1].isNull())
|
if (!minconf.isNull())
|
||||||
nMinDepth = request.params[1].get_int();
|
nMinDepth = minconf.get_int();
|
||||||
isminefilter filter = ISMINE_SPENDABLE;
|
isminefilter filter = ISMINE_SPENDABLE;
|
||||||
if(!request.params[2].isNull())
|
if(!include_watchonly.isNull())
|
||||||
if(request.params[2].get_bool())
|
if(include_watchonly.get_bool())
|
||||||
filter = filter | ISMINE_WATCH_ONLY;
|
filter = filter | ISMINE_WATCH_ONLY;
|
||||||
|
|
||||||
return ValueFromAmount(pwallet->GetLegacyBalance(filter, nMinDepth, account));
|
return ValueFromAmount(pwallet->GetLegacyBalance(filter, nMinDepth, account));
|
||||||
|
|
Loading…
Reference in a new issue