From 931684b24a89aba884cb18c13fa67ccca339ee8c Mon Sep 17 00:00:00 2001 From: James O'Beirne Date: Wed, 14 Apr 2021 13:29:27 -0400 Subject: validation: fix ActivateSnapshot to use hardcoded nChainTx This fixes an oversight from the move of nChainTx from the user-supplied snapshot metadata into the hardcoded assumeutxo chainparams. Since the nChainTx is now unused in the metadata, it should be removed in a future commit. --- src/test/validation_chainstatemanager_tests.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/test') diff --git a/src/test/validation_chainstatemanager_tests.cpp b/src/test/validation_chainstatemanager_tests.cpp index ab31662f97..15fc9b7cbd 100644 --- a/src/test/validation_chainstatemanager_tests.cpp +++ b/src/test/validation_chainstatemanager_tests.cpp @@ -233,6 +233,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) // Mine 10 more blocks, putting at us height 110 where a valid assumeutxo value can // be found. + constexpr int snapshot_height = 110; mineBlocks(10); initial_size += 10; initial_total_coins += 10; @@ -265,7 +266,16 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) metadata.m_base_blockhash = uint256::ONE; })); - BOOST_REQUIRE(CreateAndActivateUTXOSnapshot(m_node, m_path_root)); + constexpr int bad_nchaintx = 9999; + + BOOST_REQUIRE(CreateAndActivateUTXOSnapshot( + m_node, m_path_root, [](CAutoFile& auto_infile, SnapshotMetadata& metadata) { + // Provide an nChainTx that differs from the hardcoded one. + // + // Ultimately this malleation check should be removed when we remove + // the now-unnecessary nChainTx from the user-specified snapshot metadata. + metadata.m_nchaintx = bad_nchaintx; + })); // Ensure our active chain is the snapshot chainstate. BOOST_CHECK(!chainman.ActiveChainstate().m_from_snapshot_blockhash.IsNull()); @@ -273,6 +283,14 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) chainman.ActiveChainstate().m_from_snapshot_blockhash, *chainman.SnapshotBlockhash()); + const AssumeutxoData& au_data = *ExpectedAssumeutxo(snapshot_height, ::Params()); + const CBlockIndex* tip = chainman.ActiveTip(); + + // Ensure that, despite a bad nChainTx value being in the snapshot, activation + // uses the hardcoded value from chainparams. + BOOST_CHECK_EQUAL(tip->nChainTx, au_data.nChainTx); + BOOST_CHECK(tip->nChainTx != bad_nchaintx); + // To be checked against later when we try loading a subsequent snapshot. uint256 loaded_snapshot_blockhash{*chainman.SnapshotBlockhash()}; -- cgit v1.2.3 From 91d93aac4e3fe6fff5ef492ed152c4d8fa6f2672 Mon Sep 17 00:00:00 2001 From: James O'Beirne Date: Fri, 23 Apr 2021 13:29:53 -0400 Subject: validation: remove nchaintx from assumeutxo metadata This value is no longer used and is instead specified statically in chainparams. This change means that previously generated snapshots will no longer be usable. --- src/test/validation_chainstatemanager_tests.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) (limited to 'src/test') diff --git a/src/test/validation_chainstatemanager_tests.cpp b/src/test/validation_chainstatemanager_tests.cpp index 15fc9b7cbd..82e70b5cdc 100644 --- a/src/test/validation_chainstatemanager_tests.cpp +++ b/src/test/validation_chainstatemanager_tests.cpp @@ -266,16 +266,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) metadata.m_base_blockhash = uint256::ONE; })); - constexpr int bad_nchaintx = 9999; - - BOOST_REQUIRE(CreateAndActivateUTXOSnapshot( - m_node, m_path_root, [](CAutoFile& auto_infile, SnapshotMetadata& metadata) { - // Provide an nChainTx that differs from the hardcoded one. - // - // Ultimately this malleation check should be removed when we remove - // the now-unnecessary nChainTx from the user-specified snapshot metadata. - metadata.m_nchaintx = bad_nchaintx; - })); + BOOST_REQUIRE(CreateAndActivateUTXOSnapshot(m_node, m_path_root)); // Ensure our active chain is the snapshot chainstate. BOOST_CHECK(!chainman.ActiveChainstate().m_from_snapshot_blockhash.IsNull()); @@ -286,10 +277,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup) const AssumeutxoData& au_data = *ExpectedAssumeutxo(snapshot_height, ::Params()); const CBlockIndex* tip = chainman.ActiveTip(); - // Ensure that, despite a bad nChainTx value being in the snapshot, activation - // uses the hardcoded value from chainparams. BOOST_CHECK_EQUAL(tip->nChainTx, au_data.nChainTx); - BOOST_CHECK(tip->nChainTx != bad_nchaintx); // To be checked against later when we try loading a subsequent snapshot. uint256 loaded_snapshot_blockhash{*chainman.SnapshotBlockhash()}; -- cgit v1.2.3