Watchonly transactions are marked in transaction history

This commit is contained in:
JaSK 2014-04-05 21:36:48 +02:00
parent ffd40da361
commit d2692f6116
3 changed files with 17 additions and 4 deletions

View File

@ -70,16 +70,19 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
sub.type = TransactionRecord::Generated; sub.type = TransactionRecord::Generated;
} }
sub.involvesWatchAddress = mine == MINE_WATCH_ONLY;
parts.append(sub); parts.append(sub);
} }
} }
} }
else else
{ {
bool involvesWatchAddress = false;
isminetype fAllFromMe = MINE_SPENDABLE; isminetype fAllFromMe = MINE_SPENDABLE;
BOOST_FOREACH(const CTxIn& txin, wtx.vin) BOOST_FOREACH(const CTxIn& txin, wtx.vin)
{ {
isminetype mine = wallet->IsMine(txin); isminetype mine = wallet->IsMine(txin);
if(mine == MINE_WATCH_ONLY) involvesWatchAddress = true;
if(fAllFromMe > mine) fAllFromMe = mine; if(fAllFromMe > mine) fAllFromMe = mine;
} }
@ -87,6 +90,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
BOOST_FOREACH(const CTxOut& txout, wtx.vout) BOOST_FOREACH(const CTxOut& txout, wtx.vout)
{ {
isminetype mine = wallet->IsMine(txout); isminetype mine = wallet->IsMine(txout);
if(mine == MINE_WATCH_ONLY) involvesWatchAddress = true;
if(fAllToMe > mine) fAllToMe = mine; if(fAllToMe > mine) fAllToMe = mine;
} }
@ -97,6 +101,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "", parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "",
-(nDebit - nChange), nCredit - nChange)); -(nDebit - nChange), nCredit - nChange));
parts.last().involvesWatchAddress = involvesWatchAddress;
} }
else if (fAllFromMe) else if (fAllFromMe)
{ {
@ -141,6 +146,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
} }
sub.debit = -nValue; sub.debit = -nValue;
sub.involvesWatchAddress = involvesWatchAddress;
parts.append(sub); parts.append(sub);
} }
} }
@ -150,6 +156,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
// Mixed debit transaction, can't break down payees // Mixed debit transaction, can't break down payees
// //
parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nNet, 0)); parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nNet, 0));
parts.last().involvesWatchAddress = involvesWatchAddress;
} }
} }

View File

@ -137,6 +137,9 @@ public:
/** Status: can change with block chain update */ /** Status: can change with block chain update */
TransactionStatus status; TransactionStatus status;
/** Whether the transaction was sent/received with a watch-only address */
bool involvesWatchAddress;
/** Return the unique identifier for this transaction (part) */ /** Return the unique identifier for this transaction (part) */
QString getTxID() const; QString getTxID() const;

View File

@ -390,19 +390,22 @@ QVariant TransactionTableModel::txAddressDecoration(const TransactionRecord *wtx
QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const
{ {
// mark transactions involving watch-only addresses:
QString watchAddress = wtx->involvesWatchAddress ? " (w) " : "";
switch(wtx->type) switch(wtx->type)
{ {
case TransactionRecord::RecvFromOther: case TransactionRecord::RecvFromOther:
return QString::fromStdString(wtx->address); return QString::fromStdString(wtx->address) + watchAddress;
case TransactionRecord::RecvWithAddress: case TransactionRecord::RecvWithAddress:
case TransactionRecord::SendToAddress: case TransactionRecord::SendToAddress:
case TransactionRecord::Generated: case TransactionRecord::Generated:
return lookupAddress(wtx->address, tooltip); return lookupAddress(wtx->address, tooltip) + watchAddress;
case TransactionRecord::SendToOther: case TransactionRecord::SendToOther:
return QString::fromStdString(wtx->address); return QString::fromStdString(wtx->address) + watchAddress;
case TransactionRecord::SendToSelf: case TransactionRecord::SendToSelf:
default: default:
return tr("(n/a)"); return tr("(n/a)") + watchAddress;
} }
} }