aboutsummaryrefslogtreecommitdiff
path: root/src/rpc/blockchain.cpp
diff options
context:
space:
mode:
authorFabian Jahr <fjahr@protonmail.com>2024-04-22 14:52:40 +0200
committerFabian Jahr <fjahr@protonmail.com>2024-05-21 13:57:09 +0200
commit542e13b2937356810bda2c41be83c3b1675e2f2f (patch)
tree8dc54747b0b42c96b172429e1bbe5424aca047c5 /src/rpc/blockchain.cpp
parent4d8e5edbaa94805be41ae4c8aa2f4bf7aaa276fe (diff)
downloadbitcoin-542e13b2937356810bda2c41be83c3b1675e2f2f.tar.xz
rpc: Enhance metadata of the dumptxoutset output
The following data is added: - A newly introduced utxo set magic - A version number - The network magic - The block height
Diffstat (limited to 'src/rpc/blockchain.cpp')
-rw-r--r--src/rpc/blockchain.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
index cecad55aee..f429826fcb 100644
--- a/src/rpc/blockchain.cpp
+++ b/src/rpc/blockchain.cpp
@@ -2691,7 +2691,7 @@ UniValue CreateUTXOSnapshot(
tip->nHeight, tip->GetBlockHash().ToString(),
fs::PathToString(path), fs::PathToString(temppath)));
- SnapshotMetadata metadata{tip->GetBlockHash(), maybe_stats->coins_count};
+ SnapshotMetadata metadata{tip->GetBlockHash(), tip->nHeight, maybe_stats->coins_count};
afile << metadata;
@@ -2804,12 +2804,22 @@ static RPCHelpMan loadtxoutset()
}
SnapshotMetadata metadata;
- afile >> metadata;
+ try {
+ afile >> metadata;
+ } catch (const std::ios_base::failure& e) {
+ throw JSONRPCError(RPC_DESERIALIZATION_ERROR, strprintf("Unable to parse metadata: %s", e.what()));
+ }
uint256 base_blockhash = metadata.m_base_blockhash;
+ int base_blockheight = metadata.m_base_blockheight;
if (!chainman.GetParams().AssumeutxoForBlockhash(base_blockhash).has_value()) {
+ auto available_heights = chainman.GetParams().GetAvailableSnapshotHeights();
+ std::string heights_formatted = Join(available_heights, ", ", [&](const auto& i) { return ToString(i); });
throw JSONRPCError(RPC_INTERNAL_ERROR, strprintf("Unable to load UTXO snapshot, "
- "assumeutxo block hash in snapshot metadata not recognized (%s)", base_blockhash.ToString()));
+ "assumeutxo block hash in snapshot metadata not recognized (hash: %s, height: %s). The following snapshot heights are available: %s.",
+ base_blockhash.ToString(),
+ base_blockheight,
+ heights_formatted));
}
CBlockIndex* snapshot_start_block = WITH_LOCK(::cs_main,
return chainman.m_blockman.LookupBlockIndex(base_blockhash));