Bitcoin Core  27.99.0
P2P Digital Currency
Classes | Enumerations | Functions | Variables
validation.h File Reference
#include <string>
#include <consensus/consensus.h>
#include <primitives/transaction.h>
#include <primitives/block.h>
Include dependency graph for validation.h:

Go to the source code of this file.

Classes

class  ValidationState< Result >
 Template for capturing information about block/transaction validation. More...
 
class  TxValidationState
 
class  BlockValidationState
 

Enumerations

enum class  TxValidationResult {
  TX_RESULT_UNSET = 0 , TX_CONSENSUS , TX_RECENT_CONSENSUS_CHANGE , TX_INPUTS_NOT_STANDARD ,
  TX_NOT_STANDARD , TX_MISSING_INPUTS , TX_PREMATURE_SPEND , TX_WITNESS_MUTATED ,
  TX_WITNESS_STRIPPED , TX_CONFLICT , TX_MEMPOOL_POLICY , TX_NO_MEMPOOL ,
  TX_RECONSIDERABLE , TX_UNKNOWN
}
 A "reason" why a transaction was invalid, suitable for determining whether the provider of the transaction should be banned/ignored/disconnected/etc. More...
 
enum class  BlockValidationResult {
  BLOCK_RESULT_UNSET = 0 , BLOCK_CONSENSUS , BLOCK_RECENT_CONSENSUS_CHANGE , BLOCK_CACHED_INVALID ,
  BLOCK_INVALID_HEADER , BLOCK_MUTATED , BLOCK_MISSING_PREV , BLOCK_INVALID_PREV ,
  BLOCK_TIME_FUTURE , BLOCK_CHECKPOINT , BLOCK_HEADER_LOW_WORK
}
 A "reason" why a block was invalid, suitable for determining whether the provider of the block should be banned/ignored/disconnected/etc. More...
 

Functions

static int32_t GetTransactionWeight (const CTransaction &tx)
 
static int64_t GetBlockWeight (const CBlock &block)
 
static int64_t GetTransactionInputWeight (const CTxIn &txin)
 
int GetWitnessCommitmentIndex (const CBlock &block)
 Compute at which vout of the block's coinbase transaction the witness commitment occurs, or -1 if not found. More...
 

Variables

static constexpr int NO_WITNESS_COMMITMENT {-1}
 Index marker for when no witness commitment is present in a coinbase transaction. More...
 
static constexpr size_t MINIMUM_WITNESS_COMMITMENT {38}
 Minimum size of a witness commitment structure. More...
 

Enumeration Type Documentation

◆ BlockValidationResult

enum BlockValidationResult
strong

A "reason" why a block was invalid, suitable for determining whether the provider of the block should be banned/ignored/disconnected/etc.

These are much more granular than the rejection codes, which may be more useful for some other use-cases.

Enumerator
BLOCK_RESULT_UNSET 

initial value. Block has not yet been rejected

BLOCK_CONSENSUS 

invalid by consensus rules (excluding any below reasons)

BLOCK_RECENT_CONSENSUS_CHANGE 

Invalid by a change to consensus rules more recent than SegWit.

Currently unused as there are no such consensus rule changes, and any download sources realistically need to support SegWit in order to provide useful data, so differentiating between always-invalid and invalid-by-pre-SegWit-soft-fork is uninteresting.

BLOCK_CACHED_INVALID 

this block was cached as being invalid and we didn't store the reason why

BLOCK_INVALID_HEADER 

invalid proof of work or time too old

BLOCK_MUTATED 

the block's data didn't match the data committed to by the PoW

BLOCK_MISSING_PREV 

We don't have the previous block the checked one is built on.

BLOCK_INVALID_PREV 

A block this one builds on is invalid.

BLOCK_TIME_FUTURE 

block timestamp was > 2 hours in the future (or our clock is bad)

BLOCK_CHECKPOINT 

the block failed to meet one of our checkpoints

BLOCK_HEADER_LOW_WORK 

the block header may be on a too-little-work chain

Definition at line 65 of file validation.h.

◆ TxValidationResult

enum TxValidationResult
strong

A "reason" why a transaction was invalid, suitable for determining whether the provider of the transaction should be banned/ignored/disconnected/etc.

Enumerator
TX_RESULT_UNSET 

initial value. Tx has not yet been rejected

TX_CONSENSUS 

invalid by consensus rules

TX_RECENT_CONSENSUS_CHANGE 

Invalid by a change to consensus rules more recent than SegWit.

Currently unused as there are no such consensus rule changes, and any download sources realistically need to support SegWit in order to provide useful data, so differentiating between always-invalid and invalid-by-pre-SegWit-soft-fork is uninteresting.

TX_INPUTS_NOT_STANDARD 

inputs (covered by txid) failed policy rules

TX_NOT_STANDARD 

otherwise didn't meet our local policy rules

TX_MISSING_INPUTS 

transaction was missing some of its inputs

TX_PREMATURE_SPEND 

transaction spends a coinbase too early, or violates locktime/sequence locks

TX_WITNESS_MUTATED 

Transaction might have a witness prior to SegWit activation, or witness may have been malleated (which includes non-standard witnesses).

TX_WITNESS_STRIPPED 

Transaction is missing a witness.

TX_CONFLICT 

Tx already in mempool or conflicts with a tx in the chain (if it conflicts with another tx in mempool, we use MEMPOOL_POLICY as it failed to reach the RBF threshold) Currently this is only used if the transaction already exists in the mempool or on chain.

TX_MEMPOOL_POLICY 

violated mempool's fee/size/descendant/RBF/etc limits

TX_NO_MEMPOOL 

this node does not have a mempool so can't validate the transaction

TX_RECONSIDERABLE 

fails some policy, but might be acceptable if submitted in a (different) package

TX_UNKNOWN 

transaction was not validated because package failed

Definition at line 23 of file validation.h.

Function Documentation

◆ GetBlockWeight()

static int64_t GetBlockWeight ( const CBlock block)
inlinestatic

Definition at line 153 of file validation.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTransactionInputWeight()

static int64_t GetTransactionInputWeight ( const CTxIn txin)
inlinestatic

Definition at line 157 of file validation.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTransactionWeight()

static int32_t GetTransactionWeight ( const CTransaction tx)
inlinestatic

Definition at line 149 of file validation.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetWitnessCommitmentIndex()

int GetWitnessCommitmentIndex ( const CBlock block)
inline

Compute at which vout of the block's coinbase transaction the witness commitment occurs, or -1 if not found.

Definition at line 164 of file validation.h.

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ MINIMUM_WITNESS_COMMITMENT

constexpr size_t MINIMUM_WITNESS_COMMITMENT {38}
staticconstexpr

Minimum size of a witness commitment structure.

Defined in BIP 141.

Definition at line 18 of file validation.h.

◆ NO_WITNESS_COMMITMENT

constexpr int NO_WITNESS_COMMITMENT {-1}
staticconstexpr

Index marker for when no witness commitment is present in a coinbase transaction.

Definition at line 15 of file validation.h.