6 #ifndef BITCOIN_VALIDATION_H 7 #define BITCOIN_VALIDATION_H 9 #if defined(HAVE_CONFIG_H) 146 typedef std::unordered_map<uint256, CBlockIndex*, BlockHasher>
BlockMap;
350 std::swap(ptxTo, check.
ptxTo);
351 std::swap(m_tx_out, check.
m_tx_out);
352 std::swap(nIn, check.
nIn);
353 std::swap(nFlags, check.
nFlags);
356 std::swap(txdata, check.
txdata);
483 std::set<CBlockIndex*, CBlockIndexWorkComparator>& block_index_candidates)
545 mutable std::atomic<bool> m_cached_finished_ibd{
false};
574 bool FlushStateToDisk(
578 int nManualPruneHeight = 0);
581 void ForceFlushStateToDisk();
585 void PruneAndFlush();
608 void PruneBlockIndexCandidates();
613 bool IsInitialBlockDownload() const;
704 #endif // BITCOIN_VALIDATION_H std::shared_ptr< const CTransaction > CTransactionRef
Definition: transaction.h:408
bool ProcessNewBlock(const CChainParams &chainparams, const std::shared_ptr< const CBlock > pblock, bool fForceProcessing, bool *fNewBlock) LOCKS_EXCLUDED(cs_main)
Definition: validation.cpp:3450
bool cacheStore
Definition: validation.h:338
static const unsigned int DEFAULT_ANCESTOR_SIZE_LIMIT
Definition: validation.h:62
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: thread_annotations.h:13
Definition: validation.h:331
static const int DEFAULT_SCRIPTCHECK_THREADS
Definition: validation.h:81
bool CheckFinalTx(const CTransaction &tx, int flags=-1) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:187
size_t nCoinCacheUsage
Definition: validation.cpp:114
static const int MAX_BLOCKTXN_DEPTH
Definition: validation.h:93
static const unsigned int MAX_BLOCKFILE_SIZE
Definition: validation.h:72
static const unsigned int DEFAULT_DESCENDANT_LIMIT
Definition: validation.h:64
int64_t nMaxTipAge
Definition: validation.cpp:116
Definition: flatfile.h:14
bool AcceptToMemoryPool(CTxMemPool &pool, CValidationState &state, const CTransactionRef &tx, bool *pfMissingInputs, std::list< CTransactionRef > *plTxnReplaced, bool bypass_limits, const CAmount nAbsurdFee, bool test_accept=false) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:854
bool IsNullDummyEnabled(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms)
Definition: validation.cpp:3030
CTxOut m_tx_out
Definition: validation.h:334
enum ScriptError_t ScriptError
Definition: script_error.h:12
CChain m_chain
Definition: validation.h:557
Definition: validation.h:134
bool operator()(const CBlockIndex *pa, const CBlockIndex *pb) const
Definition: validation.cpp:62
void ThreadScriptCheck(int worker_num)
Definition: validation.cpp:1540
Definition: txmempool.h:38
CBlockIndex * AddToBlockIndex(const CBlockHeader &block) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:2798
bool InvalidateBlock(CValidationState &state, const CChainParams &chainparams, CBlockIndex *pindex) LOCKS_EXCLUDED(cs_main)
Definition: validation.cpp:2756
Definition: interpreter.h:122
static const unsigned int MAX_DISCONNECTED_TX_POOL_SIZE
Definition: validation.h:70
uint64_t CalculateCurrentUsage()
Definition: validation.cpp:3515
static void pool cs
Definition: mempool_eviction.cpp:13
static const int64_t DEFAULT_MAX_TIP_AGE
Definition: validation.h:110
void PruneBlockFilesManual(int nManualPruneHeight)
Definition: validation.cpp:3594
static const int64_t BLOCK_DOWNLOAD_TIMEOUT_BASE
Definition: validation.h:106
CBlockIndex * pindexBestHeader
Definition: validation.cpp:102
static const unsigned int MIN_BLOCKS_TO_KEEP
Definition: validation.h:179
static const unsigned int DEFAULT_ANCESTOR_LIMIT
Definition: validation.h:60
bool CheckBlock(const CBlock &block, CValidationState &state, const Consensus::Params &consensusParams, bool fCheckPOW=true, bool fCheckMerkleRoot=true)
Definition: validation.cpp:2961
DisconnectResult
Definition: validation.h:413
unsigned int nHeight
Definition: mempool_eviction.cpp:15
CBlockPolicyEstimator feeEstimator
Definition: validation.cpp:123
static const unsigned int MAX_REJECT_MESSAGE_LENGTH
Definition: validation.h:104
bool CheckSequenceLocks(const CTxMemPool &pool, const CTransaction &tx, int flags, LockPoints *lp=nullptr, bool useExistingLockPoints=false) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:237
bool LoadChainTip(const CChainParams &chainparams) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3839
void PruneOneBlockFile(const int fileNumber) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3527
Definition: validation.h:518
bool ReadBlockFromDisk(CBlock &block, const FlatFilePos &pos, const Consensus::Params &consensusParams)
Definition: validation.cpp:927
ScriptError error
Definition: validation.h:339
ThresholdState
Definition: versionbits.h:20
bool TestBlockValidity(CValidationState &state, const CChainParams &chainparams, const CBlock &block, CBlockIndex *pindexPrev, bool fCheckPOW=true, bool fCheckMerkleRoot=true) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3485
void ResetBlockFailureFlags(CBlockIndex *pindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:2794
Definition: validation.h:98
double GuessVerificationProgress(const ChainTxData &data, const CBlockIndex *pindex)
Definition: validation.cpp:4763
std::multimap< CBlockIndex *, CBlockIndex * > m_blocks_unlinked
Definition: validation.h:470
unsigned char * begin()
Definition: uint256.h:55
bool ActivateBestChain(CValidationState &state, const CChainParams &chainparams, std::shared_ptr< const CBlock > pblock=std::shared_ptr< const CBlock >())
Definition: validation.cpp:2634
bool RewindBlockIndex(const CChainParams ¶ms) LOCKS_EXCLUDED(cs_main)
Definition: validation.cpp:4192
bool LoadBlockIndex(const Consensus::Params &consensus_params, CBlockTreeDB &blocktree, std::set< CBlockIndex *, CBlockIndexWorkComparator > &block_index_candidates) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3719
Definition: validation.h:442
BIP9Stats VersionBitsTipStatistics(const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
Definition: validation.cpp:4617
bool PreciousBlock(CValidationState &state, const CChainParams ¶ms, CBlockIndex *pindex) LOCKS_EXCLUDED(cs_main)
Definition: validation.cpp:2666
Definition: versionbits.h:59
CCriticalSection cs_main
Definition: validation.cpp:100
Definition: validation.h:430
DeploymentPos
Definition: params.h:16
static const unsigned int REJECT_INTERNAL
Definition: validation.h:685
Definition: validation.h:398
int64_t CAmount
Definition: amount.h:12
Definition: validation.cpp:2239
bool LoadBlockIndex(const CChainParams &chainparams) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:4241
static const bool DEFAULT_PERSIST_MEMPOOL
Definition: validation.h:119
Definition: validation.h:416
static const bool DEFAULT_PEERBLOOMFILTERS
Definition: validation.h:129
CCriticalSection cs_nBlockSequenceId
Definition: validation.h:525
static const int64_t BLOCK_DOWNLOAD_TIMEOUT_PER_PEER
Definition: validation.h:108
void Unload() EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3774
Definition: chainparams.h:47
static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS
Definition: validation.h:181
void UpdateUncommittedBlockStructures(CBlock &block, const CBlockIndex *pindexPrev, const Consensus::Params &consensusParams)
Definition: validation.cpp:3051
static const bool DEFAULT_WHITELISTRELAY
Definition: validation.h:54
CCriticalSection m_cs_chainstate
Definition: validation.h:537
static const unsigned int BLOCKFILE_CHUNK_SIZE
Definition: validation.h:74
bool AcceptBlockHeader(const CBlockHeader &block, CValidationState &state, const CChainParams &chainparams, CBlockIndex **ppindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3244
bool UndoReadFromDisk(CBlockUndo &blockundo, const CBlockIndex *pindex)
Definition: validation.cpp:1358
Definition: transaction.h:270
bool ReadRawBlockFromDisk(std::vector< uint8_t > &block, const FlatFilePos &pos, const CMessageHeader::MessageStartChars &message_start)
Definition: validation.cpp:967
bool fHavePruned
Definition: validation.cpp:109
void InitScriptExecutionCache()
Definition: validation.cpp:1218
static const int64_t MAX_FEE_ESTIMATION_TIP_AGE
Definition: validation.h:112
static const int MAX_BLOCKS_IN_TRANSIT_PER_PEER
Definition: validation.h:83
fs::path GetBlockPosFilename(const FlatFilePos &pos)
Definition: validation.cpp:3694
bool LoadMempool(CTxMemPool &pool)
Definition: validation.cpp:4631
bool GetTransaction(const uint256 &hash, CTransactionRef &tx, const Consensus::Params ¶ms, uint256 &hashBlock, const CBlockIndex *const blockIndex=nullptr)
Definition: validation.cpp:866
FlushStateMode
Definition: validation.h:423
unsigned long long uint64_t
Definition: stdint.h:22
static const unsigned int MAX_HEADERS_RESULTS
Definition: validation.h:88
void swap(CScriptCheck &check)
Definition: validation.h:349
const CTransaction * ptxTo
Definition: validation.h:335
static const unsigned int DEFAULT_MIN_RELAY_TX_FEE
Definition: validation.h:58
static const unsigned int UNDOFILE_CHUNK_SIZE
Definition: validation.h:76
CChain & ChainActive()
Definition: validation.cpp:88
bool TestLockPointValidity(const LockPoints *lp) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:219
Definition: txmempool.h:782
static const unsigned int DEFAULT_DESCENDANT_SIZE_LIMIT
Definition: validation.h:66
static const unsigned int DEFAULT_MEMPOOL_EXPIRY
Definition: validation.h:68
static const int DEFAULT_STOPATHEIGHT
Definition: validation.h:132
arith_uint256 nMinimumChainWork
Definition: validation.cpp:119
static const bool DEFAULT_FEEFILTER
Definition: validation.h:121
ThresholdState VersionBitsTipState(const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
Definition: validation.cpp:4611
std::atomic_bool fImporting
Definition: versionbits.h:33
static const char *const DEFAULT_BLOCKFILTERINDEX
Definition: validation.h:116
bool ReplayBlocks(const CChainParams ¶ms, CCoinsView *view)
Definition: validation.cpp:4059
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params &consensusParams)
Definition: validation.cpp:1013
#define LOCKS_EXCLUDED(...)
Definition: thread_annotations.h:21
int32_t ComputeBlockVersion(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms)
Definition: validation.cpp:1547
CScriptCheck(const CTxOut &outIn, const CTransaction &txToIn, unsigned int nInIn, unsigned int nFlagsIn, bool cacheIn, PrecomputedTransactionData *txdataIn)
Definition: validation.h:344
Definition: arith_uint256.h:252
static const unsigned int DATABASE_WRITE_INTERVAL
Definition: validation.h:100
uint64_t nPruneTarget
Definition: validation.cpp:115
uint256 g_best_block
Definition: validation.cpp:105
static const int MAX_UNCONNECTING_HEADERS
Definition: validation.h:127
int flags
Definition: bitcoin-tx.cpp:507
CFeeRate minRelayTxFee
Definition: validation.cpp:121
std::condition_variable g_best_block_cv
Definition: validation.cpp:104
std::atomic_bool fReindex
std::vector< uint8_t > data
Definition: bech32.cpp:10
Definition: uint256.h:121
bool ProcessNewBlockHeaders(const std::vector< CBlockHeader > &block, CValidationState &state, const CChainParams &chainparams, const CBlockIndex **ppindex=nullptr, CBlockHeader *first_invalid=nullptr) LOCKS_EXCLUDED(cs_main)
Definition: validation.cpp:3324
Definition: validation.h:415
static const bool DEFAULT_CHECKPOINTS_ENABLED
Definition: validation.h:114
Definition: txmempool.h:443
Definition: chainparams.h:34
FILE * OpenBlockFile(const FlatFilePos &pos, bool fReadOnly=false)
Definition: validation.cpp:3685
bool fRequireStandard
Definition: validation.cpp:111
bool IsWitnessEnabled(const CBlockIndex *pindexPrev, const Consensus::Params ¶ms)
Definition: validation.cpp:3024
const CChainParams & Params()
Definition: chainparams.cpp:399
bool IsBlockPruned(const CBlockIndex *pblockindex)
Check whether the block associated with this index entry is pruned or not.
Definition: validation.h:699
static const signed int DEFAULT_CHECKBLOCKS
Definition: validation.h:183
void UpdateCoins(const CTransaction &tx, CCoinsViewCache &inputs, int nHeight)
Definition: validation.cpp:1195
uint256 hashAssumeValid
Definition: validation.cpp:118
PrecomputedTransactionData * txdata
Definition: validation.h:340
std::set< CBlockIndex * > m_failed_blocks
Definition: validation.h:464
unsigned int nIn
Definition: validation.h:336
CBlockIndex * InsertBlockIndex(const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:3699
static const unsigned int MAX_BLOCKS_TO_ANNOUNCE
Definition: validation.h:124
static uint64_t ReadLE64(const unsigned char *ptr)
Definition: common.h:31
std::vector< unsigned char > GenerateCoinbaseCommitment(CBlock &block, const CBlockIndex *pindexPrev, const Consensus::Params &consensusParams)
Definition: validation.cpp:3063
std::unique_ptr< CCoinsViewDB > pcoinsdbview
Definition: validation.cpp:175
bool DumpMempool(const CTxMemPool &pool)
Definition: validation.cpp:4708
Definition: protocol.h:382
size_t operator()(const uint256 &hash) const
Definition: validation.h:139
std::set< CBlockIndex *, CBlockIndexWorkComparator > setBlockIndexCandidates
Definition: validation.h:563
signed long long int64_t
Definition: stdint.h:18
CBlockIndex * LookupBlockIndex(const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:149
CBlockIndex * FindForkInGlobalIndex(const CChain &chain, const CBlockLocator &locator) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: validation.cpp:156
CScript COINBASE_FLAGS
Definition: validation.cpp:127
static const unsigned int DEFAULT_BANSCORE_THRESHOLD
Definition: validation.h:117
ScriptError GetScriptError() const
Definition: validation.h:359
CChainState & ChainstateActive()
Definition: validation.cpp:86
static const unsigned int BLOCK_STALLING_TIMEOUT
Definition: validation.h:85
static const int MAX_CMPCTBLOCK_DEPTH
Definition: validation.h:91
BlockManager & m_blockman
Definition: validation.h:550
int nScriptCheckThreads
Definition: validation.cpp:106
signed int int32_t
Definition: stdint.h:17
std::unordered_map< uint256, CBlockIndex *, BlockHasher > BlockMap
Definition: validation.h:146
bool LoadExternalBlockFile(const CChainParams &chainparams, FILE *fileIn, FlatFilePos *dbp=nullptr)
Definition: validation.cpp:4293
bool fPruneMode
Definition: validation.cpp:110
full block available in blk*.dat
Definition: chain.h:123
static const uint64_t MIN_DISK_SPACE_FOR_BLOCK_FILES
Definition: validation.h:194
static const unsigned int DATABASE_FLUSH_INTERVAL
Definition: validation.h:102
int GetSpendHeight(const CCoinsViewCache &inputs)
Definition: validation.cpp:1207
int VersionBitsTipStateSinceHeight(const Consensus::Params ¶ms, Consensus::DeploymentPos pos)
Definition: validation.cpp:4623
CScriptCheck()
Definition: validation.h:343
bool fCheckpointsEnabled
Definition: validation.cpp:113
BlockMap m_block_index GUARDED_BY(cs_main)
bool LoadGenesisBlock(const CChainParams &chainparams)
Definition: validation.cpp:4288
static const bool DEFAULT_WHITELISTFORCERELAY
Definition: validation.h:56
CBlockFileInfo * GetBlockFileInfo(size_t n)
Definition: validation.cpp:4604
VersionBitsCache versionbitscache
CChainState(BlockManager &blockman)
Definition: validation.h:553
bool error(const char *fmt, const Args &... args)
Definition: system.h:59
std::unique_ptr< CBlockTreeDB > pblocktree
Definition: validation.cpp:177
static const bool DEFAULT_TXINDEX
Definition: validation.h:115
void UnloadBlockIndex()
Definition: validation.cpp:4220
static const unsigned int BLOCK_DOWNLOAD_WINDOW
Definition: validation.h:98
void UnlinkPrunedFiles(const std::set< int > &setFilesToPrune)
Definition: validation.cpp:3561
std::unique_ptr< CCoinsViewCache > pcoinsTip
Definition: validation.cpp:176
static const unsigned int DEFAULT_CHECKLEVEL
Definition: validation.h:184
bool fCheckBlockIndex
Definition: validation.cpp:112
BlockMap & BlockIndex()
Definition: validation.cpp:1055
static const int MAX_SCRIPTCHECK_THREADS
Definition: validation.h:79
static const unsigned int REJECT_HIGHFEE
Definition: validation.h:687
LockPoints lp
Definition: mempool_eviction.cpp:18
Definition: validation.h:417
Mutex g_best_block_mutex
Definition: validation.cpp:103
unsigned int nFlags
Definition: validation.h:337
Definition: transaction.h:133