mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-29 02:11:24 +02:00
assumeutxo: Drop block height from metadata
The Snapshot format version is updated to 2 to indicate this change. Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
This commit is contained in:
@ -71,7 +71,7 @@ class AssumeutxoTest(BitcoinTestFramework):
|
||||
assert_raises_rpc_error(parsing_error_code, "Unable to parse metadata: Invalid UTXO set snapshot magic bytes. Please check if this is indeed a snapshot file or if you are using an outdated snapshot format.", node.loadtxoutset, bad_snapshot_path)
|
||||
|
||||
self.log.info(" - snapshot file with unsupported version")
|
||||
for version in [0, 2]:
|
||||
for version in [0, 1, 3]:
|
||||
with open(bad_snapshot_path, 'wb') as f:
|
||||
f.write(valid_snapshot_contents[:5] + version.to_bytes(2, "little") + valid_snapshot_contents[7:])
|
||||
assert_raises_rpc_error(parsing_error_code, f"Unable to parse metadata: Version of snapshot {version} does not match any of the supported versions.", node.loadtxoutset, bad_snapshot_path)
|
||||
@ -98,21 +98,20 @@ class AssumeutxoTest(BitcoinTestFramework):
|
||||
bogus_block_hash = "0" * 64 # Represents any unknown block hash
|
||||
# The height is not used for anything critical currently, so we just
|
||||
# confirm the manipulation in the error message
|
||||
bogus_height = 1337
|
||||
for bad_block_hash in [bogus_block_hash, prev_block_hash]:
|
||||
with open(bad_snapshot_path, 'wb') as f:
|
||||
f.write(valid_snapshot_contents[:11] + bogus_height.to_bytes(4, "little") + bytes.fromhex(bad_block_hash)[::-1] + valid_snapshot_contents[47:])
|
||||
f.write(valid_snapshot_contents[:11] + bytes.fromhex(bad_block_hash)[::-1] + valid_snapshot_contents[43:])
|
||||
|
||||
msg = f"Unable to load UTXO snapshot: assumeutxo block hash in snapshot metadata not recognized (hash: {bad_block_hash}, height: {bogus_height}). The following snapshot heights are available: 110, 200, 299."
|
||||
msg = f"Unable to load UTXO snapshot: assumeutxo block hash in snapshot metadata not recognized (hash: {bad_block_hash}). The following snapshot heights are available: 110, 200, 299."
|
||||
assert_raises_rpc_error(-32603, msg, node.loadtxoutset, bad_snapshot_path)
|
||||
|
||||
self.log.info(" - snapshot file with wrong number of coins")
|
||||
valid_num_coins = int.from_bytes(valid_snapshot_contents[47:47 + 8], "little")
|
||||
valid_num_coins = int.from_bytes(valid_snapshot_contents[43:43 + 8], "little")
|
||||
for off in [-1, +1]:
|
||||
with open(bad_snapshot_path, 'wb') as f:
|
||||
f.write(valid_snapshot_contents[:47])
|
||||
f.write(valid_snapshot_contents[:43])
|
||||
f.write((valid_num_coins + off).to_bytes(8, "little"))
|
||||
f.write(valid_snapshot_contents[47 + 8:])
|
||||
f.write(valid_snapshot_contents[43 + 8:])
|
||||
expected_error(msg="Bad snapshot - coins left over after deserializing 298 coins." if off == -1 else "Bad snapshot format or truncated snapshot after deserializing 299 coins.")
|
||||
|
||||
self.log.info(" - snapshot file with alternated but parsable UTXO data results in different hash")
|
||||
@ -130,10 +129,10 @@ class AssumeutxoTest(BitcoinTestFramework):
|
||||
|
||||
for content, offset, wrong_hash, custom_message in cases:
|
||||
with open(bad_snapshot_path, "wb") as f:
|
||||
# Prior to offset: Snapshot magic, snapshot version, network magic, height, hash, coins count
|
||||
f.write(valid_snapshot_contents[:(5 + 2 + 4 + 4 + 32 + 8 + offset)])
|
||||
# Prior to offset: Snapshot magic, snapshot version, network magic, hash, coins count
|
||||
f.write(valid_snapshot_contents[:(5 + 2 + 4 + 32 + 8 + offset)])
|
||||
f.write(content)
|
||||
f.write(valid_snapshot_contents[(5 + 2 + 4 + 4 + 32 + 8 + offset + len(content)):])
|
||||
f.write(valid_snapshot_contents[(5 + 2 + 4 + 32 + 8 + offset + len(content)):])
|
||||
|
||||
msg = custom_message if custom_message is not None else f"Bad snapshot content hash: expected a4bf3407ccb2cc0145c49ebba8fa91199f8a3903daf0883875941497d2493c27, got {wrong_hash}."
|
||||
expected_error(msg)
|
||||
|
Reference in New Issue
Block a user