Bitcoin Core 28.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_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_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 class 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_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 57 of file validation.h.

◆ TxValidationResult

enum class 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_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 137 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 141 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 133 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 148 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.