|
|
|
@ -932,10 +932,12 @@ struct tallyitem
@@ -932,10 +932,12 @@ struct tallyitem
|
|
|
|
|
int64_t nAmount; |
|
|
|
|
int nConf; |
|
|
|
|
vector<uint256> txids; |
|
|
|
|
bool fIsWatchonly; |
|
|
|
|
tallyitem() |
|
|
|
|
{ |
|
|
|
|
nAmount = 0; |
|
|
|
|
nConf = std::numeric_limits<int>::max(); |
|
|
|
|
fIsWatchonly = false; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -951,6 +953,11 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -951,6 +953,11 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
if (params.size() > 1) |
|
|
|
|
fIncludeEmpty = params[1].get_bool(); |
|
|
|
|
|
|
|
|
|
isminefilter filter = MINE_SPENDABLE; |
|
|
|
|
if(params.size() > 2) |
|
|
|
|
if(params[2].get_bool()) |
|
|
|
|
filter = filter | MINE_WATCH_ONLY; |
|
|
|
|
|
|
|
|
|
// Tally
|
|
|
|
|
map<CBitcoinAddress, tallyitem> mapTally; |
|
|
|
|
for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
|
|
|
@ -967,13 +974,19 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -967,13 +974,19 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, wtx.vout) |
|
|
|
|
{ |
|
|
|
|
CTxDestination address; |
|
|
|
|
if (!ExtractDestination(txout.scriptPubKey, address) || !IsMine(*pwalletMain, address)) |
|
|
|
|
if (!ExtractDestination(txout.scriptPubKey, address)) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
isminefilter mine = IsMine(*pwalletMain, address); |
|
|
|
|
if(!mine & filter) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
tallyitem& item = mapTally[address]; |
|
|
|
|
item.nAmount += txout.nValue; |
|
|
|
|
item.nConf = min(item.nConf, nDepth); |
|
|
|
|
item.txids.push_back(wtx.GetHash()); |
|
|
|
|
if (mine & MINE_WATCH_ONLY) |
|
|
|
|
item.fIsWatchonly = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -990,10 +1003,12 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -990,10 +1003,12 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
|
|
|
|
|
int64_t nAmount = 0; |
|
|
|
|
int nConf = std::numeric_limits<int>::max(); |
|
|
|
|
bool fIsWatchonly = false; |
|
|
|
|
if (it != mapTally.end()) |
|
|
|
|
{ |
|
|
|
|
nAmount = (*it).second.nAmount; |
|
|
|
|
nConf = (*it).second.nConf; |
|
|
|
|
fIsWatchonly = (*it).second.fIsWatchonly; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fByAccounts) |
|
|
|
@ -1001,10 +1016,13 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -1001,10 +1016,13 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
tallyitem& item = mapAccountTally[strAccount]; |
|
|
|
|
item.nAmount += nAmount; |
|
|
|
|
item.nConf = min(item.nConf, nConf); |
|
|
|
|
item.fIsWatchonly = fIsWatchonly; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
Object obj; |
|
|
|
|
if(fIsWatchonly) |
|
|
|
|
obj.push_back(Pair("involvesWatchonly", true)); |
|
|
|
|
obj.push_back(Pair("address", address.ToString())); |
|
|
|
|
obj.push_back(Pair("account", strAccount)); |
|
|
|
|
obj.push_back(Pair("amount", ValueFromAmount(nAmount))); |
|
|
|
@ -1029,6 +1047,8 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -1029,6 +1047,8 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
int64_t nAmount = (*it).second.nAmount; |
|
|
|
|
int nConf = (*it).second.nConf; |
|
|
|
|
Object obj; |
|
|
|
|
if((*it).second.fIsWatchonly) |
|
|
|
|
obj.push_back(Pair("involvesWatchonly", true)); |
|
|
|
|
obj.push_back(Pair("account", (*it).first)); |
|
|
|
|
obj.push_back(Pair("amount", ValueFromAmount(nAmount))); |
|
|
|
|
obj.push_back(Pair("confirmations", (nConf == std::numeric_limits<int>::max() ? 0 : nConf))); |
|
|
|
@ -1041,17 +1061,19 @@ Value ListReceived(const Array& params, bool fByAccounts)
@@ -1041,17 +1061,19 @@ Value ListReceived(const Array& params, bool fByAccounts)
|
|
|
|
|
|
|
|
|
|
Value listreceivedbyaddress(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (fHelp || params.size() > 2) |
|
|
|
|
if (fHelp || params.size() > 3) |
|
|
|
|
throw runtime_error( |
|
|
|
|
"listreceivedbyaddress ( minconf includeempty )\n" |
|
|
|
|
"listreceivedbyaddress ( minconf includeempty includeWatchonly)\n" |
|
|
|
|
"\nList balances by receiving address.\n" |
|
|
|
|
"\nArguments:\n" |
|
|
|
|
"1. minconf (numeric, optional, default=1) The minimum number of confirmations before payments are included.\n" |
|
|
|
|
"2. includeempty (numeric, optional, dafault=false) Whether to include addresses that haven't received any payments.\n" |
|
|
|
|
"3. includeWatchonly (bool, optional, default=false) Whether to include watchonly addresses (see 'importaddress').\n" |
|
|
|
|
|
|
|
|
|
"\nResult:\n" |
|
|
|
|
"[\n" |
|
|
|
|
" {\n" |
|
|
|
|
" \"involvesWatchonly\" : \"true\", (bool) Only returned if imported addresses were involved in transaction\n" |
|
|
|
|
" \"address\" : \"receivingaddress\", (string) The receiving address\n" |
|
|
|
|
" \"account\" : \"accountname\", (string) The account of the receiving address. The default account is \"\".\n" |
|
|
|
|
" \"amount\" : x.xxx, (numeric) The total amount in btc received by the address\n" |
|
|
|
@ -1063,7 +1085,7 @@ Value listreceivedbyaddress(const Array& params, bool fHelp)
@@ -1063,7 +1085,7 @@ Value listreceivedbyaddress(const Array& params, bool fHelp)
|
|
|
|
|
"\nExamples:\n" |
|
|
|
|
+ HelpExampleCli("listreceivedbyaddress", "") |
|
|
|
|
+ HelpExampleCli("listreceivedbyaddress", "6 true") |
|
|
|
|
+ HelpExampleRpc("listreceivedbyaddress", "6, true") |
|
|
|
|
+ HelpExampleRpc("listreceivedbyaddress", "6, true, true") |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return ListReceived(params, false); |
|
|
|
@ -1071,17 +1093,19 @@ Value listreceivedbyaddress(const Array& params, bool fHelp)
@@ -1071,17 +1093,19 @@ Value listreceivedbyaddress(const Array& params, bool fHelp)
|
|
|
|
|
|
|
|
|
|
Value listreceivedbyaccount(const Array& params, bool fHelp) |
|
|
|
|
{ |
|
|
|
|
if (fHelp || params.size() > 2) |
|
|
|
|
if (fHelp || params.size() > 3) |
|
|
|
|
throw runtime_error( |
|
|
|
|
"listreceivedbyaccount ( minconf includeempty )\n" |
|
|
|
|
"listreceivedbyaccount ( minconf includeempty includeWatchonly)\n" |
|
|
|
|
"\nList balances by account.\n" |
|
|
|
|
"\nArguments:\n" |
|
|
|
|
"1. minconf (numeric, optional, default=1) The minimum number of confirmations before payments are included.\n" |
|
|
|
|
"2. includeempty (boolean, optional, default=false) Whether to include accounts that haven't received any payments.\n" |
|
|
|
|
"3. includeWatchonly (bool, optional, default=false) Whether to include watchonly addresses (see 'importaddress').\n" |
|
|
|
|
|
|
|
|
|
"\nResult:\n" |
|
|
|
|
"[\n" |
|
|
|
|
" {\n" |
|
|
|
|
" \"involvesWatchonly\" : \"true\", (bool) Only returned if imported addresses were involved in transaction\n" |
|
|
|
|
" \"account\" : \"accountname\", (string) The account name of the receiving account\n" |
|
|
|
|
" \"amount\" : x.xxx, (numeric) The total amount received by addresses with this account\n" |
|
|
|
|
" \"confirmations\" : n (numeric) The number of confirmations of the most recent transaction included\n" |
|
|
|
@ -1092,7 +1116,7 @@ Value listreceivedbyaccount(const Array& params, bool fHelp)
@@ -1092,7 +1116,7 @@ Value listreceivedbyaccount(const Array& params, bool fHelp)
|
|
|
|
|
"\nExamples:\n" |
|
|
|
|
+ HelpExampleCli("listreceivedbyaccount", "") |
|
|
|
|
+ HelpExampleCli("listreceivedbyaccount", "6 true") |
|
|
|
|
+ HelpExampleRpc("listreceivedbyaccount", "6, true") |
|
|
|
|
+ HelpExampleRpc("listreceivedbyaccount", "6, true, true") |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return ListReceived(params, true); |
|
|
|
|