Added argument to listaccounts to include watchonly addresses

This commit is contained in:
JaSK 2014-04-08 16:13:15 +02:00
parent d4640d7d8c
commit 83f3543f20
2 changed files with 13 additions and 5 deletions

View File

@ -49,6 +49,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
{ "listtransactions", 1 },
{ "listtransactions", 2 },
{ "listaccounts", 0 },
{ "listaccounts", 1 },
{ "walletpassphrase", 1 },
{ "getblocktemplate", 0 },
{ "listsinceblock", 1 },

View File

@ -1302,12 +1302,13 @@ Value listtransactions(const Array& params, bool fHelp)
Value listaccounts(const Array& params, bool fHelp)
{
if (fHelp || params.size() > 1)
if (fHelp || params.size() > 2)
throw runtime_error(
"listaccounts ( minconf )\n"
"listaccounts ( minconf includeWatchonly)\n"
"\nReturns Object that has account names as keys, account balances as values.\n"
"\nArguments:\n"
"1. minconf (numeric, optional, default=1) Only onclude transactions with at least this many confirmations\n"
"1. minconf (numeric, optional, default=1) Only onclude transactions with at least this many confirmations\n"
"2. includeWatchonly (bool, optional, default=false) Include balances in watchonly addresses (see 'importaddress')\n"
"\nResult:\n"
"{ (json object where keys are account names, and values are numeric balances\n"
" \"account\": x.xxx, (numeric) The property name is the account name, and the value is the total balance for the account.\n"
@ -1325,12 +1326,18 @@ Value listaccounts(const Array& params, bool fHelp)
);
int nMinDepth = 1;
isminefilter includeWatchonly = MINE_SPENDABLE;
if (params.size() > 0)
{
nMinDepth = params[0].get_int();
if(params.size() > 1)
if(params[1].get_bool())
includeWatchonly = includeWatchonly | MINE_WATCH_ONLY;
}
map<string, int64_t> mapAccountBalances;
BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& entry, pwalletMain->mapAddressBook) {
if (IsMine(*pwalletMain, entry.first)) // This address belongs to me
if (IsMine(*pwalletMain, entry.first) & includeWatchonly) // This address belongs to me
mapAccountBalances[entry.second.name] = 0;
}
@ -1344,7 +1351,7 @@ Value listaccounts(const Array& params, bool fHelp)
int nDepth = wtx.GetDepthInMainChain();
if (wtx.GetBlocksToMaturity() > 0 || nDepth < 0)
continue;
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount);
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount, includeWatchonly);
mapAccountBalances[strSentAccount] -= nFee;
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& s, listSent)
mapAccountBalances[strSentAccount] -= s.second;