@@ -91,7 +91,7 @@ use stacks_signer::chainstate::{ProposalEvalConfig, SortitionsView};
91
91
use stacks_signer:: signerdb:: { BlockInfo , BlockState , ExtraBlockInfo , SignerDb } ;
92
92
93
93
use super :: bitcoin_regtest:: BitcoinCoreController ;
94
- use crate :: config:: { EventKeyType , EventObserverConfig , InitialBalance } ;
94
+ use crate :: config:: { EventKeyType , InitialBalance } ;
95
95
use crate :: nakamoto_node:: miner:: {
96
96
TEST_BLOCK_ANNOUNCE_STALL , TEST_BROADCAST_STALL , TEST_MINE_STALL , TEST_SKIP_P2P_BROADCAST ,
97
97
} ;
@@ -6506,10 +6506,10 @@ fn continue_tenure_extend() {
6506
6506
// setup sender + recipient for a test stx transfer
6507
6507
let sender_addr = tests:: to_addr ( & sender_sk) ;
6508
6508
let send_amt = 1000 ;
6509
- let send_fee = 100 ;
6509
+ let send_fee = 200 ;
6510
6510
naka_conf. add_initial_balance (
6511
6511
PrincipalData :: from ( sender_addr. clone ( ) ) . to_string ( ) ,
6512
- send_amt * 2 + send_fee,
6512
+ ( send_amt + send_fee) * 20 ,
6513
6513
) ;
6514
6514
let sender_signer_sk = Secp256k1PrivateKey :: new ( ) ;
6515
6515
let sender_signer_addr = tests:: to_addr ( & sender_signer_sk) ;
@@ -6519,6 +6519,7 @@ fn continue_tenure_extend() {
6519
6519
) ;
6520
6520
let recipient = PrincipalData :: from ( StacksAddress :: burn_address ( false ) ) ;
6521
6521
let stacker_sk = setup_stacker ( & mut naka_conf) ;
6522
+ let mut transfer_nonce = 0 ;
6522
6523
6523
6524
test_observer:: spawn ( ) ;
6524
6525
test_observer:: register_any ( & mut naka_conf) ;
@@ -6637,7 +6638,8 @@ fn continue_tenure_extend() {
6637
6638
. unwrap ( ) ;
6638
6639
6639
6640
// Submit a TX
6640
- let transfer_tx = make_stacks_transfer ( & sender_sk, 0 , send_fee, & recipient, send_amt) ;
6641
+ let transfer_tx =
6642
+ make_stacks_transfer ( & sender_sk, transfer_nonce, send_fee, & recipient, send_amt) ;
6641
6643
let transfer_tx_hex = format ! ( "0x{}" , to_hex( & transfer_tx) ) ;
6642
6644
6643
6645
let tip = NakamotoChainState :: get_canonical_block_header ( chainstate. db ( ) , & sortdb)
@@ -6694,6 +6696,20 @@ fn continue_tenure_extend() {
6694
6696
} )
6695
6697
. unwrap ( ) ;
6696
6698
6699
+ // Mine 3 nakamoto tenures
6700
+ for i in 0 ..3 {
6701
+ info ! ( "Triggering Nakamoto blocks after extend ({})" , i + 1 ) ;
6702
+ transfer_nonce += 1 ;
6703
+ let transfer_tx =
6704
+ make_stacks_transfer ( & sender_sk, transfer_nonce, send_fee, & recipient, send_amt) ;
6705
+ submit_tx ( & http_origin, & transfer_tx) ;
6706
+ wait_for ( 10 , || {
6707
+ let sender_nonce = get_account ( & http_origin, & to_addr ( & sender_sk) ) . nonce ;
6708
+ Ok ( sender_nonce >= transfer_nonce)
6709
+ } )
6710
+ . expect ( "Timed out waiting for transfer TX to confirm" ) ;
6711
+ }
6712
+
6697
6713
info ! ( "Resuming commit ops to mine regular tenures." ) ;
6698
6714
test_skip_commit_op. 0 . lock ( ) . unwrap ( ) . replace ( false ) ;
6699
6715
@@ -6731,7 +6747,9 @@ fn continue_tenure_extend() {
6731
6747
let mut tenure_extends = vec ! [ ] ;
6732
6748
let mut tenure_block_founds = vec ! [ ] ;
6733
6749
let mut transfer_tx_included = false ;
6750
+ let mut last_block_had_extend = false ;
6734
6751
for block in test_observer:: get_blocks ( ) {
6752
+ let mut has_extend = false ;
6735
6753
for tx in block[ "transactions" ] . as_array ( ) . unwrap ( ) {
6736
6754
let raw_tx = tx[ "raw_tx" ] . as_str ( ) . unwrap ( ) ;
6737
6755
if raw_tx == & transfer_tx_hex {
@@ -6745,12 +6763,21 @@ fn continue_tenure_extend() {
6745
6763
let parsed = StacksTransaction :: consensus_deserialize ( & mut & tx_bytes[ ..] ) . unwrap ( ) ;
6746
6764
match & parsed. payload {
6747
6765
TransactionPayload :: TenureChange ( payload) => match payload. cause {
6748
- TenureChangeCause :: Extended => tenure_extends. push ( parsed) ,
6749
- TenureChangeCause :: BlockFound => tenure_block_founds. push ( parsed) ,
6766
+ TenureChangeCause :: Extended => {
6767
+ has_extend = true ;
6768
+ tenure_extends. push ( parsed) ;
6769
+ }
6770
+ TenureChangeCause :: BlockFound => {
6771
+ if last_block_had_extend {
6772
+ panic ! ( "Expected a Nakamoto block to happen after tenure extend block" ) ;
6773
+ }
6774
+ tenure_block_founds. push ( parsed) ;
6775
+ }
6750
6776
} ,
6751
6777
_ => { }
6752
6778
} ;
6753
6779
}
6780
+ last_block_had_extend = has_extend;
6754
6781
}
6755
6782
assert ! (
6756
6783
!tenure_extends. is_empty( ) ,
0 commit comments