@@ -11652,193 +11652,67 @@ fn non_blocking_minority_configured_to_favour_incoming_miner() {
11652
11652
11653
11653
info ! ( "------------------------- Verify that Miner 2's Block N+1' was Rejected ------------------------" ) ;
11654
11654
11655
- // Miner 1's proposed block should get rejected by the signers
11656
- let mut found_miner_1_rejections = HashSet :: new ( ) ;
11657
- wait_for ( 30 , || {
11658
- let chunks = test_observer:: get_stackerdb_chunks ( ) ;
11659
- for chunk in chunks. into_iter ( ) . flat_map ( |chunk| chunk. modified_slots ) {
11660
- let Ok ( message) = SignerMessage :: consensus_deserialize ( & mut chunk. data . as_slice ( ) )
11661
- else {
11662
- continue ;
11663
- } ;
11664
- if let SignerMessage :: BlockResponse ( BlockResponse :: Rejected ( BlockRejection {
11665
- signer_signature_hash,
11666
- signature,
11667
- ..
11668
- } ) ) = message
11669
- {
11670
- if signer_signature_hash == miner_2_block_n_1. header . signer_signature_hash ( ) {
11671
- found_miner_1_rejections. insert ( signature) ;
11672
- }
11673
- }
11674
- }
11675
- Ok ( found_miner_1_rejections. len ( ) >= num_signers * 3 / 10 )
11676
- } )
11677
- . expect ( "Timed out waiting for expected block responses" ) ;
11655
+ // Miner 2's proposed block should get rejected by the signers
11656
+ wait_for_block_global_rejection (
11657
+ 30 ,
11658
+ miner_2_block_n_1. header . signer_signature_hash ( ) ,
11659
+ num_signers,
11660
+ )
11661
+ . expect ( "Timed out waiting for Block N+1' to be globally rejected" ) ;
11678
11662
11679
11663
assert_eq ! ( miners. get_peer_stacks_tip_height( ) , stacks_height_before, ) ;
11680
11664
11681
- info ! ( "------------------------- Wait for Miner 1's Block N+1 Extended to be Proposed ------------------------" ;
11665
+ info ! ( "------------------------- Wait for Miner 1's Block N+1 Extended to be Mined ------------------------" ;
11682
11666
"stacks_height_before" => %stacks_height_before
11683
11667
) ;
11684
11668
11685
11669
TEST_BROADCAST_PROPOSAL_STALL . set ( vec ! [ ] ) ;
11686
11670
11687
11671
// Get miner 1's N+1 block proposal
11688
- let mut miner_1_block_n_1 = None ;
11689
- wait_for ( 30 , || {
11690
- let chunks = test_observer:: get_stackerdb_chunks ( ) ;
11691
- for chunk in chunks. into_iter ( ) . flat_map ( |chunk| chunk. modified_slots ) {
11692
- let Ok ( message) = SignerMessage :: consensus_deserialize ( & mut chunk. data . as_slice ( ) )
11693
- else {
11694
- continue ;
11695
- } ;
11696
- let SignerMessage :: BlockProposal ( proposal) = message else {
11697
- continue ;
11698
- } ;
11699
- let miner_pk = proposal. block . header . recover_miner_pk ( ) . unwrap ( ) ;
11700
- let block_stacks_height = proposal. block . header . chain_length ;
11701
- if block_stacks_height != stacks_height_before + 1 || miner_pk != miner_pk_1 {
11702
- continue ;
11703
- }
11704
- miner_1_block_n_1 = Some ( proposal. block ) ;
11705
- return Ok ( true ) ;
11706
- }
11707
- Ok ( false )
11708
- } )
11709
- . expect ( "Timed out waiting for N+1 block proposals from miner 1" ) ;
11710
-
11711
- let mut miner_1_block_n_1 = miner_1_block_n_1. expect ( "No block proposal from miner 1" ) ;
11712
-
11713
- info ! ( "------------------------- Wait for Miner 1's Block N+1 to be Approved ------------------------" ;
11714
- "stacks_height_before" => %stacks_height_before
11715
- ) ;
11716
-
11717
- // Miner 2's proposed block should get approved and pushed
11718
- wait_for ( 30 , || {
11719
- let chunks = test_observer:: get_stackerdb_chunks ( ) ;
11720
- for chunk in chunks. into_iter ( ) . flat_map ( |chunk| chunk. modified_slots ) {
11721
- let Ok ( message) = SignerMessage :: consensus_deserialize ( & mut chunk. data . as_slice ( ) )
11722
- else {
11723
- continue ;
11724
- } ;
11725
- if let SignerMessage :: BlockPushed ( pushed_block) = message {
11726
- if pushed_block. header . signer_signature_hash ( )
11727
- == miner_1_block_n_1. header . signer_signature_hash ( )
11728
- {
11729
- miner_1_block_n_1 = pushed_block;
11730
- return Ok ( true ) ;
11731
- }
11732
- }
11733
- }
11734
- Ok ( false )
11735
- } )
11736
- . expect ( "Timed out waiting for expeceted block responses" ) ;
11672
+ let miner_1_block_n_1 =
11673
+ wait_for_block_pushed_by_miner_key ( 30 , stacks_height_before + 1 , & miner_pk_1)
11674
+ . expect ( "Timed out waiting for Miner 1 to mine N+1" ) ;
11675
+ let peer_info = miners. get_peer_info ( ) ;
11737
11676
11738
- let tip_block_header_hash = miners
11739
- . signer_test
11740
- . stacks_client
11741
- . get_peer_info ( )
11742
- . expect ( "Failed to get peer info" )
11743
- . stacks_tip ;
11744
- assert_eq ! ( tip_block_header_hash, miner_1_block_n_1. header. block_hash( ) ) ;
11745
- assert_eq ! (
11746
- stacks_height_before + 1 ,
11747
- miners
11748
- . signer_test
11749
- . stacks_client
11750
- . get_peer_info( )
11751
- . expect( "Failed to get peer info" )
11752
- . stacks_tip_height
11753
- ) ;
11677
+ assert_eq ! ( peer_info. stacks_tip, miner_1_block_n_1. header. block_hash( ) ) ;
11678
+ assert_eq ! ( peer_info. stacks_tip_height, stacks_height_before + 1 ) ;
11754
11679
11755
11680
info ! (
11756
11681
"------------------------- Verify BlockFound in Miner 1's Block N+1 -------------------------"
11757
11682
) ;
11758
11683
verify_last_block_contains_tenure_change_tx ( TenureChangeCause :: Extended ) ;
11759
11684
11760
11685
info ! ( "------------------------- Miner 1 Mines Block N+2 with Transfer Tx -------------------------" ) ;
11761
- let stacks_height_before = miners
11762
- . signer_test
11763
- . stacks_client
11764
- . get_peer_info ( )
11765
- . expect ( "Failed to get peer info" )
11766
- . stacks_tip_height ;
11686
+ let stacks_height_before = peer_info. stacks_tip_height ;
11767
11687
// submit a tx so that the miner will mine an extra block
11768
- let txid = miners
11688
+ let _ = miners
11769
11689
. send_and_mine_transfer_tx ( 30 )
11770
11690
. expect ( "Failed to mine transfer tx" ) ;
11771
11691
11772
11692
// Get miner 1's N+2 block proposal
11773
- let mut miner_1_block_n_2 = None ;
11774
- wait_for ( 30 , || {
11775
- let chunks = test_observer:: get_stackerdb_chunks ( ) ;
11776
- for chunk in chunks. into_iter ( ) . flat_map ( |chunk| chunk. modified_slots ) {
11777
- let Ok ( message) = SignerMessage :: consensus_deserialize ( & mut chunk. data . as_slice ( ) )
11778
- else {
11779
- continue ;
11780
- } ;
11781
- let SignerMessage :: BlockProposal ( proposal) = message else {
11782
- continue ;
11783
- } ;
11784
- let miner_pk = proposal. block . header . recover_miner_pk ( ) . unwrap ( ) ;
11785
- let block_stacks_height = proposal. block . header . chain_length ;
11786
- if block_stacks_height != stacks_height_before + 1
11787
- || miner_pk != miner_pk_1
11788
- || !proposal
11789
- . block
11790
- . txs
11791
- . iter ( )
11792
- . any ( |tx| tx. txid ( ) . to_string ( ) == txid)
11793
- {
11794
- continue ;
11795
- }
11796
- miner_1_block_n_2 = Some ( proposal. block ) ;
11797
- return Ok ( true ) ;
11798
- }
11799
- Ok ( false )
11800
- } )
11801
- . expect ( "Timed out waiting for N+2 block proposals from miner 1" ) ;
11693
+ let miner_1_block_n_2 =
11694
+ wait_for_block_pushed_by_miner_key ( 30 , stacks_height_before + 1 , & miner_pk_1)
11695
+ . expect ( "Timed out waiting for miner 1 to mine N+2" ) ;
11802
11696
11803
- let miner_1_block_n_2 = miner_1_block_n_2. expect ( "No block proposal from miner 1" ) ;
11804
11697
let peer_info = miners. get_peer_info ( ) ;
11805
11698
assert_eq ! ( peer_info. stacks_tip, miner_1_block_n_2. header. block_hash( ) ) ;
11806
11699
assert_eq ! ( peer_info. stacks_tip_height, stacks_height_before + 1 ) ;
11807
11700
11808
11701
info ! ( "------------------------- Unpause Miner 2's Block Commits -------------------------" ) ;
11809
- let stacks_height_before = peer_info. stacks_tip_height ;
11810
11702
miners. submit_commit_miner_2 ( & sortdb) ;
11811
11703
11812
11704
let burn_height_before = get_burn_height ( ) ;
11813
- let block_before = SortitionDB :: get_canonical_burn_chain_tip ( sortdb. conn ( ) )
11814
- . unwrap ( )
11815
- . block_height ;
11816
11705
11817
11706
info ! ( "------------------------- Miner 2 Mines a Normal Tenure C -------------------------" ;
11818
11707
"burn_height_before" => burn_height_before) ;
11819
11708
11820
- next_block_and ( miners. btc_regtest_controller_mut ( ) , 60 , || {
11821
- Ok ( get_burn_height ( ) > burn_height_before
11822
- && SortitionDB :: get_canonical_burn_chain_tip ( sortdb. conn ( ) )
11823
- . unwrap ( )
11824
- . block_height
11825
- > block_before)
11826
- } )
11827
- . unwrap ( ) ;
11709
+ miners
11710
+ . mine_bitcoin_block_and_tenure_change_tx ( & sortdb, TenureChangeCause :: BlockFound , 30 )
11711
+ . expect ( "Failed to mine BTC block followed by a tenure change tx" ) ;
11828
11712
btc_blocks_mined += 1 ;
11829
11713
11830
11714
// assure we have a successful sortition that miner 2 won
11831
- let tip = SortitionDB :: get_canonical_burn_chain_tip ( sortdb. conn ( ) ) . unwrap ( ) ;
11832
- assert ! ( tip. sortition) ;
11833
- assert_eq ! ( tip. miner_pk_hash. unwrap( ) , miner_pkh_2) ;
11834
-
11835
- info ! ( "------------------------- Wait for Miner 2's Block N+3 -------------------------" ;
11836
- "stacks_height_before" => %stacks_height_before) ;
11837
-
11838
- wait_for ( 30 , || {
11839
- Ok ( miners. get_peer_stacks_tip_height ( ) > stacks_height_before)
11840
- } )
11841
- . expect ( "Timed out waiting for block N+3 to be mined and processed" ) ;
11715
+ verify_sortition_winner ( & sortdb, & miner_pkh_2) ;
11842
11716
11843
11717
info ! (
11844
11718
"------------------------- Verify Tenure Change Tx in Miner 2's Block N+3 -------------------------"
0 commit comments