diff options
| author | Wladimir J. van der Laan <[email protected]> | 2012-02-05 11:53:52 +0100 |
|---|---|---|
| committer | Wladimir J. van der Laan <[email protected]> | 2012-02-06 18:13:01 +0100 |
| commit | ab07866c8dbe33f38d6a02884be15e615f078b5a (patch) | |
| tree | 497d8fc31fdc97a10f09d8ca50ceb0dc91577e8c /src/qt/transactionrecord.cpp | |
| parent | Change up/down increment in UI to 0.001 BTC (issue #760) (diff) | |
| download | discoin-ab07866c8dbe33f38d6a02884be15e615f078b5a.tar.xz discoin-ab07866c8dbe33f38d6a02884be15e615f078b5a.zip | |
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.
Diffstat (limited to 'src/qt/transactionrecord.cpp')
| -rw-r--r-- | src/qt/transactionrecord.cpp | 60 |
1 files changed, 23 insertions, 37 deletions
diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index 2cd135df3..57210dcc0 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -47,49 +47,35 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet * // // Credit // - TransactionRecord sub(hash, nTime); - - sub.credit = nNet; - - 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 + BOOST_FOREACH(const CTxOut& txout, wtx.vout) { - bool foundAddress = false; - // Received by Bitcoin Address - BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if(wallet->IsMine(txout)) { - if(wallet->IsMine(txout)) + TransactionRecord sub(hash, nTime); + CBitcoinAddress address; + sub.idx = parts.size(); // sequence number + sub.credit = txout.nValue; + if (wtx.IsCoinBase()) { - CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address)) - { - sub.type = TransactionRecord::RecvWithAddress; - sub.address = address.ToString(); - foundAddress = true; - break; - } + // Generated + sub.type = TransactionRecord::Generated; } - } - if(!foundAddress) - { - // Received by IP connection, or other non-address transaction like OP_EVAL - sub.type = TransactionRecord::RecvFromOther; - sub.address = mapValue["from"]; + else if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address)) + { + // Received by Bitcoin Address + sub.type = TransactionRecord::RecvWithAddress; + sub.address = address.ToString(); + } + else + { + // 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); } } - parts.append(sub); } else { |