Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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