diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -1256,6 +1256,8 @@ ScheduleBatchPriority(); { + const CChainParams &chainParams = config.GetChainParams(); + CImportingNow imp; // -reindex @@ -1282,7 +1284,7 @@ LogPrintf("Reindexing finished\n"); // To avoid ending up in a situation without genesis block, re-try // initializing (no-op if reindexing worked): - LoadGenesisBlock(config.GetChainParams()); + LoadGenesisBlock(chainParams); } // hardcoded $DATADIR/bootstrap.dat @@ -1312,6 +1314,23 @@ } } + // Reconsider blocks we know are valid. They may have been marked + // invalid by, for instance, running an outdated version of the node + // software. + const MapCheckpoints &checkpoints = + chainParams.Checkpoints().mapCheckpoints; + for (const MapCheckpoints::value_type &i : checkpoints) { + const BlockHash &hash = i.second; + + LOCK(cs_main); + CBlockIndex *pblockindex = LookupBlockIndex(hash); + if (pblockindex && !pblockindex->nStatus.isValid()) { + LogPrintf("Reconsidering checkpointed block %s ...\n", + hash.GetHex()); + ResetBlockFailureFlags(pblockindex); + } + } + // scan for better chains in the block chain database, that are not yet // connected in the active best chain CValidationState state;