Bitcoin ABC 0.31.1
P2P Digital Currency
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 (Options opts)
 
BlockMap m_block_index GUARDED_BY (cs_main)
 
std::unique_ptr< CBlockTreeDB > m_block_tree_db GUARDED_BY (::cs_main)
 
CBlockIndexInsertBlockIndex (const BlockHash &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 BlockHash &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
const CBlockIndexLookupBlockIndex (const BlockHash &hash) const EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
CBlockFileInfoGetBlockFileInfo (size_t n)
 Get block file info entry for one block file. 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
 
bool StopAfterBlockImport () 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 UndoReadFromDisk (CBlockUndo &blockundo, const CBlockIndex &index) const
 
bool ReadTxFromDisk (CMutableTransaction &tx, const FlatFilePos &pos) const
 Functions for disk access for txs. More...
 
bool ReadTxUndoFromDisk (CTxUndo &tx, const FlatFilePos &pos) const
 
void CleanupBlockRevFiles () const
 

Public Attributes

std::atomic< bool > m_importing {false}
 
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< BlockHash > &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, const FlatFilePos *dbp)
 Store block on disk. More...
 
bool CheckBlockDataAvailability(const CBlockIndex &upper_block LIFETIMEBOUND, const CBlockIndex &lower_block LIFETIMEBOUND) EXCLUSIVE_LOCKS_REQUIRED(const CBlockIndex *GetFirstStoredBlock(const CBlockIndex &start_block LIFETIMEBOUND, const CBlockIndex *lower_block=nullptr) 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 *pblockindex) EXCLUSIVE_LOCKS_REQUIRED(void UpdatePruneLock(const std::string &name, const PruneLockInfo &lock_info) EXCLUSIVE_LOCKS_REQUIRED(FILE 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
 

Private Member Functions

const CChainParamsGetParams () const
 
const Consensus::ParamsGetConsensus () const
 
bool LoadBlockIndex (const std::optional< BlockHash > &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...
 
bool FindBlockPos (FlatFilePos &pos, unsigned int nAddSize, unsigned int nHeight, uint64_t nTime, bool fKnown)
 
bool FlushChainstateBlockFile (int tip_height)
 
bool FindUndoPos (BlockValidationState &state, int nFile, FlatFilePos &pos, unsigned int nAddSize)
 
FlatFileSeq BlockFileSeq () const
 
FlatFileSeq UndoFileSeq () const
 
FILE * OpenUndoFile (const FlatFilePos &pos, bool fReadOnly=false) const
 Open an undo file (rev?????.dat) More...
 
bool WriteBlockToDisk (const CBlock &block, FlatFilePos &pos, const CMessageHeader::MessageMagic &messageStart) const
 
bool UndoWriteToDisk (const CBlockUndo &blockundo, FlatFilePos &pos, const BlockHash &hashBlock, const CMessageHeader::MessageMagic &messageStart) const
 
void FindFilesToPruneManual (std::set< int > &setFilesToPrune, int nManualPruneHeight, const Chainstate &chain, ChainstateManager &chainman)
 Calculate the block/rev files to delete based on height specified by user with RPC command pruneblockchain. More...
 
void FindFilesToPrune (std::set< int > &setFilesToPrune, int last_prune, const Chainstate &chain, ChainstateManager &chainman)
 Prune block and undo files (blk???.dat and undo???.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 103 of file blockstorage.h.

Member Typedef Documentation

◆ Options

Definition at line 239 of file blockstorage.h.

Constructor & Destructor Documentation

◆ BlockManager()

node::BlockManager::BlockManager ( Options  opts)
inlineexplicit

Definition at line 241 of file blockstorage.h.

Member Function Documentation

◆ BlockFileSeq()

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

Definition at line 702 of file blockstorage.cpp.

Here is the caller graph for this function:

◆ BlockfileTypeForHeight()

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

Definition at line 653 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 675 of file blockstorage.cpp.

Here is the caller graph for this function:

◆ CleanupBlockRevFiles()

void node::BlockManager::CleanupBlockRevFiles ( ) const

Definition at line 505 of file blockstorage.cpp.

Here is the call graph for this function:

◆ FindBlockPos()

bool node::BlockManager::FindBlockPos ( FlatFilePos pos,
unsigned int  nAddSize,
unsigned int  nHeight,
uint64_t  nTime,
bool  fKnown 
)
private

Definition at line 726 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 undo???.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 163 of file blockstorage.cpp.

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

◆ FindFilesToPruneManual()

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

Calculate the block/rev files to delete based on height specified by user with RPC command pruneblockchain.

Definition at line 130 of file blockstorage.cpp.

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

◆ FindUndoPos()

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

Definition at line 842 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 620 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 661 of file blockstorage.cpp.

Here is the call graph for this function:
Here is the caller 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 609 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 539 of file blockstorage.cpp.

◆ GetBlockPosFilename()

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

Translation to a filesystem path.

Definition at line 722 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 109 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 447 of file blockstorage.cpp.

Here is the call graph for this function:

◆ GetParams()

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

Definition at line 108 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 319 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< CBlockTreeDB > 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 FindBlockPos().

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 BlockHash hash)

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

Definition at line 243 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 316 of file blockstorage.h.

Here is the caller graph for this function:

◆ LoadBlockIndex()

bool node::BlockManager::LoadBlockIndex ( const std::optional< BlockHash > &  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 258 of file blockstorage.cpp.

Here is the call graph for this function:

◆ LoadingBlocks()

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

Definition at line 325 of file blockstorage.h.

Here is the caller graph for this function:

◆ LookupBlockIndex() [1/2]

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

Definition at line 50 of file blockstorage.cpp.

Here is the call graph for this function:

◆ LookupBlockIndex() [2/2]

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

Definition at line 44 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 200 of file blockstorage.h.

Here is the caller graph for this function:

◆ OpenUndoFile()

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

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

Definition at line 718 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 97 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 970 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 942 of file blockstorage.cpp.

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

◆ ReadTxFromDisk()

bool node::BlockManager::ReadTxFromDisk ( CMutableTransaction tx,
const FlatFilePos pos 
) const

Functions for disk access for txs.

Definition at line 987 of file blockstorage.cpp.

Here is the call graph for this function:

◆ ReadTxUndoFromDisk()

bool node::BlockManager::ReadTxUndoFromDisk ( CTxUndo tx,
const FlatFilePos pos 
) const

Definition at line 1007 of file blockstorage.cpp.

Here is the call graph for this function:

◆ StopAfterBlockImport()

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

Definition at line 327 of file blockstorage.h.

Here is the caller graph for this function:

◆ UndoFileSeq()

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

Definition at line 708 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 575 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 BlockHash hashBlock,
const CMessageHeader::MessageMagic messageStart 
) const
private

Definition at line 545 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 686 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 CMessageHeader::MessageMagic messageStart 
) const
private

Definition at line 866 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 285 of file blockstorage.h.

◆ Chainstate

friend node::BlockManager::Chainstate
private

Definition at line 104 of file blockstorage.h.

◆ ChainstateManager

friend node::BlockManager::ChainstateManager
private

Definition at line 105 of file blockstorage.h.

◆ cs_LastBlockFile

RecursiveMutex node::BlockManager::cs_LastBlockFile
private

Definition at line 181 of file blockstorage.h.

◆ m_blockfile_info

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

Definition at line 182 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 270 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 214 of file blockstorage.h.

◆ m_dirty_blockindex

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

Dirty block index entries.

Definition at line 219 of file blockstorage.h.

◆ m_dirty_fileinfo

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

Dirty block file entries.

Definition at line 222 of file blockstorage.h.

◆ m_have_pruned

bool CheckBlockDataAvailability (const CBlockIndex &upper_block LIFETIMEBOUND, const CBlockIndex &lower_block LIFETIMEBOUND) EXCLUSIVE_LOCKS_REQUIRED( const CBlockIndex* GetFirstStoredBlock (const CBlockIndex &start_block LIFETIMEBOUND, const CBlockIndex *lower_block = nullptr) 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). Find the first stored ancestor of start_block immediately after the last pruned ancestor. Return value will never be null. Caller is responsible for ensuring that start_block has data. True if any block files have ever been pruned.

Definition at line 357 of file blockstorage.h.

◆ m_importing

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

Definition at line 244 of file blockstorage.h.

◆ m_opts

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

Definition at line 236 of file blockstorage.h.

◆ m_prune_mode

const bool node::BlockManager::m_prune_mode
private

Definition at line 216 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 260 of file blockstorage.h.

◆ OpenBlockFile

FILE * 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 370 of file blockstorage.h.

◆ PRUNE_TARGET_MANUAL

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

Definition at line 322 of file blockstorage.h.

◆ SaveBlockToDisk

FlatFilePos node::BlockManager::SaveBlockToDisk

Store block on disk.

If dbp is not nullptr, then it provides the known position of the block within a block file on disk.

Definition at line 312 of file blockstorage.h.


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