0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-02 09:46:52 -05:00

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.
This commit is contained in:
James O'Beirne 2021-04-23 13:29:53 -04:00
parent 931684b24a
commit 91d93aac4e
No known key found for this signature in database
GPG key ID: 7A935DADB2C44F05
3 changed files with 4 additions and 23 deletions

View file

@ -22,22 +22,15 @@ public:
//! during snapshot load to estimate progress of UTXO set reconstruction. //! during snapshot load to estimate progress of UTXO set reconstruction.
uint64_t m_coins_count = 0; uint64_t m_coins_count = 0;
//! Necessary to "fake" the base nChainTx so that we can estimate progress during
//! initial block download for the assumeutxo chainstate.
//!
//! TODO: this is unused and should be removed.
unsigned int m_nchaintx = 0;
SnapshotMetadata() { } SnapshotMetadata() { }
SnapshotMetadata( SnapshotMetadata(
const uint256& base_blockhash, const uint256& base_blockhash,
uint64_t coins_count, uint64_t coins_count,
unsigned int nchaintx) : unsigned int nchaintx) :
m_base_blockhash(base_blockhash), m_base_blockhash(base_blockhash),
m_coins_count(coins_count), m_coins_count(coins_count) { }
m_nchaintx(nchaintx) { }
SERIALIZE_METHODS(SnapshotMetadata, obj) { READWRITE(obj.m_base_blockhash, obj.m_coins_count, obj.m_nchaintx); } SERIALIZE_METHODS(SnapshotMetadata, obj) { READWRITE(obj.m_base_blockhash, obj.m_coins_count); }
}; };
#endif // BITCOIN_NODE_UTXO_SNAPSHOT_H #endif // BITCOIN_NODE_UTXO_SNAPSHOT_H

View file

@ -266,16 +266,7 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Setup)
metadata.m_base_blockhash = uint256::ONE; metadata.m_base_blockhash = uint256::ONE;
})); }));
constexpr int bad_nchaintx = 9999; BOOST_REQUIRE(CreateAndActivateUTXOSnapshot(m_node, m_path_root));
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. // Ensure our active chain is the snapshot chainstate.
BOOST_CHECK(!chainman.ActiveChainstate().m_from_snapshot_blockhash.IsNull()); 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 AssumeutxoData& au_data = *ExpectedAssumeutxo(snapshot_height, ::Params());
const CBlockIndex* tip = chainman.ActiveTip(); 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_EQUAL(tip->nChainTx, au_data.nChainTx);
BOOST_CHECK(tip->nChainTx != bad_nchaintx);
// To be checked against later when we try loading a subsequent snapshot. // To be checked against later when we try loading a subsequent snapshot.
uint256 loaded_snapshot_blockhash{*chainman.SnapshotBlockhash()}; uint256 loaded_snapshot_blockhash{*chainman.SnapshotBlockhash()};

View file

@ -41,7 +41,7 @@ class DumptxoutsetTest(BitcoinTestFramework):
digest = hashlib.sha256(f.read()).hexdigest() digest = hashlib.sha256(f.read()).hexdigest()
# UTXO snapshot hash should be deterministic based on mocked time. # UTXO snapshot hash should be deterministic based on mocked time.
assert_equal( assert_equal(
digest, 'be032e5f248264ba08e11099ac09dbd001f6f87ffc68bf0f87043d8146d50664') digest, '7ae82c986fa5445678d2a21453bb1c86d39e47af13da137640c2b1cf8093691c')
# Specifying a path to an existing file will fail. # Specifying a path to an existing file will fail.
assert_raises_rpc_error( assert_raises_rpc_error(