@@ -47,7 +47,7 @@ use stacks::chainstate::stacks::address::{PoxAddress, StacksAddressExtensions};
47
47
use stacks:: chainstate:: stacks:: boot:: {
48
48
MINERS_NAME , SIGNERS_VOTING_FUNCTION_NAME , SIGNERS_VOTING_NAME ,
49
49
} ;
50
- use stacks:: chainstate:: stacks:: db:: StacksChainState ;
50
+ use stacks:: chainstate:: stacks:: db:: { StacksChainState , StacksHeaderInfo } ;
51
51
use stacks:: chainstate:: stacks:: miner:: {
52
52
BlockBuilder , BlockLimitFunction , TransactionEvent , TransactionResult , TransactionSuccessEvent ,
53
53
} ;
@@ -301,6 +301,30 @@ pub fn get_stackerdb_slot_version(
301
301
} )
302
302
}
303
303
304
+ pub fn get_last_block_in_current_tenure (
305
+ sortdb : & SortitionDB ,
306
+ chainstate : & StacksChainState ,
307
+ ) -> Option < StacksHeaderInfo > {
308
+ let ch = SortitionDB :: get_canonical_burn_chain_tip ( sortdb. conn ( ) )
309
+ . unwrap ( )
310
+ . consensus_hash ;
311
+ let mut tenure_blocks = test_observer:: get_blocks ( ) ;
312
+ tenure_blocks. retain ( |block| {
313
+ let consensus_hash = block. get ( "consensus_hash" ) . unwrap ( ) . as_str ( ) . unwrap ( ) ;
314
+ consensus_hash == format ! ( "0x{ch}" )
315
+ } ) ;
316
+ let last_block = tenure_blocks. last ( ) ?. clone ( ) ;
317
+ let last_block_id = StacksBlockId :: from_hex (
318
+ & last_block
319
+ . get ( "index_block_hash" )
320
+ . unwrap ( )
321
+ . as_str ( )
322
+ . unwrap ( ) [ 2 ..] ,
323
+ )
324
+ . unwrap ( ) ;
325
+ NakamotoChainState :: get_block_header ( chainstate. db ( ) , & last_block_id) . unwrap ( )
326
+ }
327
+
304
328
pub fn add_initial_balances (
305
329
conf : & mut Config ,
306
330
accounts : usize ,
@@ -5079,7 +5103,7 @@ fn forked_tenure_is_ignored() {
5079
5103
thread:: sleep ( Duration :: from_secs ( 1 ) ) ;
5080
5104
}
5081
5105
5082
- info ! ( "Tenure B broadcasted but did not process a block. Issue the next bitcon block and unstall block commits." ) ;
5106
+ info ! ( "Tenure B broadcasted but did not process a block. Issue the next bitcoin block and unstall block commits." ) ;
5083
5107
5084
5108
// the block will be stored, not processed, so load it out of staging
5085
5109
let tip_sn = SortitionDB :: get_canonical_burn_chain_tip ( sortdb. conn ( ) )
@@ -5126,27 +5150,17 @@ fn forked_tenure_is_ignored() {
5126
5150
. lock ( )
5127
5151
. expect ( "Mutex poisoned" )
5128
5152
. get_stacks_blocks_processed ( ) ;
5153
+ let block_in_tenure = get_last_block_in_current_tenure ( & sortdb, & chainstate) . is_some ( ) ;
5129
5154
Ok ( commits_count > commits_before
5130
5155
&& blocks_count > blocks_before
5131
- && blocks_processed > blocks_processed_before)
5156
+ && blocks_processed > blocks_processed_before
5157
+ && block_in_tenure)
5132
5158
} )
5133
5159
. unwrap ( ) ;
5134
5160
5135
5161
info ! ( "Tenure C produced a block!" ) ;
5136
- wait_for ( 30 , || {
5137
- let block_tenure_c =
5138
- NakamotoChainState :: get_canonical_block_header ( chainstate. db ( ) , & sortdb)
5139
- . unwrap ( )
5140
- . unwrap ( ) ;
5141
- let blocks = test_observer:: get_mined_nakamoto_blocks ( ) ;
5142
- let block_c = blocks. last ( ) . unwrap ( ) ;
5143
- Ok ( block_tenure_c. index_block_hash ( ) . to_string ( ) == block_c. block_id )
5144
- } )
5145
- . expect ( "Failed to wait for block processing" ) ;
5146
5162
5147
- let block_tenure_c = NakamotoChainState :: get_canonical_block_header ( chainstate. db ( ) , & sortdb)
5148
- . unwrap ( )
5149
- . unwrap ( ) ;
5163
+ let block_tenure_c = get_last_block_in_current_tenure ( & sortdb, & chainstate) . unwrap ( ) ;
5150
5164
let blocks = test_observer:: get_mined_nakamoto_blocks ( ) ;
5151
5165
let block_c = blocks. last ( ) . unwrap ( ) ;
5152
5166
info ! ( "Tenure C tip block: {}" , & block_tenure_c. index_block_hash( ) ) ;
@@ -5199,9 +5213,7 @@ fn forked_tenure_is_ignored() {
5199
5213
5200
5214
info ! ( "Tenure C produced a second block!" ) ;
5201
5215
5202
- let block_2_tenure_c = NakamotoChainState :: get_canonical_block_header ( chainstate. db ( ) , & sortdb)
5203
- . unwrap ( )
5204
- . unwrap ( ) ;
5216
+ let block_2_tenure_c = get_last_block_in_current_tenure ( & sortdb, & chainstate) . unwrap ( ) ;
5205
5217
let blocks = test_observer:: get_mined_nakamoto_blocks ( ) ;
5206
5218
let block_2_c = blocks. last ( ) . unwrap ( ) ;
5207
5219
@@ -5232,9 +5244,7 @@ fn forked_tenure_is_ignored() {
5232
5244
} )
5233
5245
. unwrap ( ) ;
5234
5246
5235
- let block_tenure_d = NakamotoChainState :: get_canonical_block_header ( chainstate. db ( ) , & sortdb)
5236
- . unwrap ( )
5237
- . unwrap ( ) ;
5247
+ let block_tenure_d = get_last_block_in_current_tenure ( & sortdb, & chainstate) . unwrap ( ) ;
5238
5248
let blocks = test_observer:: get_mined_nakamoto_blocks ( ) ;
5239
5249
let block_d = blocks. last ( ) . unwrap ( ) ;
5240
5250
0 commit comments