Browse Source

Restructure credit transaction decomposition (solves issue #689)

When a transaction has multiple outputs that go to the wallet, list these
as multiple transactions in the UI. This is also applied to generated
(coinbase) transactions. Also makes the code shorter and easier
to understand.
miguelfreitas
Wladimir J. van der Laan 13 years ago
parent
commit
ab07866c8d
  1. 40
      src/qt/transactionrecord.cpp

40
src/qt/transactionrecord.cpp

@ -47,50 +47,36 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet * @@ -47,50 +47,36 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
//
// Credit
//
BOOST_FOREACH(const CTxOut& txout, wtx.vout)
{
if(wallet->IsMine(txout))
{
TransactionRecord sub(hash, nTime);
sub.credit = nNet;
CBitcoinAddress address;
sub.idx = parts.size(); // sequence number
sub.credit = txout.nValue;
if (wtx.IsCoinBase())
{
// Generated
sub.type = TransactionRecord::Generated;
if (nCredit == 0)
{
int64 nUnmatured = 0;
BOOST_FOREACH(const CTxOut& txout, wtx.vout)
nUnmatured += wallet->GetCredit(txout);
sub.credit = nUnmatured;
}
}
else
else if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address))
{
bool foundAddress = false;
// Received by Bitcoin Address
BOOST_FOREACH(const CTxOut& txout, wtx.vout)
{
if(wallet->IsMine(txout))
{
CBitcoinAddress address;
if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address))
{
sub.type = TransactionRecord::RecvWithAddress;
sub.address = address.ToString();
foundAddress = true;
break;
}
}
}
if(!foundAddress)
else
{
// Received by IP connection, or other non-address transaction like OP_EVAL
// Received by IP connection (deprecated features), or a multisignature or other non-simple transaction
sub.type = TransactionRecord::RecvFromOther;
sub.address = mapValue["from"];
}
}
parts.append(sub);
}
}
}
else
{
bool fAllFromMe = true;

Loading…
Cancel
Save