aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/rpc/coins.cpp
diff options
context:
space:
mode:
authorSebastian Falbesoner <sebastian.falbesoner@gmail.com>2021-12-03 17:29:26 +0100
committerSebastian Falbesoner <sebastian.falbesoner@gmail.com>2021-12-08 18:06:31 +0100
commitf336ff7f213564909cf5f9742618cc6ec87600fd (patch)
treee93026efe19338b1718273db05c62980e6f89065 /src/wallet/rpc/coins.cpp
parenta7b65af2a4450663d4a20a617c59dac87b34fb36 (diff)
downloadbitcoin-f336ff7f213564909cf5f9742618cc6ec87600fd.tar.xz
rpc: avoid expensive `IsMine` calls in `GetReceived` tally
Diffstat (limited to 'src/wallet/rpc/coins.cpp')
-rw-r--r--src/wallet/rpc/coins.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/wallet/rpc/coins.cpp b/src/wallet/rpc/coins.cpp
index 7c1f4d43cd..fec4d385c3 100644
--- a/src/wallet/rpc/coins.cpp
+++ b/src/wallet/rpc/coins.cpp
@@ -23,7 +23,10 @@ static CAmount GetReceived(const CWallet& wallet, const UniValue& params, bool b
// Get the set of addresses assigned to label
std::string label = LabelFromValue(params[0]);
for (const auto& address : wallet.GetLabelAddresses(label)) {
- output_scripts.insert(GetScriptForDestination(address));
+ auto output_script{GetScriptForDestination(address)};
+ if (wallet.IsMine(output_script)) {
+ output_scripts.insert(output_script);
+ }
}
} else {
// Get the address
@@ -67,7 +70,7 @@ static CAmount GetReceived(const CWallet& wallet, const UniValue& params, bool b
}
for (const CTxOut& txout : wtx.tx->vout) {
- if (wallet.IsMine(txout.scriptPubKey) && output_scripts.count(txout.scriptPubKey) > 0) {
+ if (output_scripts.count(txout.scriptPubKey) > 0) {
amount += txout.nValue;
}
}