aboutsummaryrefslogtreecommitdiff
path: root/src/qt/transactionrecord.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2012-02-05 11:53:52 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2012-02-06 18:13:01 +0100
commitab07866c8dbe33f38d6a02884be15e615f078b5a (patch)
tree497d8fc31fdc97a10f09d8ca50ceb0dc91577e8c /src/qt/transactionrecord.cpp
parentf69b82e78a16ea2ab124663414e6b2902b1b05e0 (diff)
downloadbitcoin-ab07866c8dbe33f38d6a02884be15e615f078b5a.tar.xz
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.cpp60
1 files changed, 23 insertions, 37 deletions
diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp
index 2cd135df34..57210dcc02 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
{