diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/node/chainstate.cpp | 4 | ||||
-rw-r--r-- | src/node/chainstate.h | 4 | ||||
-rw-r--r-- | src/validation.cpp | 26 |
3 files changed, 20 insertions, 14 deletions
diff --git a/src/node/chainstate.cpp b/src/node/chainstate.cpp index e21116dd7e..d03b9dcac6 100644 --- a/src/node/chainstate.cpp +++ b/src/node/chainstate.cpp @@ -129,8 +129,8 @@ std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManage bool fReset, bool fReindexChainState, const Consensus::Params& consensus_params, - unsigned int check_blocks, - unsigned int check_level, + int check_blocks, + int check_level, std::function<int64_t()> get_unix_time_seconds) { auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { diff --git a/src/node/chainstate.h b/src/node/chainstate.h index 279f187642..8ba04f1436 100644 --- a/src/node/chainstate.h +++ b/src/node/chainstate.h @@ -79,8 +79,8 @@ std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManage bool fReset, bool fReindexChainState, const Consensus::Params& consensus_params, - unsigned int check_blocks, - unsigned int check_level, + int check_blocks, + int check_level, std::function<int64_t()> get_unix_time_seconds); } // namespace node diff --git a/src/validation.cpp b/src/validation.cpp index 035b5783c3..214112e2bd 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3843,12 +3843,14 @@ bool CVerifyDB::VerifyDB( { AssertLockHeld(cs_main); - if (chainstate.m_chain.Tip() == nullptr || chainstate.m_chain.Tip()->pprev == nullptr) + if (chainstate.m_chain.Tip() == nullptr || chainstate.m_chain.Tip()->pprev == nullptr) { return true; + } // Verify blocks in the best chain - if (nCheckDepth <= 0 || nCheckDepth > chainstate.m_chain.Height()) + if (nCheckDepth <= 0 || nCheckDepth > chainstate.m_chain.Height()) { nCheckDepth = chainstate.m_chain.Height(); + } nCheckLevel = std::max(0, std::min(4, nCheckLevel)); LogPrintf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel); CCoinsViewCache coins(&coinsview); @@ -3863,14 +3865,15 @@ bool CVerifyDB::VerifyDB( for (pindex = chainstate.m_chain.Tip(); pindex && pindex->pprev; pindex = pindex->pprev) { const int percentageDone = std::max(1, std::min(99, (int)(((double)(chainstate.m_chain.Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100)))); - if (reportDone < percentageDone/10) { + if (reportDone < percentageDone / 10) { // report every 10% step LogPrintf("[%d%%]...", percentageDone); /* Continued */ - reportDone = percentageDone/10; + reportDone = percentageDone / 10; } uiInterface.ShowProgress(_("Verifying blocks…").translated, percentageDone, false); - if (pindex->nHeight <= chainstate.m_chain.Height()-nCheckDepth) + if (pindex->nHeight <= chainstate.m_chain.Height() - nCheckDepth) { break; + } if ((fPruneMode || is_snapshot_cs) && !(pindex->nStatus & BLOCK_HAVE_DATA)) { // If pruning or running under an assumeutxo snapshot, only go // back as far as we have data. @@ -3879,12 +3882,14 @@ bool CVerifyDB::VerifyDB( } CBlock block; // check level 0: read from disk - if (!ReadBlockFromDisk(block, pindex, consensus_params)) + if (!ReadBlockFromDisk(block, pindex, consensus_params)) { return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString()); + } // check level 1: verify block validity - if (nCheckLevel >= 1 && !CheckBlock(block, state, consensus_params)) + if (nCheckLevel >= 1 && !CheckBlock(block, state, consensus_params)) { return error("%s: *** found bad block at %d, hash=%s (%s)\n", __func__, pindex->nHeight, pindex->GetBlockHash().ToString(), state.ToString()); + } // check level 2: verify undo validity if (nCheckLevel >= 2 && pindex) { CBlockUndo undo; @@ -3912,8 +3917,9 @@ bool CVerifyDB::VerifyDB( } if (ShutdownRequested()) return true; } - if (pindexFailure) + if (pindexFailure) { return error("VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", chainstate.m_chain.Height() - pindexFailure->nHeight + 1, nGoodTransactions); + } // store block count as we move pindex at check level >= 4 int block_count = chainstate.m_chain.Height() - pindex->nHeight; @@ -3922,10 +3928,10 @@ bool CVerifyDB::VerifyDB( if (nCheckLevel >= 4) { while (pindex != chainstate.m_chain.Tip()) { const int percentageDone = std::max(1, std::min(99, 100 - (int)(((double)(chainstate.m_chain.Height() - pindex->nHeight)) / (double)nCheckDepth * 50))); - if (reportDone < percentageDone/10) { + if (reportDone < percentageDone / 10) { // report every 10% step LogPrintf("[%d%%]...", percentageDone); /* Continued */ - reportDone = percentageDone/10; + reportDone = percentageDone / 10; } uiInterface.ShowProgress(_("Verifying blocks…").translated, percentageDone, false); pindex = chainstate.m_chain.Next(pindex); |