Bitcoin Core  27.99.0
P2P Digital Currency
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
node::BlockManager Class Reference

Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-work tip is. More...

#include <blockstorage.h>

Collaboration diagram for node::BlockManager:
[legend]

Public Types

using Options = kernel::BlockManagerOpts
 

Public Member Functions

 BlockManager (const util::SignalInterrupt &interrupt, Options opts)
 
BlockMap m_block_index GUARDED_BY (cs_main)
 
std::unique_ptr< BlockTreeDB > m_block_tree_db GUARDED_BY (::cs_main)
 
CBlockIndexInsertBlockIndex (const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 Create a new block index entry for a given block hash. More...
 
void PruneOneBlockFile (const int fileNumber) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 Mark one block file as pruned (modify associated database entries) More...
 
CBlockIndexLookupBlockIndex (const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
const CBlockIndexLookupBlockIndex (const uint256 &hash) const EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
CBlockFileInfoGetBlockFileInfo (size_t n)
 Get block file info entry for one block file. More...
 
void UpdateBlockInfo (const CBlock &block, unsigned int nHeight, const FlatFilePos &pos)
 Update blockfile info while processing a block during reindex. More...
 
bool IsPruneMode () const
 Whether running in -prune mode. More...
 
uint64_t GetPruneTarget () const
 Attempt to stay below this number of bytes of block files. More...
 
bool LoadingBlocks () const
 
uint64_t CalculateCurrentUsage ()
 Calculate the amount of disk space the block & undo files currently use. More...
 
const CBlockIndexGetLastCheckpoint (const CCheckpointData &data) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 Returns last CBlockIndex* that is a checkpoint. More...
 
fs::path GetBlockPosFilename (const FlatFilePos &pos) const
 Translation to a filesystem path. More...
 
void UnlinkPrunedFiles (const std::set< int > &setFilesToPrune) const
 Actually unlink the specified files. More...
 
bool ReadBlockFromDisk (CBlock &block, const FlatFilePos &pos) const
 Functions for disk access for blocks. More...
 
bool ReadBlockFromDisk (CBlock &block, const CBlockIndex &index) const
 
bool ReadRawBlockFromDisk (std::vector< uint8_t > &block, const FlatFilePos &pos) const
 
bool UndoReadFromDisk (CBlockUndo &blockundo, const CBlockIndex &index) const
 
void CleanupBlockRevFiles () const
 

Public Attributes

const util::SignalInterruptm_interrupt
 
std::atomic< bool > m_importing {false}
 
std::atomic_bool m_blockfiles_indexed {true}
 Whether all blockfiles have been added to the block tree database. More...
 
std::optional< int > m_snapshot_height
 The height of the base block of an assumeutxo snapshot, if one is in use. More...
 
std::vector< CBlockIndex * > GetAllBlockIndices() EXCLUSIVE_LOCKS_REQUIRED(std::multimap< CBlockIndex *, CBlockIndex * > m_blocks_unlinked
 All pairs A->B, where A (or one of its ancestors) misses transactions, but B has transactions. More...
 
bool WriteBlockIndexDB() EXCLUSIVE_LOCKS_REQUIRED(bool LoadBlockIndexDB(const std::optional< uint256 > &snapshot_blockhash) EXCLUSIVE_LOCKS_REQUIRED(void ScanAndUnlinkAlreadyPrunedFiles() EXCLUSIVE_LOCKS_REQUIRED(CBlockIndexAddToBlockIndex (const CBlockHeader &block, CBlockIndex *&best_header) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 Remove any pruned block & undo files that are still on disk. More...
 
bool WriteUndoDataForBlock(const CBlockUndo &blockundo, BlockValidationState &state, CBlockIndex &block) EXCLUSIVE_LOCKS_REQUIRED(FlatFilePos SaveBlockToDisk (const CBlock &block, int nHeight)
 Store block on disk and update block file statistics. More...
 
bool CheckBlockDataAvailability(const CBlockIndex &upper_block LIFETIMEBOUND, const CBlockIndex &lower_block LIFETIMEBOUND) EXCLUSIVE_LOCKS_REQUIRED(const CBlockIndex *GetFirstBlock(const CBlockIndex &upper_block LIFETIMEBOUND, uint32_t status_mask, const CBlockIndex *lower_block=nullptr) const EXCLUSIVE_LOCKS_REQUIRED(boo m_have_pruned ) = false
 Check if all blocks in the [upper_block, lower_block] range have data available. More...
 
bool IsBlockPruned(const CBlockIndex &block) const EXCLUSIVE_LOCKS_REQUIRED(void UpdatePruneLock(const std::string &name, const PruneLockInfo &lock_info) EXCLUSIVE_LOCKS_REQUIRED(AutoFile OpenBlockFile (const FlatFilePos &pos, bool fReadOnly=false) const
 Check whether the block associated with this index entry is pruned or not. More...
 

Static Public Attributes

static constexpr auto PRUNE_TARGET_MANUAL {std::numeric_limits<uint64_t>::max()}
 

Private Member Functions

const CChainParamsGetParams () const
 
const Consensus::ParamsGetConsensus () const
 
bool LoadBlockIndex (const std::optional< uint256 > &snapshot_blockhash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 Load the blocktree off disk and into memory. More...
 
bool FlushBlockFile (int blockfile_num, bool fFinalize, bool finalize_undo)
 Return false if block file or undo file flushing fails. More...
 
bool FlushUndoFile (int block_file, bool finalize=false)
 Return false if undo file flushing fails. More...
 
FlatFilePos FindNextBlockPos (unsigned int nAddSize, unsigned int nHeight, uint64_t nTime)
 Helper function performing various preparations before a block can be saved to disk: Returns the correct position for the block to be saved, which may be in the current or a new block file depending on nAddSize. More...
 
bool FlushChainstateBlockFile (int tip_height)
 
bool FindUndoPos (BlockValidationState &state, int nFile, FlatFilePos &pos, unsigned int nAddSize)
 
FlatFileSeq BlockFileSeq () const
 
FlatFileSeq UndoFileSeq () const
 
AutoFile OpenUndoFile (const FlatFilePos &pos, bool fReadOnly=false) const
 Open an undo file (rev?????.dat) More...
 
bool WriteBlockToDisk (const CBlock &block, FlatFilePos &pos) const
 Write a block to disk. More...
 
bool UndoWriteToDisk (const CBlockUndo &blockundo, FlatFilePos &pos, const uint256 &hashBlock) const
 
void FindFilesToPruneManual (std::set< int > &setFilesToPrune, int nManualPruneHeight, const Chainstate &chain, ChainstateManager &chainman)
 
void FindFilesToPrune (std::set< int > &setFilesToPrune, int last_prune, const Chainstate &chain, ChainstateManager &chainman)
 Prune block and undo files (blk???.dat and rev???.dat) so that the disk space used is less than a user-defined target. More...
 
std::array< std::optional< BlockfileCursor >, BlockfileType::NUM_TYPES > m_blockfile_cursors GUARDED_BY (cs_LastBlockFile)
 Since assumedvalid chainstates may be syncing a range of the chain that is very far away from the normal/background validation process, we should segment blockfiles for assumed chainstates. More...
 
int MaxBlockfileNum () const EXCLUSIVE_LOCKS_REQUIRED(cs_LastBlockFile)
 
std::unordered_map< std::string, PruneLockInfo > m_prune_locks GUARDED_BY (::cs_main)
 Map from external index name to oldest block that must not be pruned. More...
 
BlockfileType BlockfileTypeForHeight (int height)
 

Private Attributes

friend Chainstate
 
friend ChainstateManager
 
RecursiveMutex cs_LastBlockFile
 
std::vector< CBlockFileInfom_blockfile_info
 
bool m_check_for_pruning = false
 Global flag to indicate we should check to see if there are block/undo files that should be deleted. More...
 
const bool m_prune_mode
 
std::set< CBlockIndex * > m_dirty_blockindex
 Dirty block index entries. More...
 
std::set< int > m_dirty_fileinfo
 Dirty block file entries. More...
 
const kernel::BlockManagerOpts m_opts
 

Detailed Description

Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-work tip is.

This data is used mostly in Chainstate - information about, e.g., candidate tips is not maintained here.

Definition at line 134 of file blockstorage.h.

Member Typedef Documentation

◆ Options

Definition at line 265 of file blockstorage.h.

Constructor & Destructor Documentation

◆ BlockManager()

node::BlockManager::BlockManager ( const util::SignalInterrupt interrupt,
Options  opts 
)
inlineexplicit

Definition at line 267 of file blockstorage.h.

Member Function Documentation

◆ BlockFileSeq()

FlatFileSeq node::BlockManager::BlockFileSeq ( ) const
private

Definition at line 819 of file blockstorage.cpp.

Here is the caller graph for this function:

◆ BlockfileTypeForHeight()

BlockfileType node::BlockManager::BlockfileTypeForHeight ( int  height)
private

Definition at line 773 of file blockstorage.cpp.

Here is the caller graph for this function:

◆ CalculateCurrentUsage()

uint64_t node::BlockManager::CalculateCurrentUsage ( )

Calculate the amount of disk space the block & undo files currently use.

Definition at line 795 of file blockstorage.cpp.

Here is the caller graph for this function:

◆ CleanupBlockRevFiles()

void node::BlockManager::CleanupBlockRevFiles ( ) const

Definition at line 628 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FindFilesToPrune()

void node::BlockManager::FindFilesToPrune ( std::set< int > &  setFilesToPrune,
int  last_prune,
const Chainstate chain,
ChainstateManager chainman 
)
private

Prune block and undo files (blk???.dat and rev???.dat) so that the disk space used is less than a user-defined target.

The user sets the target (in MB) on the command line or in config file. This will be run on startup and whenever new space is allocated in a block or undo file, staying below the target. Changing back to unpruned requires a reindex (which in this case means the blockchain must be re-downloaded.)

Pruning functions are called from FlushStateToDisk when the m_check_for_pruning flag has been set. Block and undo files are deleted in lock-step (when blk00003.dat is deleted, so is rev00003.dat.) Pruning cannot take place until the longest chain is at least a certain length (CChainParams::nPruneAfterHeight). Pruning will never delete a block within a defined distance (currently 288) from the active chain's tip. The block index is updated by unsetting HAVE_DATA and HAVE_UNDO for any blocks that were stored in the deleted files. A db flag records the fact that at least some block files have been pruned.

Parameters
[out]setFilesToPruneThe set of file indices that can be unlinked will be returned
last_pruneThe last height we're able to prune, according to the prune locks

Definition at line 301 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FindFilesToPruneManual()

void node::BlockManager::FindFilesToPruneManual ( std::set< int > &  setFilesToPrune,
int  nManualPruneHeight,
const Chainstate chain,
ChainstateManager chainman 
)
private

Definition at line 271 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FindNextBlockPos()

FlatFilePos node::BlockManager::FindNextBlockPos ( unsigned int  nAddSize,
unsigned int  nHeight,
uint64_t  nTime 
)
private

Helper function performing various preparations before a block can be saved to disk: Returns the correct position for the block to be saved, which may be in the current or a new block file depending on nAddSize.

May flush the previous blockfile to disk if full, updates blockfile info, and checks if there is enough disk space to save the block.

The nAddSize argument passed to this function should include not just the size of the serialized CBlock, but also the size of separator fields which are written before it by WriteBlockToDisk (BLOCK_SERIALIZATION_HEADER_SIZE).

Definition at line 845 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FindUndoPos()

bool node::BlockManager::FindUndoPos ( BlockValidationState state,
int  nFile,
FlatFilePos pos,
unsigned int  nAddSize 
)
private

Definition at line 957 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FlushBlockFile()

bool node::BlockManager::FlushBlockFile ( int  blockfile_num,
bool  fFinalize,
bool  finalize_undo 
)
private

Return false if block file or undo file flushing fails.

Definition at line 744 of file blockstorage.cpp.

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

◆ FlushChainstateBlockFile()

bool node::BlockManager::FlushChainstateBlockFile ( int  tip_height)
private

Definition at line 781 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FlushUndoFile()

bool node::BlockManager::FlushUndoFile ( int  block_file,
bool  finalize = false 
)
private

Return false if undo file flushing fails.

Definition at line 734 of file blockstorage.cpp.

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

◆ GetBlockFileInfo()

CBlockFileInfo * node::BlockManager::GetBlockFileInfo ( size_t  n)

Get block file info entry for one block file.

Definition at line 664 of file blockstorage.cpp.

◆ GetBlockPosFilename()

fs::path node::BlockManager::GetBlockPosFilename ( const FlatFilePos pos) const

Translation to a filesystem path.

Definition at line 840 of file blockstorage.cpp.

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

◆ GetConsensus()

const Consensus::Params& node::BlockManager::GetConsensus ( ) const
inlineprivate

Definition at line 141 of file blockstorage.h.

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

◆ GetLastCheckpoint()

const CBlockIndex * node::BlockManager::GetLastCheckpoint ( const CCheckpointData data)

Returns last CBlockIndex* that is a checkpoint.

Definition at line 577 of file blockstorage.cpp.

Here is the call graph for this function:

◆ GetParams()

const CChainParams& node::BlockManager::GetParams ( ) const
inlineprivate

Definition at line 140 of file blockstorage.h.

Here is the caller graph for this function:

◆ GetPruneTarget()

uint64_t node::BlockManager::GetPruneTarget ( ) const
inline

Attempt to stay below this number of bytes of block files.

Definition at line 359 of file blockstorage.h.

Here is the caller graph for this function:

◆ GUARDED_BY() [1/4]

std::unordered_map<std::string, PruneLockInfo> m_prune_locks node::BlockManager::GUARDED_BY ( ::cs_main  )
private

Map from external index name to oldest block that must not be pruned.

Note
Internally, only blocks at height (height_first - PRUNE_LOCK_BUFFER - 1) and below will be pruned, but callers should avoid assuming any particular buffer size.

◆ GUARDED_BY() [2/4]

std::unique_ptr<BlockTreeDB> m_block_tree_db node::BlockManager::GUARDED_BY ( ::cs_main  )

◆ GUARDED_BY() [3/4]

std::array<std::optional<BlockfileCursor>, BlockfileType::NUM_TYPES> m_blockfile_cursors node::BlockManager::GUARDED_BY ( cs_LastBlockFile  )
private

Since assumedvalid chainstates may be syncing a range of the chain that is very far away from the normal/background validation process, we should segment blockfiles for assumed chainstates.

Otherwise, we might have wildly different height ranges mixed into the same block files, which would impair our ability to prune effectively.

This data structure maintains separate blockfile number cursors for each BlockfileType. The ASSUMED state is initialized, when necessary, in FindNextBlockPos().

The first element is the NORMAL cursor, second is ASSUMED.

◆ GUARDED_BY() [4/4]

BlockMap m_block_index node::BlockManager::GUARDED_BY ( cs_main  )

◆ InsertBlockIndex()

CBlockIndex * node::BlockManager::InsertBlockIndex ( const uint256 hash)

Create a new block index entry for a given block hash.

Definition at line 380 of file blockstorage.cpp.

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

◆ IsPruneMode()

bool node::BlockManager::IsPruneMode ( ) const
inline

Whether running in -prune mode.

Definition at line 356 of file blockstorage.h.

Here is the caller graph for this function:

◆ LoadBlockIndex()

bool node::BlockManager::LoadBlockIndex ( const std::optional< uint256 > &  snapshot_blockhash)
private

Load the blocktree off disk and into memory.

Populate certain metadata per index entry (nStatus, nChainWork, nTimeMax, etc.) as well as peripheral collections like m_dirty_blockindex.

Definition at line 396 of file blockstorage.cpp.

Here is the call graph for this function:

◆ LoadingBlocks()

bool node::BlockManager::LoadingBlocks ( ) const
inline

Definition at line 362 of file blockstorage.h.

Here is the caller graph for this function:

◆ LookupBlockIndex() [1/2]

const CBlockIndex * node::BlockManager::LookupBlockIndex ( const uint256 hash) const

Definition at line 196 of file blockstorage.cpp.

Here is the call graph for this function:

◆ LookupBlockIndex() [2/2]

CBlockIndex * node::BlockManager::LookupBlockIndex ( const uint256 hash)

Definition at line 189 of file blockstorage.cpp.

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

◆ MaxBlockfileNum()

int node::BlockManager::MaxBlockfileNum ( ) const
inlineprivate

Definition at line 230 of file blockstorage.h.

Here is the caller graph for this function:

◆ OpenUndoFile()

AutoFile node::BlockManager::OpenUndoFile ( const FlatFilePos pos,
bool  fReadOnly = false 
) const
private

Open an undo file (rev?????.dat)

Definition at line 835 of file blockstorage.cpp.

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

◆ PruneOneBlockFile()

void node::BlockManager::PruneOneBlockFile ( const int  fileNumber)

Mark one block file as pruned (modify associated database entries)

Definition at line 237 of file blockstorage.cpp.

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

◆ ReadBlockFromDisk() [1/2]

bool node::BlockManager::ReadBlockFromDisk ( CBlock block,
const CBlockIndex index 
) const

Definition at line 1080 of file blockstorage.cpp.

Here is the call graph for this function:

◆ ReadBlockFromDisk() [2/2]

bool node::BlockManager::ReadBlockFromDisk ( CBlock block,
const FlatFilePos pos 
) const

Functions for disk access for blocks.

Definition at line 1046 of file blockstorage.cpp.

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

◆ ReadRawBlockFromDisk()

bool node::BlockManager::ReadRawBlockFromDisk ( std::vector< uint8_t > &  block,
const FlatFilePos pos 
) const

Definition at line 1094 of file blockstorage.cpp.

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

◆ UndoFileSeq()

FlatFileSeq node::BlockManager::UndoFileSeq ( ) const
private

Definition at line 824 of file blockstorage.cpp.

Here is the caller graph for this function:

◆ UndoReadFromDisk()

bool node::BlockManager::UndoReadFromDisk ( CBlockUndo blockundo,
const CBlockIndex index 
) const

Definition at line 702 of file blockstorage.cpp.

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

◆ UndoWriteToDisk()

bool node::BlockManager::UndoWriteToDisk ( const CBlockUndo blockundo,
FlatFilePos pos,
const uint256 hashBlock 
) const
private

Definition at line 671 of file blockstorage.cpp.

Here is the call graph for this function:

◆ UnlinkPrunedFiles()

void node::BlockManager::UnlinkPrunedFiles ( const std::set< int > &  setFilesToPrune) const

Actually unlink the specified files.

Definition at line 806 of file blockstorage.cpp.

Here is the call graph for this function:

◆ UpdateBlockInfo()

void node::BlockManager::UpdateBlockInfo ( const CBlock block,
unsigned int  nHeight,
const FlatFilePos pos 
)

Update blockfile info while processing a block during reindex.

The block must be available on disk.

Parameters
[in]blockthe block being processed
[in]nHeightthe height of the block
[in]posthe position of the serialized CBlock on disk. This is the position returned by WriteBlockToDisk pointing at the CBlock, not the separator fields before it

Definition at line 935 of file blockstorage.cpp.

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

◆ WriteBlockToDisk()

bool node::BlockManager::WriteBlockToDisk ( const CBlock block,
FlatFilePos pos 
) const
private

Write a block to disk.

The pos argument passed to this function is modified by this call. Before this call, it should point to an unused file location where separator fields will be written, followed by the serialized CBlock data. After this call, it will point to the beginning of the serialized CBlock data, after the separator fields (BLOCK_SERIALIZATION_HEADER_SIZE)

Definition at line 979 of file blockstorage.cpp.

Here is the call graph for this function:

Member Data Documentation

◆ AddToBlockIndex

CBlockIndex * node::BlockManager::AddToBlockIndex

Remove any pruned block & undo files that are still on disk.

This could happen on some systems if the file was still being read while unlinked, or if we crash before unlinking.

Definition at line 320 of file blockstorage.h.

◆ Chainstate

friend node::BlockManager::Chainstate
private

Definition at line 136 of file blockstorage.h.

◆ ChainstateManager

friend node::BlockManager::ChainstateManager
private

Definition at line 137 of file blockstorage.h.

◆ cs_LastBlockFile

RecursiveMutex node::BlockManager::cs_LastBlockFile
private

Definition at line 212 of file blockstorage.h.

◆ m_blockfile_info

std::vector<CBlockFileInfo> node::BlockManager::m_blockfile_info
private

Definition at line 213 of file blockstorage.h.

◆ m_blockfiles_indexed

std::atomic_bool node::BlockManager::m_blockfiles_indexed {true}

Whether all blockfiles have been added to the block tree database.

Normally true, but set to false when a reindex is requested and the database is wiped. The value is persisted in the database across restarts and will be false until reindexing completes.

Definition at line 281 of file blockstorage.h.

◆ m_blocks_unlinked

std::vector<CBlockIndex*> GetAllBlockIndices () EXCLUSIVE_LOCKS_REQUIRED( std::multimap<CBlockIndex*, CBlockIndex*> node::BlockManager::m_blocks_unlinked

All pairs A->B, where A (or one of its ancestors) misses transactions, but B has transactions.

Pruned nodes may have entries where B is missing data.

Definition at line 305 of file blockstorage.h.

◆ m_check_for_pruning

bool node::BlockManager::m_check_for_pruning = false
private

Global flag to indicate we should check to see if there are block/undo files that should be deleted.

Set on startup or if we allocate more file space when we're in prune mode

Definition at line 242 of file blockstorage.h.

◆ m_dirty_blockindex

std::set<CBlockIndex*> node::BlockManager::m_dirty_blockindex
private

Dirty block index entries.

Definition at line 247 of file blockstorage.h.

◆ m_dirty_fileinfo

std::set<int> node::BlockManager::m_dirty_fileinfo
private

Dirty block file entries.

Definition at line 250 of file blockstorage.h.

◆ m_have_pruned

bool CheckBlockDataAvailability (const CBlockIndex& upper_block LIFETIMEBOUND, const CBlockIndex& lower_block LIFETIMEBOUND) EXCLUSIVE_LOCKS_REQUIRED( const CBlockIndex* GetFirstBlock ( const CBlockIndex& upper_block LIFETIMEBOUND, uint32_t status_mask, const CBlockIndex* lower_block = nullptr ) const EXCLUSIVE_LOCKS_REQUIRED( boo node::BlockManager::m_have_pruned) = false

Check if all blocks in the [upper_block, lower_block] range have data available.

The caller is responsible for ensuring that lower_block is an ancestor of upper_block (part of the same chain).

Returns the earliest block with specified status_mask flags set after the latest block not having those flags.

This function starts from upper_block, which must have all status_mask flags set, and iterates backwards through its ancestors. It continues as long as each block has all status_mask flags set, until reaching the oldest ancestor or lower_block.

Precondition
upper_block must have all status_mask flags set.
lower_block must be null or an ancestor of upper_block
Parameters
upper_blockThe starting block for the search, which must have all status_mask flags set.
status_maskBitmask specifying required status flags.
lower_blockThe earliest possible block to return. If null, the search can extend to the genesis block.
Returns
A non-null pointer to the earliest block between upper_block and lower_block, inclusive, such that every block between the returned block and upper_block has status_mask flags set. True if any block files have ever been pruned.

Definition at line 404 of file blockstorage.h.

◆ m_importing

std::atomic<bool> node::BlockManager::m_importing {false}

Definition at line 273 of file blockstorage.h.

◆ m_interrupt

const util::SignalInterrupt& node::BlockManager::m_interrupt

Definition at line 272 of file blockstorage.h.

◆ m_opts

const kernel::BlockManagerOpts node::BlockManager::m_opts
private

Definition at line 262 of file blockstorage.h.

◆ m_prune_mode

const bool node::BlockManager::m_prune_mode
private

Definition at line 244 of file blockstorage.h.

◆ m_snapshot_height

std::optional<int> node::BlockManager::m_snapshot_height

The height of the base block of an assumeutxo snapshot, if one is in use.

This controls how blockfiles are segmented by chainstate type to avoid comingling different height regions of the chain when an assumedvalid chainstate is in use. If heights are drastically different in the same blockfile, pruning suffers.

This is set during ActivateSnapshot() or upon LoadBlockIndex() if a snapshot had been previously loaded. After the snapshot is validated, this is unset to restore normal LoadBlockIndex behavior.

Definition at line 297 of file blockstorage.h.

◆ OpenBlockFile

AutoFile node::BlockManager::OpenBlockFile

Check whether the block associated with this index entry is pruned or not.

Create or update a prune lock identified by its name Open a block file (blk?????.dat)

Definition at line 413 of file blockstorage.h.

◆ PRUNE_TARGET_MANUAL

constexpr auto node::BlockManager::PRUNE_TARGET_MANUAL {std::numeric_limits<uint64_t>::max()}
staticconstexpr

Definition at line 360 of file blockstorage.h.

◆ SaveBlockToDisk

FlatFilePos node::BlockManager::SaveBlockToDisk

Store block on disk and update block file statistics.

Parameters
[in]blockthe block to be stored
[in]nHeightthe height of the block
Returns
in case of success, the position to which the block was written to in case of an error, an empty FlatFilePos

Definition at line 344 of file blockstorage.h.


The documentation for this class was generated from the following files: