aboutsummaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorGavin Andresen <[email protected]>2010-12-16 11:36:47 -0500
committerGavin Andresen <[email protected]>2010-12-16 11:36:47 -0500
commit55c43da5d8606f7abd22ee7af290cf10bb865f6a (patch)
treea22f32914f658d3dd713995ebc05bb45cee1bbd7 /main.cpp
parentMerge remote branch 'refs/remotes/svn/trunk' into svn (diff)
parentNew RPC command: listaccounts. New RPC setting -rpctimeout. And listtransac... (diff)
downloaddiscoin-55c43da5d8606f7abd22ee7af290cf10bb865f6a.tar.xz
discoin-55c43da5d8606f7abd22ee7af290cf10bb865f6a.zip
Merge remote branch 'refs/remotes/svn/trunk' into svn
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
index 1d9b35b53..8db6c394e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -394,6 +394,63 @@ int CWalletTx::GetRequestCount() const
return nRequests;
}
+void CWalletTx::GetAmounts(int64& nGenerated, list<pair<string, int64> >& listReceived,
+ int64& nSent, int64& nFee, string& strSentAccount) const
+{
+ nGenerated = nSent = nFee = 0;
+
+ if (IsCoinBase())
+ {
+ if (GetBlocksToMaturity() == 0)
+ nGenerated = GetCredit();
+ return;
+ }
+
+ // Received. Standard client will never generate a send-to-multiple-recipients,
+ // but non-standard clients might (so return a list of address/amount pairs)
+ foreach(const CTxOut& txout, vout)
+ {
+ vector<unsigned char> vchPubKey;
+ if (ExtractPubKey(txout.scriptPubKey, true, vchPubKey))
+ listReceived.push_back(make_pair(PubKeyToAddress(vchPubKey), txout.nValue));
+ }
+
+ // Sent
+ int64 nDebit = GetDebit();
+ if (nDebit > 0)
+ {
+ int64 nValueOut = GetValueOut();
+ nFee = nDebit - nValueOut;
+ nSent = nValueOut - GetChange();
+ strSentAccount = strFromAccount;
+ }
+}
+
+void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nGenerated, int64& nReceived,
+ int64& nSent, int64& nFee) const
+{
+ nGenerated = nReceived = nSent = nFee = 0;
+
+ int64 allGenerated, allSent, allFee;
+ allGenerated = allSent = allFee = 0;
+ string strSentAccount;
+ list<pair<string, int64> > listReceived;
+ GetAmounts(allGenerated, listReceived, allSent, allFee, strSentAccount);
+
+ if (strAccount == "")
+ nGenerated = allGenerated;
+ if (strAccount == strSentAccount)
+ {
+ nSent = allSent;
+ nFee = allFee;
+ }
+ CRITICAL_BLOCK(cs_mapAddressBook)
+ {
+ foreach(const PAIRTYPE(string,int64)& r, listReceived)
+ if (mapAddressBook.count(r.first) && mapAddressBook[r.first] == strAccount)
+ nReceived += r.second;
+ }
+}