diff options
author | Fabian Jahr <fjahr@protonmail.com> | 2024-05-24 11:41:42 +0200 |
---|---|---|
committer | Fabian Jahr <fjahr@protonmail.com> | 2024-05-24 18:44:02 +0200 |
commit | 6b6084850b8c2ebcdbeecdb406e8732adaa6d23c (patch) | |
tree | 022358038c15bdce9b18fc77dfda2b92861af34f /src/node/utxo_snapshot.h | |
parent | 1f1f9984555d49f07ae20cb3a8153a177c546beb (diff) | |
download | bitcoin-6b6084850b8c2ebcdbeecdb406e8732adaa6d23c.tar.xz |
assumeutxo: Add network magic ctor param to SnapshotMetadata
This prevents SnapshotMetadata from using any globals implicitly.
Diffstat (limited to 'src/node/utxo_snapshot.h')
-rw-r--r-- | src/node/utxo_snapshot.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/node/utxo_snapshot.h b/src/node/utxo_snapshot.h index 256a4a601d..a7c4135787 100644 --- a/src/node/utxo_snapshot.h +++ b/src/node/utxo_snapshot.h @@ -13,6 +13,7 @@ #include <sync.h> #include <uint256.h> #include <util/chaintype.h> +#include <util/check.h> #include <util/fs.h> #include <cstdint> @@ -31,6 +32,7 @@ class SnapshotMetadata { const uint16_t m_version{1}; const std::set<uint16_t> m_supported_versions{1}; + const MessageStartChars m_network_magic; public: //! The hash of the block that reflects the tip of the chain for the //! UTXO set contained in this snapshot. @@ -42,11 +44,15 @@ public: //! during snapshot load to estimate progress of UTXO set reconstruction. uint64_t m_coins_count = 0; - SnapshotMetadata() { } SnapshotMetadata( + const MessageStartChars network_magic) : + m_network_magic(network_magic) { } + SnapshotMetadata( + const MessageStartChars network_magic, const uint256& base_blockhash, const int base_blockheight, uint64_t coins_count) : + m_network_magic(network_magic), m_base_blockhash(base_blockhash), m_base_blockheight(base_blockheight), m_coins_count(coins_count) { } @@ -55,7 +61,7 @@ public: inline void Serialize(Stream& s) const { s << SNAPSHOT_MAGIC_BYTES; s << m_version; - s << Params().MessageStart(); + s << m_network_magic; s << m_base_blockheight; s << m_base_blockhash; s << m_coins_count; @@ -80,11 +86,13 @@ public: // Read the network magic (pchMessageStart) MessageStartChars message; s >> message; - if (!std::equal(message.begin(), message.end(), Params().MessageStart().data())) { - auto metadata_network = GetNetworkForMagic(message); + if (!std::equal(message.begin(), message.end(), m_network_magic.data())) { + auto metadata_network{GetNetworkForMagic(message)}; if (metadata_network) { std::string network_string{ChainTypeToString(metadata_network.value())}; - throw std::ios_base::failure(strprintf("The network of the snapshot (%s) does not match the network of this node (%s).", network_string, Params().GetChainTypeString())); + auto node_network{GetNetworkForMagic(m_network_magic)}; + std::string node_network_string{ChainTypeToString(node_network.value())}; + throw std::ios_base::failure(strprintf("The network of the snapshot (%s) does not match the network of this node (%s).", network_string, node_network_string)); } else { throw std::ios_base::failure("This snapshot has been created for an unrecognized network. This could be a custom signet, a new testnet or possibly caused by data corruption."); } |