From a2675897e2a499aacbd0183fdccf1401953e8de5 Mon Sep 17 00:00:00 2001 From: Martin Zumsande Date: Fri, 6 Dec 2024 11:37:10 -0500 Subject: [PATCH] validation: Don't loop over all chainstates in LoadExternalBlock This simplifies the code. The only reason to call ActivateBestChain() here is to allow the main init thread to finish startup in a case of -reindex. In this situation no second chainstate can exist anyway because -reindex would have deleted any snapshot chainstate earlier. This could change behavior slightly if -loadblocks was used when there is a snapshot chainstate. In this case, there is no reason to call ActivateBestChain() for that chainstate here - it will be called in ImportBlocks() after all blocks have been indexed. --- src/validation.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 0227ccec2fd..0e9b8da48aa 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -5158,15 +5158,8 @@ void ChainstateManager::LoadExternalBlockFile( // Activate the genesis block so normal node progress can continue if (hash == params.GetConsensus().hashGenesisBlock) { - bool genesis_activation_failure = false; - for (auto c : GetAll()) { - BlockValidationState state; - if (!c->ActivateBestChain(state, nullptr)) { - genesis_activation_failure = true; - break; - } - } - if (genesis_activation_failure) { + BlockValidationState state; + if (!ActiveChainstate().ActivateBestChain(state, nullptr)) { break; } }