From 9bc298556cb02cfa1382bbaa9e5638006b403576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Sun, 7 Sep 2025 23:37:10 -0700 Subject: [PATCH] validation: log initial script verification state Replaced `atomic` with `std::optional` (logged once on first observation). Safe because `ConnectBlock` holds `cs_main`.\ After this change, the state is logged before the very first `UpdateTip` line. Co-authored-by: Eunovo Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com> Co-authored-by: w0xlt --- src/validation.h | 2 +- test/functional/feature_assumevalid.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/validation.h b/src/validation.h index 644d4f7310d..fea11c55157 100644 --- a/src/validation.h +++ b/src/validation.h @@ -560,7 +560,7 @@ protected: //! Cached result of LookupBlockIndex(*m_from_snapshot_blockhash) mutable const CBlockIndex* m_cached_snapshot_base GUARDED_BY(::cs_main){nullptr}; - std::atomic_bool m_prev_script_checks_logged{true}; + std::optional m_prev_script_checks_logged GUARDED_BY(::cs_main){}; public: //! Reference to a BlockManager instance which itself is shared across all diff --git a/test/functional/feature_assumevalid.py b/test/functional/feature_assumevalid.py index 54c62e87528..478955c2f42 100755 --- a/test/functional/feature_assumevalid.py +++ b/test/functional/feature_assumevalid.py @@ -141,6 +141,7 @@ class AssumeValidTest(BitcoinTestFramework): self.tip = block.hash_int self.block_time += 1 height += 1 + block_1_hash = self.blocks[0].hash_hex self.start_node(1, extra_args=[f"-assumevalid={block102.hash_hex}"]) self.start_node(2, extra_args=[f"-assumevalid={block102.hash_hex}"]) @@ -152,6 +153,7 @@ class AssumeValidTest(BitcoinTestFramework): # nodes[0] # Send blocks to node0. Block 102 will be rejected. with self.nodes[0].assert_debug_log(expected_msgs=[ + f"Enabling script verification at block #1 ({block_1_hash})", "Block validation error: block-script-verify-flag-failed", ]): p2p0 = self.nodes[0].add_p2p_connection(BaseNode()) @@ -184,6 +186,7 @@ class AssumeValidTest(BitcoinTestFramework): # nodes[2] # Send blocks to node2. Block 102 will be rejected. with self.nodes[2].assert_debug_log(expected_msgs=[ + f"Enabling script verification at block #1 ({block_1_hash})", "Block validation error: block-script-verify-flag-failed", ]): p2p2 = self.nodes[2].add_p2p_connection(BaseNode()) @@ -197,6 +200,7 @@ class AssumeValidTest(BitcoinTestFramework): # nodes[3] with self.nodes[3].assert_debug_log(expected_msgs=[ + f"Enabling script verification at block #1 ({block_1_hash})", ]): best_hash = self.nodes[3].getbestblockhash() tip_block = self.nodes[3].getblock(best_hash) @@ -223,6 +227,7 @@ class AssumeValidTest(BitcoinTestFramework): alt1 = create_block(int(genesis_hash, 16), create_coinbase(1), genesis_time + 2) alt1.solve() with self.nodes[4].assert_debug_log(expected_msgs=[ + f"Enabling script verification at block #1 ({alt1.hash_hex})", ]): p2p4 = self.nodes[4].add_p2p_connection(BaseNode()) p2p4.send_header_for_blocks(self.blocks[0:103]) @@ -238,10 +243,12 @@ class AssumeValidTest(BitcoinTestFramework): p2p5.send_without_ping(msg_block(self.blocks[0])) self.wait_until(lambda: self.nodes[5].getblockcount() == 1) with self.nodes[5].assert_debug_log(expected_msgs=[ + f"Enabling script verification at block #1 ({block_1_hash})", ]): self.restart_node(5, extra_args=["-reindex-chainstate", "-assumevalid=1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"]) assert_equal(self.nodes[5].getblockcount(), 1) with self.nodes[5].assert_debug_log(expected_msgs=[ + f"Enabling script verification at block #1 ({block_1_hash})", ]): self.restart_node(5, extra_args=["-reindex-chainstate", f"-assumevalid={block102.hash_hex}", "-minimumchainwork=0xffff"]) assert_equal(self.nodes[5].getblockcount(), 1)