Bitcoin Core 28.99.0
P2P Digital Currency
coin.cpp
Go to the documentation of this file.
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
11namespace node {
12void 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
CCoinsView that adds a memory cache for transactions to another CCoinsView.
Definition: coins.h:363
CCoinsView that brings transactions from a mempool into view.
Definition: txmempool.h:925
std::optional< Coin > GetCoin(const COutPoint &outpoint) const override
GetCoin, returning whether it exists and is not spent.
Definition: txmempool.cpp:1027
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
Definition: cs_main.cpp:8
Definition: messages.h:20
void FindCoins(const NodeContext &node, std::map< COutPoint, Coin > &coins)
Look up unspent output information.
Definition: coin.cpp:12
NodeContext struct containing references to chain state and connection state.
Definition: context.h:56
#define LOCK2(cs1, cs2)
Definition: sync.h:258
assert(!tx.IsCoinBase())