|
|
|
@ -673,22 +673,35 @@ void CWalletTx::GetAmounts(list<pair<CTxDestination, int64> >& listReceived,
@@ -673,22 +673,35 @@ void CWalletTx::GetAmounts(list<pair<CTxDestination, int64> >& listReceived,
|
|
|
|
|
// Sent/received.
|
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, vout) |
|
|
|
|
{ |
|
|
|
|
bool fIsMine; |
|
|
|
|
// Only need to handle txouts if AT LEAST one of these is true:
|
|
|
|
|
// 1) they debit from us (sent)
|
|
|
|
|
// 2) the output is to us (received)
|
|
|
|
|
if (nDebit > 0) |
|
|
|
|
{ |
|
|
|
|
// Don't report 'change' txouts
|
|
|
|
|
if (pwallet->IsChange(txout)) |
|
|
|
|
continue; |
|
|
|
|
fIsMine = pwallet->IsMine(txout); |
|
|
|
|
} |
|
|
|
|
else if (!(fIsMine = pwallet->IsMine(txout))) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
// In either case, we need to get the destination address
|
|
|
|
|
CTxDestination address; |
|
|
|
|
vector<unsigned char> vchPubKey; |
|
|
|
|
if (!ExtractDestination(txout.scriptPubKey, address)) |
|
|
|
|
{ |
|
|
|
|
printf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", |
|
|
|
|
this->GetHash().ToString().c_str()); |
|
|
|
|
address = CNoDestination(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Don't report 'change' txouts
|
|
|
|
|
if (nDebit > 0 && pwallet->IsChange(txout)) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
// If we are debited by the transaction, add the output as a "sent" entry
|
|
|
|
|
if (nDebit > 0) |
|
|
|
|
listSent.push_back(make_pair(address, txout.nValue)); |
|
|
|
|
|
|
|
|
|
if (pwallet->IsMine(txout)) |
|
|
|
|
// If we are receiving the output, add it as a "received" entry
|
|
|
|
|
if (fIsMine) |
|
|
|
|
listReceived.push_back(make_pair(address, txout.nValue)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|