Base class for indices of blockchain data.
More...
#include <base.h>
|
class | DB |
| The database stores a block locator of the chain the database is synced to so that the TxIndex can efficiently determine the point it last stopped at. More...
|
|
|
virtual | ~BaseIndex () |
| Destructor interrupts sync thread if running and blocks until it exits. More...
|
|
bool | Start (Chainstate &active_chainstate) |
| Start initializes the sync state and registers the instance as a ValidationInterface so that it stays in sync with blockchain updates. More...
|
|
void | Stop () |
| Stops the instance from staying in sync with blockchain updates. More...
|
|
IndexSummary | GetSummary () const |
| Get a summary of the index and its state. More...
|
|
|
void | BlockConnected (const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex) override |
| Notifies listeners of a block being connected. More...
|
|
void | ChainStateFlushed (const CBlockLocator &locator) override |
| Notifies listeners of the new active block chain on-disk. More...
|
|
const CBlockIndex * | CurrentIndex () |
|
virtual bool | Init () |
| Initialize internal state from the database and block index. More...
|
|
virtual bool | WriteBlock (const CBlock &block, const CBlockIndex *pindex) |
| Write update index entries for a newly connected block. More...
|
|
virtual bool | CommitInternal (CDBBatch &batch) |
| Virtual method called internally by Commit that can be overridden to atomically commit more index state. More...
|
|
virtual bool | Rewind (const CBlockIndex *current_tip, const CBlockIndex *new_tip) |
| Rewind index to an earlier chain tip during a chain reorg. More...
|
|
virtual DB & | GetDB () const =0 |
|
virtual const char * | GetName () const =0 |
| Get the name of the index for display in logs. More...
|
|
| ~CValidationInterface ()=default |
| Protected destructor so that instances can only be deleted by derived classes. More...
|
|
virtual void | UpdatedBlockTip (const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) |
| Notifies listeners when the block chain tip advances. More...
|
|
virtual void | TransactionAddedToMempool (const CTransactionRef &tx, std::shared_ptr< const std::vector< Coin >> spent_coins, uint64_t mempool_sequence) |
| Notifies listeners of a transaction having been added to mempool. More...
|
|
virtual void | TransactionRemovedFromMempool (const CTransactionRef &tx, MemPoolRemovalReason reason, uint64_t mempool_sequence) |
| Notifies listeners of a transaction leaving mempool. More...
|
|
virtual void | BlockDisconnected (const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex) |
| Notifies listeners of a block being disconnected. More...
|
|
virtual void | BlockChecked (const CBlock &, const BlockValidationState &) |
| Notifies listeners of a block validation result. More...
|
|
virtual void | NewPoWValidBlock (const CBlockIndex *pindex, const std::shared_ptr< const CBlock > &block) |
| Notifies listeners that a block which builds directly on our current tip has been received and connected to the headers tree, though not validated yet. More...
|
|
virtual void | BlockFinalized (const CBlockIndex *pindex) |
|
|
void | ThreadSync () |
| Sync the index with the block index starting from the current best block. More...
|
|
bool | Commit () |
| Write the current index state (eg. More...
|
|
Base class for indices of blockchain data.
This implements CValidationInterface and ensures blocks are indexed sequentially according to their position in the active chain.
Definition at line 27 of file base.h.
◆ ~BaseIndex()
BaseIndex::~BaseIndex |
( |
| ) |
|
|
virtual |
Destructor interrupts sync thread if running and blocks until it exits.
Definition at line 53 of file base.cpp.
◆ BlockConnected()
void BaseIndex::BlockConnected |
( |
const std::shared_ptr< const CBlock > & |
block, |
|
|
const CBlockIndex * |
pindex |
|
) |
| |
|
overrideprotectedvirtual |
Notifies listeners of a block being connected.
Provides a vector of transactions evicted from the mempool as a result.
Called on a background thread.
Reimplemented from CValidationInterface.
Definition at line 249 of file base.cpp.
◆ ChainStateFlushed()
void BaseIndex::ChainStateFlushed |
( |
const CBlockLocator & |
locator | ) |
|
|
overrideprotectedvirtual |
Notifies listeners of the new active block chain on-disk.
Prior to this callback, any updates are not guaranteed to persist on disk (ie clients need to handle shutdown/restart safety by being able to understand when some updates were lost due to unclean shutdown).
When this callback is invoked, the validation changes done by any prior callback are guaranteed to exist on disk and survive a restart, including an unclean shutdown.
Provides a locator describing the best chain, which is likely useful for storing current state on disk in client DBs.
Called on a background thread.
Reimplemented from CValidationInterface.
Definition at line 296 of file base.cpp.
◆ Commit()
bool BaseIndex::Commit |
( |
| ) |
|
|
private |
Write the current index state (eg.
chain block locator and subclass-specific items) to disk.
Recommendations for error handling: If called on a successor of the previous committed best block in the index, the index can continue processing without risk of corruption, though the index state will need to catch up from further behind on reboot. If the new state is not a successor of the previous state (due to a chain reorganization), the index must halt until Commit succeeds or else it could end up getting corrupted.
Definition at line 208 of file base.cpp.
◆ CommitInternal()
bool BaseIndex::CommitInternal |
( |
CDBBatch & |
batch | ) |
|
|
protectedvirtual |
◆ CurrentIndex()
◆ GetDB()
virtual DB& BaseIndex::GetDB |
( |
| ) |
const |
|
protectedpure virtual |
◆ GetName()
virtual const char* BaseIndex::GetName |
( |
| ) |
const |
|
protectedpure virtual |
◆ GetSummary()
Get a summary of the index and its state.
Definition at line 388 of file base.cpp.
◆ Init()
◆ Rewind()
Rewind index to an earlier chain tip during a chain reorg.
The tip must be an ancestor of the current best block.
Reimplemented in CoinStatsIndex, and BlockFilterIndex.
Definition at line 229 of file base.cpp.
◆ Start()
bool BaseIndex::Start |
( |
Chainstate & |
active_chainstate | ) |
|
Start initializes the sync state and registers the instance as a ValidationInterface so that it stays in sync with blockchain updates.
Definition at line 366 of file base.cpp.
◆ Stop()
Stops the instance from staying in sync with blockchain updates.
Definition at line 380 of file base.cpp.
◆ ThreadSync()
void BaseIndex::ThreadSync |
( |
| ) |
|
|
private |
Sync the index with the block index starting from the current best block.
Intended to be run in its own thread, m_thread_sync, and can be interrupted with m_interrupt. Once the index gets in sync, the m_synced flag is set and the BlockConnected ValidationInterface callback takes over and the sync thread exits.
Definition at line 133 of file base.cpp.
◆ WriteBlock()
virtual bool BaseIndex::WriteBlock |
( |
const CBlock & |
block, |
|
|
const CBlockIndex * |
pindex |
|
) |
| |
|
inlineprotectedvirtual |
◆ m_best_block_index
std::atomic<const CBlockIndex *> BaseIndex::m_best_block_index {nullptr} |
|
private |
The last block in the chain that the index is in sync with.
Definition at line 55 of file base.h.
◆ m_chainstate
◆ m_interrupt
◆ m_synced
std::atomic<bool> BaseIndex::m_synced {false} |
|
private |
Whether the index is in sync with the main chain.
The flag is flipped from false to true once, after which point this starts processing ValidationInterface notifications to stay in sync.
Definition at line 52 of file base.h.
◆ m_thread_sync
std::thread BaseIndex::m_thread_sync |
|
private |
The documentation for this class was generated from the following files: