@@ -70,6 +70,7 @@ use super::nakamoto_integrations::{
70
70
use super :: neon_integrations:: {
71
71
copy_dir_all, get_account, get_sortition_info_ch, submit_tx_fallible, Account ,
72
72
} ;
73
+ use crate :: nakamoto_node:: miner:: TEST_MINE_SKIP ;
73
74
use crate :: neon:: Counters ;
74
75
use crate :: run_loop:: boot_nakamoto;
75
76
use crate :: tests:: bitcoin_regtest:: BitcoinCoreController ;
@@ -80,6 +81,7 @@ use crate::tests::neon_integrations::{
80
81
get_chain_info, next_block_and_wait, run_until_burnchain_height, test_observer,
81
82
wait_for_runloop,
82
83
} ;
84
+ use crate :: tests:: signer:: v0:: wait_for_state_machine_update_by_miner_tenure_id;
83
85
use crate :: tests:: to_addr;
84
86
use crate :: BitcoinRegtestController ;
85
87
@@ -1101,23 +1103,44 @@ impl<Z: SpawnedSignerTrait> SignerTest<Z> {
1101
1103
/// Mine a BTC block and wait for a new Stacks block to be mined
1102
1104
/// Note: do not use nakamoto blocks mined heuristic if running a test with multiple miners
1103
1105
fn mine_nakamoto_block ( & self , timeout : Duration , use_nakamoto_blocks_mined : bool ) {
1104
- let mined_block_time = Instant :: now ( ) ;
1105
1106
let mined_before = self . running_nodes . counters . naka_mined_blocks . get ( ) ;
1106
- let info_before = self . get_peer_info ( ) ;
1107
-
1107
+ let info_before = get_chain_info ( & self . running_nodes . conf ) ;
1108
+ let mined_btc_block_time = Instant :: now ( ) ;
1109
+ info ! ( "Pausing stacks block mining" ) ;
1110
+ TEST_MINE_SKIP . set ( true ) ;
1108
1111
next_block_and (
1109
1112
& self . running_nodes . btc_regtest_controller ,
1110
1113
timeout. as_secs ( ) ,
1111
- || {
1112
- let info_after = self . get_peer_info ( ) ;
1113
- let blocks_mined = self . running_nodes . counters . naka_mined_blocks . get ( ) ;
1114
- Ok ( info_after. stacks_tip_height > info_before. stacks_tip_height
1115
- && ( !use_nakamoto_blocks_mined || blocks_mined > mined_before) )
1116
- } ,
1114
+ || Ok ( self . get_peer_info ( ) . burn_block_height > info_before. burn_block_height ) ,
1117
1115
)
1118
1116
. unwrap ( ) ;
1119
- let mined_block_elapsed_time = mined_block_time. elapsed ( ) ;
1120
- info ! ( "Nakamoto block mine time elapsed: {mined_block_elapsed_time:?}" ) ;
1117
+ info ! (
1118
+ "Bitcoin block mine time elapsed: {:?}" ,
1119
+ mined_btc_block_time. elapsed( )
1120
+ ) ;
1121
+ wait_for_state_machine_update_by_miner_tenure_id (
1122
+ timeout. as_secs ( ) ,
1123
+ & get_chain_info ( & self . running_nodes . conf ) . pox_consensus ,
1124
+ & self . signer_addresses_versions ( ) ,
1125
+ )
1126
+ . expect ( "Failed to update signer state machine" ) ;
1127
+
1128
+ info ! ( "Unpausing stacks block mining" ) ;
1129
+ let mined_block_time = Instant :: now ( ) ;
1130
+ TEST_MINE_SKIP . set ( false ) ;
1131
+ wait_for ( timeout. as_secs ( ) , || {
1132
+ let info_after = get_chain_info ( & self . running_nodes . conf ) ;
1133
+ let blocks_mined = self . running_nodes . counters . naka_mined_blocks . get ( ) ;
1134
+ // println!("HERE BEFORE {}, AFTER {}", info_before.stacks_tip_height, info_after.stacks_tip_height);
1135
+ // println!("HERE BEFORE {mined_before}, AFTER {blocks_mined}");
1136
+ Ok ( info_after. stacks_tip_height > info_before. stacks_tip_height
1137
+ && ( !use_nakamoto_blocks_mined || blocks_mined > mined_before) )
1138
+ } )
1139
+ . expect ( "Failed to mine Tenure Change block" ) ;
1140
+ info ! (
1141
+ "Nakamoto block mine time elapsed: {:?}" ,
1142
+ mined_block_time. elapsed( )
1143
+ ) ;
1121
1144
}
1122
1145
1123
1146
fn mine_block_wait_on_processing (
0 commit comments