Base class for indices of blockchain data.
More...
#include <base.h>
|
virtual | ~BaseIndex () |
| Destructor interrupts sync thread if running and blocks until it exits. More...
|
|
bool | BlockUntilSyncedToCurrentChain () |
| Blocks the current thread until the index is caught up to the current state of the block chain. More...
|
|
void | Interrupt () |
|
void | Start () |
| 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...
|
|
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 22 of file base.h.
◆ ~BaseIndex()
BaseIndex::~BaseIndex |
( |
| ) |
|
|
virtual |
Destructor interrupts sync thread if running and blocks until it exits.
Definition at line 49 of file base.cpp.
◆ BlockConnected()
void BaseIndex::BlockConnected |
( |
const std::shared_ptr< const CBlock > & |
block, |
|
|
const CBlockIndex * |
pindex, |
|
|
const std::vector< CTransactionRef > & |
txnConflicted |
|
) |
| |
|
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 152 of file base.cpp.
◆ BlockUntilSyncedToCurrentChain()
bool BaseIndex::BlockUntilSyncedToCurrentChain |
( |
| ) |
|
Blocks the current thread until the index is caught up to the current state of the block chain.
This only blocks if the index has gotten in sync once and only needs to process blocks in the ValidationInterface queue. If the index is catching up from far behind, this method does not block and immediately returns false.
Definition at line 228 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 190 of file base.cpp.
◆ GetDB()
virtual DB& BaseIndex::GetDB |
( |
| ) |
const |
|
protectedpure virtual |
◆ GetName()
virtual const char* BaseIndex::GetName |
( |
| ) |
const |
|
protectedpure virtual |
Get the name of the index for display in logs.
Implemented in TxIndex.
◆ Init()
Initialize internal state from the database and block index.
Reimplemented in TxIndex.
Definition at line 55 of file base.cpp.
◆ Interrupt()
void BaseIndex::Interrupt |
( |
| ) |
|
◆ Start()
void BaseIndex::Start |
( |
| ) |
|
Start initializes the sync state and registers the instance as a ValidationInterface so that it stays in sync with blockchain updates.
Definition at line 257 of file base.cpp.
◆ Stop()
Stops the instance from staying in sync with blockchain updates.
Definition at line 271 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 84 of file base.cpp.
◆ WriteBestBlock()
bool BaseIndex::WriteBestBlock |
( |
const CBlockIndex * |
block_index | ) |
|
|
private |
Write the current chain block locator to the DB.
Definition at line 143 of file base.cpp.
◆ WriteBlock()
virtual bool BaseIndex::WriteBlock |
( |
const CBlock & |
block, |
|
|
const CBlockIndex * |
pindex |
|
) |
| |
|
inlineprotectedvirtual |
Write update index entries for a newly connected block.
Reimplemented in TxIndex.
Definition at line 70 of file base.h.
◆ 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 45 of file base.h.
◆ 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 42 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: