aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames O'Beirne <james.obeirne@pm.me>2021-07-21 14:13:33 -0400
committerJames O'Beirne <james.obeirne@pm.me>2021-09-15 15:46:46 -0400
commit5a807736dacfc3e6fa57231219336acf08be38fb (patch)
tree75033e48de3138a4b97a0214d5491cd7104541fb /src
parent01a9b8fe719efab2c268dc738bc93cfbdf92edb7 (diff)
downloadbitcoin-5a807736dacfc3e6fa57231219336acf08be38fb.tar.xz
validation: insert assumed-valid block index entries into candidates
Diffstat (limited to 'src')
-rw-r--r--src/validation.cpp4
-rw-r--r--src/validation.h7
2 files changed, 7 insertions, 4 deletions
diff --git a/src/validation.cpp b/src/validation.cpp
index d34f4d636c..fc498f6e9b 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -3773,7 +3773,9 @@ bool BlockManager::LoadBlockIndex(
pindex->nStatus |= BLOCK_FAILED_CHILD;
setDirtyBlockIndex.insert(pindex);
}
- if (pindex->IsValid(BLOCK_VALID_TRANSACTIONS) && (pindex->HaveTxsDownloaded() || pindex->pprev == nullptr)) {
+ if (pindex->IsAssumedValid() ||
+ (pindex->IsValid(BLOCK_VALID_TRANSACTIONS) &&
+ (pindex->HaveTxsDownloaded() || pindex->pprev == nullptr))) {
block_index_candidates.insert(pindex);
}
if (pindex->nStatus & BLOCK_FAILED_MASK && (!pindexBestInvalid || pindex->nChainWork > pindexBestInvalid->nChainWork))
diff --git a/src/validation.h b/src/validation.h
index d457f1ac65..fb12f65144 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -647,9 +647,10 @@ public:
const std::optional<uint256> m_from_snapshot_blockhash;
/**
- * The set of all CBlockIndex entries with BLOCK_VALID_TRANSACTIONS (for itself and all ancestors) and
- * as good as our current tip or better. Entries may be failed, though, and pruning nodes may be
- * missing the data for the block.
+ * The set of all CBlockIndex entries with either BLOCK_VALID_TRANSACTIONS (for
+ * itself and all ancestors) *or* BLOCK_ASSUMED_VALID (if using background
+ * chainstates) and as good as our current tip or better. Entries may be failed,
+ * though, and pruning nodes may be missing the data for the block.
*/
std::set<CBlockIndex*, CBlockIndexWorkComparator> setBlockIndexCandidates;