From d9574c2f14028297ad5121695a0c10e517bf638e Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Thu, 20 Jan 2011 13:10:01 -0500 Subject: 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. --- main.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp index ac0c563ece..3079d38464 100644 --- a/main.cpp +++ b/main.cpp @@ -442,8 +442,13 @@ void CWalletTx::GetAmounts(int64& nGenerated, list >& listRe else if (ExtractPubKey(txout.scriptPubKey, false, vchPubKey)) address = PubKeyToAddress(vchPubKey); else - address = " unknown "; // some type of weird non-standard transaction? + { + printf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", + this->GetHash().ToString().c_str()); + address = " unknown "; + } + // Don't report 'change' txouts if (nDebit > 0 && txout.IsChange()) continue; @@ -479,8 +484,19 @@ void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, i CRITICAL_BLOCK(cs_mapAddressBook) { foreach(const PAIRTYPE(string,int64)& r, listReceived) - if (mapAddressBook.count(r.first) && mapAddressBook[r.first] == strAccount) + { + if (mapAddressBook.count(r.first)) + { + if (mapAddressBook[r.first] == strAccount) + { + nReceived += r.second; + } + } + else if (strAccount.empty()) + { nReceived += r.second; + } + } } } -- cgit v1.2.3