coin.cpp raw

   1  // Copyright (c) 2019-present 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  void FindCoins(const NodeContext& node, std::map<COutPoint, Coin>& coins)
  13  {
  14      assert(node.mempool);
  15      assert(node.chainman);
  16      LOCK2(cs_main, node.mempool->cs);
  17      CCoinsViewCache& chain_view = node.chainman->ActiveChainstate().CoinsTip();
  18      CCoinsViewMemPool mempool_view(&chain_view, *node.mempool);
  19      for (auto& [outpoint, coin] : coins) {
  20          if (auto c{mempool_view.GetCoin(outpoint)}) {
  21              coin = std::move(*c);
  22          } else {
  23              coin.Clear(); // Either the coin is not in the CCoinsViewCache or is spent
  24          }
  25      }
  26  }
  27  } // namespace node
  28