mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-15 16:38:23 +01:00
Reconcile getbalance and listaccounts 0 in the shared-wallet case
If you copied your wallet and used it on two different machines, the balance reported by getbalance and the sum(listaccounts) could disagree, because you might receive payments for an address that is in your wallet but not your address book. Now all such transactions are credited to the default empty-string account.
This commit is contained in:
8
rpc.cpp
8
rpc.cpp
@@ -626,6 +626,7 @@ Value getbalance(const Array& params, bool fHelp)
|
||||
// (GetBalance() sums up all unspent TxOuts)
|
||||
// getbalance and getbalance '*' should always return the same number.
|
||||
int64 nBalance = 0;
|
||||
vector<string> vAccounts;
|
||||
for (map<uint256, CWalletTx>::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
|
||||
{
|
||||
const CWalletTx& wtx = (*it).second;
|
||||
@@ -636,12 +637,17 @@ Value getbalance(const Array& params, bool fHelp)
|
||||
list<pair<string, int64> > listSent;
|
||||
wtx.GetAmounts(allGenerated, listReceived, listSent, allFee, strSentAccount);
|
||||
foreach(const PAIRTYPE(string,int64)& r, listReceived)
|
||||
{
|
||||
nBalance += r.second;
|
||||
if (!count(vAccounts.begin(), vAccounts.end(), r.first))
|
||||
vAccounts.push_back(r.first);
|
||||
}
|
||||
foreach(const PAIRTYPE(string,int64)& r, listSent)
|
||||
nBalance -= r.second;
|
||||
nBalance -= allFee;
|
||||
nBalance += allGenerated;
|
||||
}
|
||||
printf("Found %d accounts\n", vAccounts.size());
|
||||
return (double)nBalance / (double)COIN;
|
||||
}
|
||||
|
||||
@@ -1080,6 +1086,8 @@ Value listaccounts(const Array& params, bool fHelp)
|
||||
foreach(const PAIRTYPE(string, int64)& r, listReceived)
|
||||
if (mapAddressBook.count(r.first))
|
||||
mapAccountBalances[mapAddressBook[r.first]] += r.second;
|
||||
else
|
||||
mapAccountBalances[""] += r.second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user