aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFabian Jahr <fjahr@protonmail.com>2023-10-03 01:31:00 +0200
committerFabian Jahr <fjahr@protonmail.com>2023-10-06 19:43:31 +0200
commit73700fb554d6abad705d8f48aed4840fedb36c79 (patch)
treebed84529f7a403349476225283491d8e41946e17 /src
parent2c9354facb27a6c394bb0c64f85fc4e3a33f4aed (diff)
validation, test: Improve and document nChainTx check for testability
Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
Diffstat (limited to 'src')
-rw-r--r--src/kernel/chainparams.cpp2
-rw-r--r--src/test/validation_tests.cpp4
-rw-r--r--src/validation.cpp12
3 files changed, 11 insertions, 7 deletions
diff --git a/src/kernel/chainparams.cpp b/src/kernel/chainparams.cpp
index 5e893a3f58..644e2a2c67 100644
--- a/src/kernel/chainparams.cpp
+++ b/src/kernel/chainparams.cpp
@@ -495,7 +495,7 @@ public:
{
.height = 110,
.hash_serialized = AssumeutxoHash{uint256S("0x1ebbf5850204c0bdb15bf030f47c7fe91d45c44c712697e4509ba67adb01c618")},
- .nChainTx = 110,
+ .nChainTx = 111,
.blockhash = uint256S("0x696e92821f65549c7ee134edceeeeaaa4105647a3c4fd9f298c0aec0ab50425c")
},
{
diff --git a/src/test/validation_tests.cpp b/src/test/validation_tests.cpp
index d34d98c219..2692037273 100644
--- a/src/test/validation_tests.cpp
+++ b/src/test/validation_tests.cpp
@@ -138,11 +138,11 @@ BOOST_AUTO_TEST_CASE(test_assumeutxo)
const auto out110 = *params->AssumeutxoForHeight(110);
BOOST_CHECK_EQUAL(out110.hash_serialized.ToString(), "1ebbf5850204c0bdb15bf030f47c7fe91d45c44c712697e4509ba67adb01c618");
- BOOST_CHECK_EQUAL(out110.nChainTx, 110U);
+ BOOST_CHECK_EQUAL(out110.nChainTx, 111U);
const auto out110_2 = *params->AssumeutxoForBlockhash(uint256S("0x696e92821f65549c7ee134edceeeeaaa4105647a3c4fd9f298c0aec0ab50425c"));
BOOST_CHECK_EQUAL(out110_2.hash_serialized.ToString(), "1ebbf5850204c0bdb15bf030f47c7fe91d45c44c712697e4509ba67adb01c618");
- BOOST_CHECK_EQUAL(out110_2.nChainTx, 110U);
+ BOOST_CHECK_EQUAL(out110_2.nChainTx, 111U);
}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/validation.cpp b/src/validation.cpp
index 07e8b9152b..464030f9fc 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -4844,10 +4844,14 @@ void ChainstateManager::CheckBlockIndex()
CBlockIndex* pindexFirstAssumeValid = nullptr; // Oldest ancestor of pindex which has BLOCK_ASSUMED_VALID
while (pindex != nullptr) {
nNodes++;
- if (pindex->pprev && pindex->nTx > 0) {
- // nChainTx should increase monotonically
- assert(pindex->pprev->nChainTx <= pindex->nChainTx);
- }
+ // Make sure nChainTx sum is correctly computed.
+ unsigned int prev_chain_tx = pindex->pprev ? pindex->pprev->nChainTx : 0;
+ assert((pindex->nChainTx == pindex->nTx + prev_chain_tx)
+ // For testing, allow transaction counts to be completely unset.
+ || (pindex->nChainTx == 0 && pindex->nTx == 0)
+ // For testing, allow this nChainTx to be unset if previous is also unset.
+ || (pindex->nChainTx == 0 && prev_chain_tx == 0 && pindex->pprev));
+
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)) {