@ -5048,7 +5048,6 @@ void ChainstateManager::CheckBlockIndex()
CBlockIndex * pindexFirstNotTransactionsValid = nullptr ; // Oldest ancestor of pindex which does not have BLOCK_VALID_TRANSACTIONS (regardless of being valid or not), since assumeutxo snapshot if used.
CBlockIndex * pindexFirstNotChainValid = nullptr ; // Oldest ancestor of pindex which does not have BLOCK_VALID_CHAIN (regardless of being valid or not), since assumeutxo snapshot if used.
CBlockIndex * pindexFirstNotScriptsValid = nullptr ; // Oldest ancestor of pindex which does not have BLOCK_VALID_SCRIPTS (regardless of being valid or not), since assumeutxo snapshot if used.
CBlockIndex * pindexFirstAssumeValid = nullptr ; // Oldest ancestor of pindex which has BLOCK_ASSUMED_VALID
// After checking an assumeutxo snapshot block, reset pindexFirst pointers
// to earlier blocks that have not been downloaded or validated yet, so
@ -5068,7 +5067,6 @@ void ChainstateManager::CheckBlockIndex()
while ( pindex ! = nullptr ) {
nNodes + + ;
if ( pindexFirstAssumeValid = = nullptr & & pindex - > nStatus & BLOCK_ASSUMED_VALID ) pindexFirstAssumeValid = pindex ;
if ( pindexFirstInvalid = = nullptr & & pindex - > nStatus & BLOCK_FAILED_VALID ) pindexFirstInvalid = pindex ;
if ( pindexFirstMissing = = nullptr & & ! ( pindex - > nStatus & BLOCK_HAVE_DATA ) ) {
pindexFirstMissing = pindex ;
@ -5115,7 +5113,7 @@ void ChainstateManager::CheckBlockIndex()
if ( pindex - > nStatus & BLOCK_HAVE_DATA ) assert ( pindex - > nTx > 0 ) ;
}
if ( pindex - > nStatus & BLOCK_HAVE_UNDO ) assert ( pindex - > nStatus & BLOCK_HAVE_DATA ) ;
if ( pindex- > IsAssumedValid ( ) ) {
if ( snap_base & & snap_base - > GetAncestor ( pindex - > nHeight ) = = pindex ) {
// Assumed-valid blocks should connect to the main chain.
assert ( ( pindex - > nStatus & BLOCK_VALID_MASK ) > = BLOCK_VALID_TREE ) ;
}
@ -5271,7 +5269,6 @@ void ChainstateManager::CheckBlockIndex()
if ( pindex = = pindexFirstNotTransactionsValid ) pindexFirstNotTransactionsValid = nullptr ;
if ( pindex = = pindexFirstNotChainValid ) pindexFirstNotChainValid = nullptr ;
if ( pindex = = pindexFirstNotScriptsValid ) pindexFirstNotScriptsValid = nullptr ;
if ( pindex = = pindexFirstAssumeValid ) pindexFirstAssumeValid = nullptr ;
// Find our parent.
CBlockIndex * pindexPar = pindex - > pprev ;
// Find which child we just visited.
@ -5757,22 +5754,14 @@ bool ChainstateManager::PopulateAndValidateSnapshot(
// Fake various pieces of CBlockIndex state:
CBlockIndex * index = nullptr ;
// Don't make any modifications to the genesis block.
// This is especially important because we don't want to erroneously
// apply BLOCK_ASSUMED_VALID to genesis, which would happen if we didn't skip
// it here (since it apparently isn't BLOCK_VALID_SCRIPTS).
// Don't make any modifications to the genesis block since it shouldn't be
// neccessary, and since the genesis block doesn't have normal flags like
// BLOCK_VALID_SCRIPTS set.
constexpr int AFTER_GENESIS_START { 1 } ;
for ( int i = AFTER_GENESIS_START ; i < = snapshot_chainstate . m_chain . Height ( ) ; + + i ) {
index = snapshot_chainstate . m_chain [ i ] ;
// Mark unvalidated block index entries beneath the snapshot base block as assumed-valid.
if ( ! index - > IsValid ( BLOCK_VALID_SCRIPTS ) ) {
// This flag will be removed once the block is fully validated by a
// background chainstate.
index - > nStatus | = BLOCK_ASSUMED_VALID ;
}
// Fake BLOCK_OPT_WITNESS so that Chainstate::NeedsRedownload()
// won't ask to rewind the entire assumed-valid chain on startup.
if ( DeploymentActiveAt ( * index , * this , Consensus : : DEPLOYMENT_SEGWIT ) ) {