indexes, refactor: Remove CBlockIndex* uses in index Init methods

Replace overriden index Init() methods that use the best block
CBlockIndex* pointer with pure CustomInit() callbacks that are passed
the block hash and height.

This gets rid of more CBlockIndex* pointer uses so indexes can work
outside the bitcoin-node process. It also simplifies the initialization
call sequence so index implementations are not responsible for
initializing the base class.

There is a slight change in behavior here since now the best block
pointer is loaded and checked before the custom index init functions are
called instead of while they are called.
This commit is contained in:
Ryan Ofsky
2022-01-17 18:36:40 -05:00
parent addb4f2af1
commit bef4e405f3
6 changed files with 15 additions and 15 deletions

View File

@@ -359,7 +359,10 @@ bool BaseIndex::Start()
// Need to register this ValidationInterface before running Init(), so that
// callbacks are not missed if Init sets m_synced to true.
RegisterValidationInterface(this);
if (!Init()) {
if (!Init()) return false;
const CBlockIndex* index = m_best_block_index.load();
if (!CustomInit(index ? std::make_optional(interfaces::BlockKey{index->GetBlockHash(), index->nHeight}) : std::nullopt)) {
return false;
}