aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.cpp3
-rw-r--r--main.cpp20
-rw-r--r--rpc.cpp8
3 files changed, 29 insertions, 2 deletions
diff --git a/init.cpp b/init.cpp
index e114d80727..d93eaba795 100644
--- a/init.cpp
+++ b/init.cpp
@@ -346,6 +346,9 @@ bool AppInit2(int argc, char* argv[])
return false;
}
+ if (GetBoolArg("-rescan"))
+ ScanForWalletTransactions(pindexGenesisBlock);
+
// Add wallet transactions that aren't already in a block to mapTransactions
ReacceptWalletTransactions();
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<pair<string, int64> >& 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;
+ }
+ }
}
}
diff --git a/rpc.cpp b/rpc.cpp
index 286ddcd0b0..055e0cf1e7 100644
--- a/rpc.cpp
+++ b/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;
}
}
}