aboutsummaryrefslogtreecommitdiff
path: root/src/node/utxo_snapshot.h
diff options
context:
space:
mode:
authorFabian Jahr <fjahr@protonmail.com>2024-05-24 11:41:42 +0200
committerFabian Jahr <fjahr@protonmail.com>2024-05-24 18:44:02 +0200
commit6b6084850b8c2ebcdbeecdb406e8732adaa6d23c (patch)
tree022358038c15bdce9b18fc77dfda2b92861af34f /src/node/utxo_snapshot.h
parent1f1f9984555d49f07ae20cb3a8153a177c546beb (diff)
downloadbitcoin-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.h18
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.");
}