diff options
author | Sebastian Falbesoner <sebastian.falbesoner@gmail.com> | 2021-12-03 17:29:26 +0100 |
---|---|---|
committer | Sebastian Falbesoner <sebastian.falbesoner@gmail.com> | 2021-12-08 18:06:31 +0100 |
commit | f336ff7f213564909cf5f9742618cc6ec87600fd (patch) | |
tree | e93026efe19338b1718273db05c62980e6f89065 /src/wallet/rpc/coins.cpp | |
parent | a7b65af2a4450663d4a20a617c59dac87b34fb36 (diff) | |
download | bitcoin-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.cpp | 7 |
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; } } |