Skip to content

Commit bc87ad9

Browse files
committed
Merge bitcoin/bitcoin#30636: test: assumeutxo: check that UTXO-querying RPCs operate on snapshot chainstate
917e70a test: assumeutxo: check that UTXO-querying RPCs operate on snapshot chainstate (Sebastian Falbesoner) Pull request description: Inspired by some manual testing I did for #28553, this PR checks that RPCs which explicitly query the UTXO set database (i.e. `gettxoutsetinfo`, `scantxoutset` and `gettxout`) operate on the snapshot chainstate as expected. ACKs for top commit: fjahr: utACK 917e70a achow101: ACK 917e70a tdb3: ACK 917e70a Tree-SHA512: 40ecd1c5dd879234df1667fa5444a1fbbee9b7c456f597dc982d1a2bce46fe9107711b005ab829e570ef919a4914792f72f342d71d92bad2ae9434b5e68d5bd3
2 parents 60b8164 + 917e70a commit bc87ad9

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

test/functional/feature_assumeutxo.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,31 @@ def run_test(self):
350350
assert_equal(loaded['coins_loaded'], SNAPSHOT_BASE_HEIGHT)
351351
assert_equal(loaded['base_height'], SNAPSHOT_BASE_HEIGHT)
352352

353+
self.log.info("Check that UTXO-querying RPCs operate on snapshot chainstate")
354+
snapshot_hash = loaded['tip_hash']
355+
snapshot_num_coins = loaded['coins_loaded']
356+
# coinstatsindex might be not caught up yet and is not relevant for this test, so don't use it
357+
utxo_info = n1.gettxoutsetinfo(use_index=False)
358+
assert_equal(utxo_info['txouts'], snapshot_num_coins)
359+
assert_equal(utxo_info['height'], SNAPSHOT_BASE_HEIGHT)
360+
assert_equal(utxo_info['bestblock'], snapshot_hash)
361+
362+
# find coinbase output at snapshot height on node0 and scan for it on node1,
363+
# where the block is not available, but the snapshot was loaded successfully
364+
coinbase_tx = n0.getblock(snapshot_hash, verbosity=2)['tx'][0]
365+
assert_raises_rpc_error(-1, "Block not found on disk", n1.getblock, snapshot_hash)
366+
coinbase_output_descriptor = coinbase_tx['vout'][0]['scriptPubKey']['desc']
367+
scan_result = n1.scantxoutset('start', [coinbase_output_descriptor])
368+
assert_equal(scan_result['success'], True)
369+
assert_equal(scan_result['txouts'], snapshot_num_coins)
370+
assert_equal(scan_result['height'], SNAPSHOT_BASE_HEIGHT)
371+
assert_equal(scan_result['bestblock'], snapshot_hash)
372+
scan_utxos = [(coin['txid'], coin['vout']) for coin in scan_result['unspents']]
373+
assert (coinbase_tx['txid'], 0) in scan_utxos
374+
375+
txout_result = n1.gettxout(coinbase_tx['txid'], 0)
376+
assert_equal(txout_result['scriptPubKey']['desc'], coinbase_output_descriptor)
377+
353378
def check_tx_counts(final: bool) -> None:
354379
"""Check nTx and nChainTx intermediate values right after loading
355380
the snapshot, and final values after the snapshot is validated."""

0 commit comments

Comments
 (0)