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.
This commit is contained in:
parent
f69b82e78a
commit
ab07866c8d
1 changed files with 23 additions and 37 deletions
|
@ -47,50 +47,36 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
|
||||||
//
|
//
|
||||||
// Credit
|
// 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
|
|
||||||
{
|
|
||||||
bool foundAddress = false;
|
|
||||||
// Received by Bitcoin Address
|
|
||||||
BOOST_FOREACH(const CTxOut& txout, wtx.vout)
|
BOOST_FOREACH(const CTxOut& txout, wtx.vout)
|
||||||
{
|
{
|
||||||
if(wallet->IsMine(txout))
|
if(wallet->IsMine(txout))
|
||||||
{
|
{
|
||||||
|
TransactionRecord sub(hash, nTime);
|
||||||
CBitcoinAddress address;
|
CBitcoinAddress address;
|
||||||
if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address))
|
sub.idx = parts.size(); // sequence number
|
||||||
|
sub.credit = txout.nValue;
|
||||||
|
if (wtx.IsCoinBase())
|
||||||
{
|
{
|
||||||
|
// Generated
|
||||||
|
sub.type = TransactionRecord::Generated;
|
||||||
|
}
|
||||||
|
else if (ExtractAddress(txout.scriptPubKey, address) && wallet->HaveKey(address))
|
||||||
|
{
|
||||||
|
// Received by Bitcoin Address
|
||||||
sub.type = TransactionRecord::RecvWithAddress;
|
sub.type = TransactionRecord::RecvWithAddress;
|
||||||
sub.address = address.ToString();
|
sub.address = address.ToString();
|
||||||
foundAddress = true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
}
|
|
||||||
if(!foundAddress)
|
|
||||||
{
|
{
|
||||||
// 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.type = TransactionRecord::RecvFromOther;
|
||||||
sub.address = mapValue["from"];
|
sub.address = mapValue["from"];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
parts.append(sub);
|
parts.append(sub);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool fAllFromMe = true;
|
bool fAllFromMe = true;
|
||||||
|
|
Loading…
Reference in a new issue