7#ifndef BITCOIN_VALIDATION_H
8#define BITCOIN_VALIDATION_H
10#if defined(HAVE_CONFIG_H)
11#include <config/bitcoin-config.h>
70class SnapshotMetadata;
82#define MIN_TRANSACTION_SIZE (::GetSerializeSize(CTransaction{}))
132 bool _checkPow =
true,
133 bool _checkMerkleRoot =
true)
170 int nManualPruneHeight);
241 const std::vector<TxId> &txids_fee_calculations) {
243 txids_fee_calculations);
249 const std::vector<TxId> &txids_fee_calculations) {
251 effective_feerate, txids_fee_calculations);
277 const std::vector<TxId> &txids_fee_calculations)
285 const std::vector<TxId> &txids_fee_calculations)
312 std::map<TxId, MempoolAcceptResult> &&results)
348 int64_t accept_time,
bool bypass_limits,
349 bool test_accept =
false,
unsigned int heightOverride = 0)
365 const
Package &txns,
bool test_accept)
380 auto newvalue = (remaining -= consumed);
381 return newvalue >= 0;
384 bool check() {
return remaining >= 0; }
425 size_t signature_cache_bytes);
467 bool sigCacheStore,
bool scriptCacheStore,
472 std::vector<CScriptCheck> *pvChecks)
481 bool sigCacheStore,
bool scriptCacheStore,
487 tx, state, view,
flags, sigCacheStore, scriptCacheStore, txdata,
488 validation_cache, nSigChecksOut, nSigChecksTxLimiter,
nullptr,
nullptr);
507std::optional<std::vector<Coin>>
530 const CTransaction &tx);
566 uint32_t nFlagsIn,
bool cacheIn,
581 std::optional<std::pair<ScriptError, std::string>>
operator()();
587static_assert(std::is_nothrow_move_assignable_v<CScriptCheck>);
588static_assert(std::is_nothrow_move_constructible_v<CScriptCheck>);
589static_assert(std::is_nothrow_destructible_v<CScriptCheck>);
656 int nCheckLevel,
int nCheckDepth)
794 std::optional<BlockHash> from_snapshot_blockhash = std::nullopt);
808 void InitCoinsDB(
size_t cache_size_bytes,
bool in_memory,
bool should_wipe,
809 std::
string leveldb_name = "chainstate");
813 void InitCoinsCache(
size_t cache_size_bytes)
821 return m_coins_views && m_coins_views->m_cacheview;
834 const std::optional<BlockHash> m_from_snapshot_blockhash{};
856 return *
Assert(m_coins_views->m_cacheview);
862 return Assert(m_coins_views)->m_dbview;
873 return Assert(m_coins_views)->m_catcherview;
883 size_t m_coinsdb_cache_size_bytes{0};
886 size_t m_coinstip_cache_size_bytes{0};
890 bool ResizeCoinsCaches(
size_t coinstip_size,
size_t coinsdb_size)
905 int nManualPruneHeight = 0);
908 void ForceFlushStateToDisk();
912 void PruneAndFlush();
935 std::shared_ptr<const CBlock> pblock =
nullptr,
938 !cs_avalancheFinalizedBlockIndex)
949 Amount *blockFees =
nullptr,
bool fJustCheck = false)
966 !cs_avalancheFinalizedBlockIndex)
972 !cs_avalancheFinalizedBlockIndex);
977 !cs_avalancheFinalizedBlockIndex);
989 void ClearAvalancheFinalizedBlock()
995 bool IsBlockAvalancheFinalized(const
CBlockIndex *pindex) const
1005 template <typename F>
1008 template <typename F, typename C, typename AC>
1010 C fChild, AC fAncestorWasChanged)
1021 bool ReplayBlocks();
1027 bool LoadGenesisBlock();
1029 void TryAddBlockIndexCandidate(
CBlockIndex *pindex)
1032 void PruneBlockIndexCandidates();
1053 GetCoinsCacheSizeState(
size_t max_coins_cache_size_bytes,
1054 size_t max_mempool_size_bytes)
1062 return m_mempool ? &m_mempool->
cs :
nullptr;
1066 bool ActivateBestChainStep(
1068 const std::shared_ptr<const CBlock> &pblock,
bool &fInvalidFound,
1072 !cs_avalancheFinalizedBlockIndex);
1076 const std::shared_ptr<const CBlock> &pblock,
1081 !cs_avalancheFinalizedBlockIndex);
1086 FindMostWorkChain(
std::vector<const
CBlockIndex *> &blocksToReconcile,
1093 void UnparkBlockImpl(
CBlockIndex *pindex,
bool fClearChildren)
1099 !cs_avalancheFinalizedBlockIndex);
1102 void CheckForkWarningConditionsOnNewFork(
CBlockIndex *pindexNewForkTip)
1116 NodeClock::time_point m_next_write{NodeClock::time_point::max()};
1230 PopulateAndValidateSnapshot(
Chainstate &snapshot_chainstate,
1232 const
node::SnapshotMetadata &metadata);
1241 bool AcceptBlockHeader(
1255 return pchainstate && !pchainstate->m_disabled;
1288 std::function<void()> snapshot_download_completed = std::function<void()>();
1293 return m_options.config.GetChainParams();
1296 return m_options.config.GetChainParams().GetConsensus();
1298 bool ShouldCheckBlockIndex()
const;
1300 return *
Assert(m_options.minimum_chain_work);
1303 return *
Assert(m_options.assumed_valid_block);
1306 return m_options.notifications;
1347 mutable std::atomic<bool> m_cached_finished_ibd{
false};
1354 std::atomic<int32_t> nBlockSequenceId{1};
1357 int32_t nBlockReverseSequenceId = -1;
1365 nBlockSequenceId = 1;
1366 nBlockReverseSequenceId = -1;
1398 size_t m_total_coinstip_cache{0};
1402 size_t m_total_coinsdb_cache{0};
1428 ActivateSnapshot(
AutoFile &coins_file,
1448 return ActiveChainstate().m_chain;
1451 return ActiveChain().Height();
1454 return ActiveChain().Tip();
1457 const CBlockIndex *GetAvalancheFinalizedTip()
const;
1461 return IsUsable(m_snapshot_chainstate.get()) &&
1462 IsUsable(m_ibd_chainstate.get());
1468 return BackgroundSyncInProgress() ? m_ibd_chainstate->m_chain.Tip()
1474 return m_blockman.m_block_index;
1479 bool IsSnapshotActive()
const;
1481 std::optional<BlockHash> SnapshotBlockhash()
const;
1485 return m_snapshot_chainstate && m_ibd_chainstate &&
1486 m_ibd_chainstate->m_disabled;
1493 bool IsInitialBlockDownload()
const;
1527 std::multimap<BlockHash, FlatFilePos>
1528 *blocks_with_unknown_parent =
nullptr,
1558 bool ProcessNewBlock(
const std::shared_ptr<const CBlock> &block,
1559 bool force_processing,
bool min_pow_checked,
1579 bool ProcessNewBlockHeaders(
1603 bool AcceptBlock(const
std::shared_ptr<const
CBlock> &pblock,
1621 ProcessTransaction(const
CTransactionRef &tx,
bool test_accept = false)
1638 void ReportHeadersPresync(const
arith_uint256 &work, int64_t height,
1643 bool DetectSnapshotChainstate(
CTxMemPool *mempool)
1650 [[nodiscard]]
bool DeleteSnapshotChainstate()
1682 std::pair<
int,
int> GetPruneRange(const
Chainstate &chainstate,
1683 int last_height_can_prune)
1688 std::optional<
int> GetSnapshotBaseHeight() const
1699 bool DumpRecentHeadersTime(const
fs::path &filePath) const
1702 bool LoadRecentHeadersTime(const
fs::path &filePath)
1707template <typename DEP>
1713template <
typename DEP>
static void InvalidateBlock(ChainstateManager &chainman, avalanche::Processor *const avalanche, const BlockHash &block_hash)
const CChainParams & Params()
Return the currently selected parameters.
#define Assert(val)
Identity function.
#define Assume(val)
Assume is the identity function.
static void CheckBlockIndex(benchmark::Bench &bench)
Non-refcounted RAII wrapper for FILE*.
uint64_t getExcessiveBlockSize() const
BlockValidationOptions withCheckPoW(bool _checkPoW=true) const
BlockValidationOptions(uint64_t _excessiveBlockSize, bool _checkPow=true, bool _checkMerkleRoot=true)
BlockValidationOptions withCheckMerkleRoot(bool _checkMerkleRoot=true) const
BlockValidationOptions(const Config &config)
bool shouldValidatePoW() const
uint64_t excessiveBlockSize
bool shouldValidateMerkleRoot() const
The block chain is a tree shaped structure starting with the genesis block at the root,...
An in-memory indexed chain of blocks.
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
CCoinsView that adds a memory cache for transactions to another CCoinsView.
CCoinsView backed by the coin database (chainstate/)
This is a minimally invasive approach to shutdown on LevelDB read errors from the chainstate,...
Abstract view on the open txout dataset.
Fee rate in satoshis per virtualbyte: Amount / vB the feerate is represented internally as FeeFrac.
RollingBloomFilter is a probabilistic "keep track of most recently inserted" set.
A hasher class for SHA-256.
Closure representing one script verification.
CScriptCheck & operator=(CScriptCheck &&)=default
SignatureCache * m_signature_cache
ScriptExecutionMetrics GetScriptExecutionMetrics() const
CScriptCheck(const CScriptCheck &)=delete
TxSigCheckLimiter * pTxLimitSigChecks
ScriptExecutionMetrics metrics
CScriptCheck(CScriptCheck &&)=default
CScriptCheck(const CTxOut &outIn, const CTransaction &txToIn, SignatureCache &signature_cache, unsigned int nInIn, uint32_t nFlagsIn, bool cacheIn, const PrecomputedTransactionData &txdataIn, TxSigCheckLimiter *pTxLimitSigChecksIn=nullptr, CheckInputsLimiter *pBlockLimitSigChecksIn=nullptr)
std::optional< std::pair< ScriptError, std::string > > operator()()
PrecomputedTransactionData txdata
const CTransaction * ptxTo
CheckInputsLimiter * pBlockLimitSigChecks
CScriptCheck & operator=(const CScriptCheck &)=delete
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
RecursiveMutex cs
This mutex needs to be locked when accessing mapTx or other members that are guarded by it.
An output of a transaction.
Restore the UTXO in a Coin at a given COutPoint.
RAII wrapper for VerifyDB: Verify consistency of the block and coin databases.
VerifyDBResult VerifyDB(Chainstate &chainstate, CCoinsView &coinsview, int nCheckLevel, int nCheckDepth) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
kernel::Notifications & m_notifications
Chainstate stores and provides an API to update our local knowledge of the current best chain.
Mutex m_chainstate_mutex
The ChainState Mutex.
CChain m_chain
The current chain of blockheaders we consult and build on.
bool HasCoinsViews() const
Does this chainstate have a UTXO set attached?
CTxMemPool * GetMempool()
CCoinsViewErrorCatcher & CoinsErrorCatcher() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Mutex cs_avalancheFinalizedBlockIndex
CTxMemPool * m_mempool
Optional mempool that is kept in sync with the chain.
bool m_disabled GUARDED_BY(::cs_main)
This toggle exists for use when doing background validation for UTXO snapshots.
CCoinsViewDB & CoinsDB() EXCLUSIVE_LOCKS_REQUIRED(
ChainstateManager & m_chainman
The chainstate manager that owns this chainstate.
std::unique_ptr< CoinsViews > m_coins_views
Manages the UTXO set, which is a reflection of the contents of m_chain.
void ResetCoinsViews()
Destructs all objects related to accessing the UTXO set.
const CBlockIndex *m_avalancheFinalizedBlockIndex GUARDED_BY(cs_avalancheFinalizedBlockIndex)
The best block via avalanche voting.
node::BlockManager & m_blockman
Reference to a BlockManager instance which itself is shared across all Chainstate instances.
const CBlockIndex *m_cached_snapshot_base GUARDED_BY(::cs_main)
Cached result of LookupBlockIndex(*m_from_snapshot_blockhash)
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
SteadyClock::duration GUARDED_BY(::cs_main) time_connect_total
std::unique_ptr< Chainstate > m_ibd_chainstate GUARDED_BY(::cs_main)
The chainstate used under normal operation (i.e.
node::BlockMap & BlockIndex() EXCLUSIVE_LOCKS_REQUIRED(
CBlockIndex *m_best_header GUARDED_BY(::cs_main)
Best header we've seen so far (used for getheaders queries' starting points).
ValidationCache m_validation_cache
int64_t GUARDED_BY(::cs_main) num_blocks_total
SteadyClock::duration GUARDED_BY(::cs_main) time_index
const Config & GetConfig() const
const CBlockIndex * GetBackgroundSyncTip() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
The tip of the background sync chain.
SteadyClock::duration GUARDED_BY(::cs_main) time_post_connect
kernel::Notifications & GetNotifications() const
SteadyMilliseconds m_last_presync_update GUARDED_BY(::cs_main)
Most recent headers presync progress update, for rate-limiting.
SteadyClock::duration GUARDED_BY(::cs_main) time_check
Timers and counters used for benchmarking validation in both background and active chainstates.
RecursiveMutex & GetMutex() const LOCK_RETURNED(
Alias for cs_main.
SteadyClock::duration GUARDED_BY(::cs_main) time_total
SteadyClock::duration GUARDED_BY(::cs_main) time_chainstate
bool IsSnapshotValidated() const EXCLUSIVE_LOCKS_REQUIRED(
Is there a snapshot in use and has it been fully validated?
CCheckQueue< CScriptCheck > m_script_check_queue
A queue for script verifications that have to be performed by worker threads.
CBlockIndex * ActiveTip() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
CBlockIndex *m_best_invalid GUARDED_BY(::cs_main)
SteadyClock::duration GUARDED_BY(::cs_main) time_forks
bool BackgroundSyncInProgress() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
The state of a background sync (for net processing)
CBlockIndex *m_last_notified_header GUARDED_BY(GetMutex())
The last header for which a headerTip notification was issued.
const util::SignalInterrupt & m_interrupt
int ActiveHeight() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
const CChainParams & GetParams() const
const Consensus::Params & GetConsensus() const
CBlockIndex *m_best_parked GUARDED_BY(::cs_main)
const arith_uint256 & MinimumChainWork() const
SteadyClock::duration GUARDED_BY(::cs_main) time_verify
Chainstate *m_active_chainstate GUARDED_BY(::cs_main)
Points to either the ibd or snapshot chainstate; indicates our most-work chain.
const BlockHash & AssumedValidBlock() const
Chainstate &InitializeChainstate(CTxMemPool *mempool) EXCLUSIVE_LOCKS_REQUIRED(std::vector< Chainstate * GetAll)()
Instantiate a new chainstate.
std::set< CBlockIndex * > m_failed_blocks
In order to efficiently track invalidity of headers, we keep the set of blocks which we tried to conn...
SteadyClock::duration GUARDED_BY(::cs_main) time_connect
std::unique_ptr< Chainstate > m_snapshot_chainstate GUARDED_BY(::cs_main)
A chainstate initialized on the basis of a UTXO snapshot.
void ResetBlockSequenceCounters() EXCLUSIVE_LOCKS_REQUIRED(
node::BlockManager m_blockman
A single BlockManager instance is shared across each constructed chainstate to avoid duplicating bloc...
SteadyClock::duration GUARDED_BY(::cs_main) time_flush
A convenience class for constructing the CCoinsView* hierarchy used to facilitate access to the UTXO ...
std::unique_ptr< CCoinsViewCache > m_cacheview GUARDED_BY(cs_main)
This is the top layer of the cache hierarchy - it keeps as many coins in memory as can fit per the db...
CCoinsViewErrorCatcher m_catcherview GUARDED_BY(cs_main)
This view wraps access to the leveldb instance and handles read errors gracefully.
std::unique_ptr< CCoinsViewCache > m_connect_block_view GUARDED_BY(cs_main)
Temporary CCoinsViewCache layered on top of m_cacheview and passed to ConnectBlock().
CCoinsViewDB m_dbview GUARDED_BY(cs_main)
The lowest level of the CoinsViews cache hierarchy sits in a leveldb database on disk.
CoinsViews(DBParams db_params, CoinsViewOptions options)
This constructor initializes CCoinsViewDB and CCoinsViewErrorCatcher instances, but it does not creat...
Different type to mark Mutex at global scope.
Valid signature cache, to avoid doing expensive ECDSA signature checking twice for every transaction ...
static TxSigCheckLimiter getDisabled()
TxSigCheckLimiter & operator=(const TxSigCheckLimiter &rhs)
TxSigCheckLimiter(const TxSigCheckLimiter &rhs)
Convenience class for initializing and passing the script execution cache and signature cache.
CuckooCache::cache< ScriptCacheElement, ScriptCacheHasher > m_script_execution_cache
ValidationCache(size_t script_execution_cache_bytes, size_t signature_cache_bytes)
ValidationCache & operator=(const ValidationCache &)=delete
ValidationCache(const ValidationCache &)=delete
CSHA256 ScriptExecutionCacheHasher() const
Return a copy of the pre-initialized hasher.
CSHA256 m_script_execution_cache_hasher
Pre-initialized hasher to avoid having to recreate it for every hash calculation.
SignatureCache m_signature_cache
256-bit unsigned big integer.
A base class defining functions for notifying about certain kernel events.
Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-w...
Helper class that manages an interrupt flag, and allows a thread or signal to interrupt another threa...
static const uint64_t MAX_TX_SIGCHECKS
Allowed number of signature check operations per transaction.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
ChainstateRole
This enum describes the various roles a specific Chainstate instance can take.
static void LoadExternalBlockFile(benchmark::Bench &bench)
The LoadExternalBlockFile() function is used during -reindex and -loadblock.
Filesystem operations and types.
std::unordered_map< BlockHash, CBlockIndex, BlockHasher > BlockMap
Implement std::hash so RCUPtr can be used as a key for maps or sets.
std::vector< CTransactionRef > Package
A package is an ordered list of transactions.
std::shared_ptr< const CTransaction > CTransactionRef
static std::string ToString(const CService &ip)
@ OK
The message verification was successful.
Holds configuration for use during UTXO snapshot load and validation.
A BlockHash is a unqiue identifier for a block.
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
Holds various statistics on transactions within a chain.
User-controlled performance and debug options.
Parameters that influence chain consensus.
Application-specific storage settings.
Validation result for a transaction evaluated by MemPoolAccept (single or package).
const std::optional< int64_t > m_vsize
Virtual size as used by the mempool, calculated using serialized size and sigchecks.
MempoolAcceptResult(ResultType result_type, int64_t vsize, Amount fees, CFeeRate effective_feerate, const std::vector< TxId > &txids_fee_calculations)
Generic constructor for success cases.
const ResultType m_result_type
Result type.
const std::optional< std::vector< TxId > > m_txids_fee_calculations
Contains the txids of the transactions used for fee-related checks.
MempoolAcceptResult(TxValidationState state)
Constructor for failure case.
const TxValidationState m_state
Contains information about why the transaction failed.
MempoolAcceptResult(TxValidationState state, CFeeRate effective_feerate, const std::vector< TxId > &txids_fee_calculations)
Constructor for fee-related failure case.
ResultType
Used to indicate the results of mempool validation.
@ VALID
Fully validated, valid.
static MempoolAcceptResult Failure(TxValidationState state)
const std::optional< CFeeRate > m_effective_feerate
The feerate at which this transaction was considered.
static MempoolAcceptResult FeeFailure(TxValidationState state, CFeeRate effective_feerate, const std::vector< TxId > &txids_fee_calculations)
static MempoolAcceptResult Success(int64_t vsize, Amount fees, CFeeRate effective_feerate, const std::vector< TxId > &txids_fee_calculations)
Constructor for success case.
static MempoolAcceptResult MempoolTx(int64_t vsize, Amount fees)
Constructor for already-in-mempool case.
MempoolAcceptResult(int64_t vsize, Amount fees)
Constructor for already-in-mempool case.
const std::optional< Amount > m_base_fees
Raw base fees in satoshis.
Mockable clock in the context of tests, otherwise the system clock.
std::chrono::time_point< NodeClock > time_point
Validation result for package mempool acceptance.
PackageMempoolAcceptResult(const TxId &txid, const MempoolAcceptResult &result)
Constructor to create a PackageMempoolAcceptResult from a MempoolAcceptResult.
PackageMempoolAcceptResult(PackageValidationState state, std::map< TxId, MempoolAcceptResult > &&results)
PackageValidationState m_state
std::map< TxId, MempoolAcceptResult > m_tx_results
Map from txid to finished MempoolAcceptResults.
Precompute sighash midstate to avoid quadratic hashing.
Struct for holding cumulative results from executing a script or a sequence of scripts.
A TxId is the identifier of a transaction.
An options struct for BlockManager, more ergonomically referred to as BlockManager::Options due to th...
An options struct for ChainstateManager, more ergonomically referred to as ChainstateManager::Options...
#define EXCLUSIVE_LOCKS_REQUIRED(...)
#define LOCKS_EXCLUDED(...)
std::chrono::time_point< std::chrono::steady_clock, std::chrono::milliseconds > SteadyMilliseconds
GlobalMutex g_best_block_mutex
bool TestBlockValidity(BlockValidationState &state, const CChainParams ¶ms, Chainstate &chainstate, const CBlock &block, CBlockIndex *pindexPrev, const std::function< NodeClock::time_point()> &adjusted_time_callback, BlockValidationOptions validationOptions) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Check a block is completely valid from start to finish (only works on top of our current best block)
static constexpr int MAX_SCRIPTCHECK_THREADS
Maximum number of dedicated script-checking threads allowed.
Amount GetBlockSubsidy(int nHeight, const Consensus::Params &consensusParams)
std::condition_variable g_best_block_cv
std::optional< LockPoints > CalculateLockPointsAtTip(CBlockIndex *tip, const CCoinsView &coins_view, const CTransaction &tx)
Calculate LockPoints required to check if transaction will be BIP68 final in the next block to be cre...
static constexpr int DEFAULT_CHECKLEVEL
PackageMempoolAcceptResult ProcessNewPackage(Chainstate &active_chainstate, CTxMemPool &pool, const Package &txns, bool test_accept) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Validate (and maybe submit) a package to the mempool.
double GuessVerificationProgress(const ChainTxData &data, const CBlockIndex *pindex)
Guess verification progress (as a fraction between 0.0=genesis and 1.0=current tip).
static const uint64_t MIN_DISK_SPACE_FOR_BLOCK_FILES
Require that user allocate at least 550 MiB for block & undo files (blk???.dat and rev?...
bool CheckSequenceLocksAtTip(CBlockIndex *tip, const LockPoints &lock_points)
Check if transaction will be BIP68 final in the next block to be created on top of tip.
static const unsigned int MIN_BLOCKS_TO_KEEP
Block files containing a block-height within MIN_BLOCKS_TO_KEEP of ActiveChain().Tip() will not be pr...
const CBlockIndex * g_best_block
Used to notify getblocktemplate RPC of new tips.
bool HasValidProofOfWork(const std::vector< CBlockHeader > &headers, const Consensus::Params &consensusParams)
Check with the proof of work on each blockheader matches the value in nBits.
bool DeploymentActiveAfter(const CBlockIndex *pindexPrev, const ChainstateManager &chainman, DEP dep)
Deployment* info via ChainstateManager.
@ BASE_BLOCKHASH_MISMATCH
SynchronizationState
Current sync state passed to tip changed callbacks.
MempoolAcceptResult AcceptToMemoryPool(Chainstate &active_chainstate, const CTransactionRef &tx, int64_t accept_time, bool bypass_limits, bool test_accept=false, unsigned int heightOverride=0) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Try to add a transaction to the mempool.
void SpendCoins(CCoinsViewCache &view, const CTransaction &tx, CTxUndo &txundo, int nHeight)
Mark all the coins corresponding to a given transaction inputs as spent.
bool CheckBlock(const CBlock &block, BlockValidationState &state, const Consensus::Params ¶ms, BlockValidationOptions validationOptions)
Functions for validating blocks and updating the block tree.
const std::vector< std::string > CHECKLEVEL_DOC
Documentation for argument 'checklevel'.
void PruneBlockFilesManual(Chainstate &active_chainstate, int nManualPruneHeight)
Prune block files up to a given height.
bool IsBlockMutated(const CBlock &block)
Check if a block has been mutated (with respect to its merkle root).
@ LARGE
The cache is at >= 90% capacity.
@ CRITICAL
The coins cache is in immediate need of a flush.
bool CheckInputScripts(const CTransaction &tx, TxValidationState &state, const CCoinsViewCache &view, const uint32_t flags, bool sigCacheStore, bool scriptCacheStore, const PrecomputedTransactionData &txdata, ValidationCache &validation_cache, int &nSigChecksOut, TxSigCheckLimiter &txLimitSigChecks, CheckInputsLimiter *pBlockLimitSigChecks, std::vector< CScriptCheck > *pvChecks) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Check whether all of this transaction's input scripts succeed.
std::optional< std::vector< Coin > > GetSpentCoins(const CTransactionRef &ptx, const CCoinsViewCache &coins_view)
Get the coins spent by ptx from the coins_view.
bool DeploymentActiveAt(const CBlockIndex &index, const ChainstateManager &chainman, DEP dep)
void UpdateCoins(CCoinsViewCache &view, const CTransaction &tx, CTxUndo &txundo, int nHeight)
Apply the effects of this transaction on the UTXO set represented by view.
arith_uint256 CalculateClaimedHeadersWork(const std::vector< CBlockHeader > &headers)
Return the sum of the claimed work on a given set of headers.
static const signed int DEFAULT_CHECKBLOCKS
static const bool DEFAULT_PEERBLOOMFILTERS
bool FatalError(kernel::Notifications ¬ifications, BlockValidationState &state, const std::string &strMessage, const bilingual_str &userMessage={})