From 4b83bf8dbcf6b8b1c1293575391e90ac7e21b0e0 Mon Sep 17 00:00:00 2001 From: furszy Date: Wed, 27 Apr 2022 11:04:31 -0300 Subject: [PATCH] wallet: avoid extra IsSpentKey -> GetWalletTx lookups --- src/wallet/receive.cpp | 4 ++-- src/wallet/rpc/coins.cpp | 2 +- src/wallet/spend.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wallet/receive.cpp b/src/wallet/receive.cpp index 39d4574def7..8de4017371a 100644 --- a/src/wallet/receive.cpp +++ b/src/wallet/receive.cpp @@ -205,8 +205,8 @@ CAmount CachedTxGetAvailableCredit(const CWallet& wallet, const CWalletTx& wtx, CAmount nCredit = 0; uint256 hashTx = wtx.GetHash(); for (unsigned int i = 0; i < wtx.tx->vout.size(); i++) { - if (!wallet.IsSpent(COutPoint(hashTx, i)) && (allow_used_addresses || !wallet.IsSpentKey(hashTx, i))) { - const CTxOut &txout = wtx.tx->vout[i]; + const CTxOut& txout = wtx.tx->vout[i]; + if (!wallet.IsSpent(COutPoint(hashTx, i)) && (allow_used_addresses || !wallet.IsSpentKey(txout.scriptPubKey))) { nCredit += OutputGetCredit(wallet, txout, filter); if (!MoneyRange(nCredit)) throw std::runtime_error(std::string(__func__) + " : value out of range"); diff --git a/src/wallet/rpc/coins.cpp b/src/wallet/rpc/coins.cpp index 3eea03ff781..ad59cc94ff6 100644 --- a/src/wallet/rpc/coins.cpp +++ b/src/wallet/rpc/coins.cpp @@ -649,7 +649,7 @@ RPCHelpMan listunspent() CTxDestination address; const CScript& scriptPubKey = out.txout.scriptPubKey; bool fValidAddress = ExtractDestination(scriptPubKey, address); - bool reused = avoid_reuse && pwallet->IsSpentKey(out.outpoint.hash, out.outpoint.n); + bool reused = avoid_reuse && pwallet->IsSpentKey(scriptPubKey); if (destinations.size() && (!fValidAddress || !destinations.count(address))) continue; diff --git a/src/wallet/spend.cpp b/src/wallet/spend.cpp index d178358048e..c598f2c9257 100644 --- a/src/wallet/spend.cpp +++ b/src/wallet/spend.cpp @@ -191,7 +191,7 @@ CoinsResult AvailableCoins(const CWallet& wallet, continue; } - if (!allow_used_addresses && wallet.IsSpentKey(wtxid, i)) { + if (!allow_used_addresses && wallet.IsSpentKey(output.scriptPubKey)) { continue; }