Branch data Line data Source code
1 : : // Copyright (c) 2019-2021 The Bitcoin Core developers
2 : : // Distributed under the MIT software license, see the accompanying
3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 : :
5 : : #include <node/coin.h>
6 : :
7 : : #include <node/context.h>
8 : : #include <txmempool.h>
9 : : #include <validation.h>
10 : :
11 : : namespace node {
12 : 1047 : void FindCoins(const NodeContext& node, std::map<COutPoint, Coin>& coins)
13 : : {
14 [ - + ]: 1047 : assert(node.mempool);
15 [ - + ]: 1047 : assert(node.chainman);
16 [ + - ]: 1047 : LOCK2(cs_main, node.mempool->cs);
17 [ + - + - ]: 1047 : CCoinsViewCache& chain_view = node.chainman->ActiveChainstate().CoinsTip();
18 [ + - ]: 1047 : CCoinsViewMemPool mempool_view(&chain_view, *node.mempool);
19 [ + - + + ]: 4948 : for (auto& [outpoint, coin] : coins) {
20 [ + - + + ]: 3901 : if (auto c{mempool_view.GetCoin(outpoint)}) {
21 : 3856 : coin = std::move(*c);
22 : : } else {
23 : 45 : coin.Clear(); // Either the coin is not in the CCoinsViewCache or is spent
24 : 3901 : }
25 : : }
26 [ + - + - ]: 3141 : }
27 : : } // namespace node
|