Skip to content

Commit

Permalink
Merge #644: [0.17 backport] Fixup some QT-only credit computing code
Browse files Browse the repository at this point in the history
bc3dc13 Fix qt usages of txout-based GetCredit (Gregory Sanders)
0746330 Delete unused non-CWalletTx GetCredit (Gregory Sanders)

Pull request description:

  backport of #629 for 0.17

Tree-SHA512: 2787b8a2d41c80c50e3d007763737fd3e4edba97270ee98c0b0b8ce36e494f09d6f71823416880bb9bc332bc7533f83fcfe3b9a68eb256f341271f2277f4b9e7
  • Loading branch information
instagibbs committed Jun 6, 2019
2 parents 5f6e9e0 + bc3dc13 commit 58c070a
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 37 deletions.
4 changes: 2 additions & 2 deletions src/interfaces/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -402,10 +402,10 @@ class WalletImpl : public Wallet
LOCK2(::cs_main, m_wallet.cs_wallet);
return m_wallet.GetDebit(txin, filter);
}
CAmountMap getCredit(const CTxOut& txout, isminefilter filter) override
CAmountMap getCredit(const CTransaction& tx, const size_t out_index, isminefilter filter) override
{
LOCK2(::cs_main, m_wallet.cs_wallet);
return m_wallet.GetCredit(txout, filter);
return m_wallet.GetCredit(tx, out_index, filter);
}
CoinsList listCoins() override
{
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/wallet.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ class Wallet
virtual CAmountMap getDebit(const CTxIn& txin, isminefilter filter) = 0;

//! Return credit amount if transaction input belongs to wallet.
virtual CAmountMap getCredit(const CTxOut& txout, isminefilter filter) = 0;
virtual CAmountMap getCredit(const CTransaction& tx, const size_t out_index, isminefilter filter) = 0;

//! Return AvailableCoins + LockedCoins grouped by wallet address.
//! (put change in one group with wallet address)
Expand Down
17 changes: 10 additions & 7 deletions src/qt/transactiondesc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,8 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
// Coinbase
//
CAmount nUnmatured = 0;
for (const CTxOut& txout : wtx.tx->vout)
nUnmatured += valueFor(wallet.getCredit(txout, ISMINE_ALL), ::policyAsset);
for (size_t nOut = 0; nOut < wtx.tx->vout.size(); nOut++)
nUnmatured += valueFor(wallet.getCredit(*(wtx.tx), nOut, ISMINE_ALL), ::policyAsset);
strHTML += "<b>" + tr("Credit") + ":</b> ";
if (status.is_in_main_chain)
strHTML += BitcoinUnits::formatHtmlWithUnit(unit, nUnmatured)+ " (" + tr("matures in %n more block(s)", "", status.blocks_to_maturity) + ")";
Expand Down Expand Up @@ -230,9 +230,9 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
}
}
mine = wtx.txout_is_mine.begin();
for (const CTxOut& txout : wtx.tx->vout) {
for (size_t nOut = 0; nOut < wtx.tx->vout.size(); nOut++) {
if (*(mine++)) {
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, valueFor(wallet.getCredit(txout, ISMINE_ALL), ::policyAsset)) + "<br>";
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, valueFor(wallet.getCredit(*(wtx.tx), nOut, ISMINE_ALL), ::policyAsset)) + "<br>";
}
}
}
Expand Down Expand Up @@ -288,9 +288,12 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
for (const CTxIn& txin : wtx.tx->vin)
if(wallet.txinIsMine(txin))
strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, -valueFor(wallet.getDebit(txin, ISMINE_ALL), ::policyAsset)) + "<br>";
for (const CTxOut& txout : wtx.tx->vout)
if(wallet.txoutIsMine(txout))
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, valueFor(wallet.getCredit(txout, ISMINE_ALL), ::policyAsset)) + "<br>";
for (size_t nOut = 0; nOut < wtx.tx->vout.size(); nOut++) {
const CTxOut& txout = wtx.tx->vout[nOut];
if(wallet.txoutIsMine(txout)) {
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, valueFor(wallet.getCredit(*(wtx.tx), nOut, ISMINE_ALL), ::policyAsset)) + "<br>";
}
}

strHTML += "<br><b>" + tr("Transaction") + ":</b><br>";
strHTML += GUIUtil::HtmlEscape(wtx.tx->ToString(), true);
Expand Down
39 changes: 14 additions & 25 deletions src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1263,19 +1263,22 @@ isminetype CWallet::IsMine(const CTxOut& txout) const
return ::IsMine(*this, txout.scriptPubKey);
}

CAmountMap CWallet::GetCredit(const CTxOut& txout, const isminefilter& filter) const
CAmountMap CWallet::GetCredit(const CTransaction& tx, const size_t out_index, const isminefilter& filter) const
{
assert(false && "CWallet::GetCredit(const CTxOut&, const isminefilter&): this method should not be used anymore");

CAmountMap credit;
if (txout.nAsset.IsExplicit() && txout.nValue.IsExplicit()) {
credit[txout.nAsset.GetAsset()] = txout.nValue.GetAmount();
} else {
WalletLogPrintf("WARNING: Calculating credit of blinded transaction.\n");
{
LOCK(cs_wallet);
std::map<uint256, CWalletTx>::const_iterator mi = mapWallet.find(tx.GetHash());
if (mi != mapWallet.end())
{
const CWalletTx& wtx = (*mi).second;
if (out_index < wtx.tx->vout.size() && IsMine(wtx.tx->vout[out_index]) & filter) {
CAmountMap amounts;
amounts[wtx.GetOutputAsset(out_index)] = std::max<CAmount>(0, wtx.GetOutputValueOut(out_index));
return amounts;
}
}
}
if (!MoneyRange(credit))
throw std::runtime_error(std::string(__func__) + ": value out of range");
return ((IsMine(txout) & filter) ? credit : CAmountMap());
return CAmountMap();
}

bool CWallet::IsChange(const CTxOut& txout) const
Expand Down Expand Up @@ -1371,20 +1374,6 @@ CAmountMap CWallet::GetCredit(const CWalletTx& wtx, const isminefilter& filter)
return nCredit;
}

CAmountMap CWallet::GetCredit(const CTransaction& tx, const isminefilter& filter) const
{
assert(false && "CWallet::GetCredit(const CTransaction&, const isminefilter&): this method should not be used anymore");

CAmountMap nCredit;
for (const CTxOut& txout : tx.vout)
{
nCredit += GetCredit(txout, filter);
if (!MoneyRange(nCredit))
throw std::runtime_error(std::string(__func__) + ": value out of range");
}
return nCredit;
}

CAmountMap CWallet::GetChange(const CWalletTx& wtx) const {
CAmountMap nChange;
for (unsigned int i = 0; i < wtx.tx->vout.size(); ++i) {
Expand Down
3 changes: 1 addition & 2 deletions src/wallet/wallet.h
Original file line number Diff line number Diff line change
Expand Up @@ -1067,7 +1067,7 @@ class CWallet final : public CCryptoKeyStore, public CValidationInterface
*/
CAmountMap GetDebit(const CTxIn& txin, const isminefilter& filter) const;
isminetype IsMine(const CTxOut& txout) const;
CAmountMap GetCredit(const CTxOut& txout, const isminefilter& filter) const;
CAmountMap GetCredit(const CTransaction& tx, const size_t out_index, const isminefilter& filter) const;
bool IsChange(const CTxOut& txout) const;
CAmountMap GetChange(const CTxOut& txout) const;
bool IsMine(const CTransaction& tx) const;
Expand All @@ -1076,7 +1076,6 @@ class CWallet final : public CCryptoKeyStore, public CValidationInterface
CAmountMap GetDebit(const CTransaction& tx, const isminefilter& filter) const;
/** Returns whether all of the inputs match the filter */
bool IsAllFromMe(const CTransaction& tx, const isminefilter& filter) const;
CAmountMap GetCredit(const CTransaction& tx, const isminefilter& filter) const;
CAmountMap GetChange(const CTransaction& tx) const;

// ELEMENTS:
Expand Down

0 comments on commit 58c070a

Please sign in to comment.