@@ -8025,11 +8025,23 @@ fn v3_signer_api_endpoint() {
8025
8025
let ( mut conf, _miner_account) = naka_neon_integration_conf ( None ) ;
8026
8026
let password = "12345" . to_string ( ) ;
8027
8027
conf. connection_options . auth_token = Some ( password. clone ( ) ) ;
8028
+ conf. miner . wait_on_interim_blocks = Duration :: from_secs ( 1 ) ;
8028
8029
let stacker_sk = setup_stacker ( & mut conf) ;
8029
8030
let signer_sk = Secp256k1PrivateKey :: new ( ) ;
8030
8031
let signer_addr = tests:: to_addr ( & signer_sk) ;
8031
8032
let signer_pubkey = Secp256k1PublicKey :: from_private ( & signer_sk) ;
8033
+ let sender_sk = Secp256k1PrivateKey :: new ( ) ;
8034
+ // setup sender + recipient for some test stx transfers
8035
+ // these are necessary for the interim blocks to get mined at all
8036
+ let sender_addr = tests:: to_addr ( & sender_sk) ;
8037
+ let send_amt = 100 ;
8038
+ let send_fee = 180 ;
8039
+ conf. add_initial_balance (
8040
+ PrincipalData :: from ( sender_addr. clone ( ) ) . to_string ( ) ,
8041
+ send_amt + send_fee,
8042
+ ) ;
8032
8043
conf. add_initial_balance ( PrincipalData :: from ( signer_addr. clone ( ) ) . to_string ( ) , 100000 ) ;
8044
+ let recipient = PrincipalData :: from ( StacksAddress :: burn_address ( false ) ) ;
8033
8045
8034
8046
// only subscribe to the block proposal events
8035
8047
test_observer:: spawn ( ) ;
@@ -8070,16 +8082,13 @@ fn v3_signer_api_endpoint() {
8070
8082
) ;
8071
8083
8072
8084
info ! ( "------------------------- Reached Epoch 3.0 -------------------------" ) ;
8073
-
8074
8085
blind_signer ( & conf, & signers, proposals_submitted) ;
8075
- wait_for_first_naka_block_commit ( 60 , & commits_submitted) ;
8076
-
8077
8086
// TODO (hack) instantiate the sortdb in the burnchain
8078
8087
_ = btc_regtest_controller. sortdb_mut ( ) ;
8079
8088
8080
8089
info ! ( "------------------------- Setup finished, run test -------------------------" ) ;
8081
8090
8082
- let naka_tenures = 20 ;
8091
+ let naka_tenures = conf . burnchain . pox_reward_length . unwrap ( ) . into ( ) ;
8083
8092
let pre_naka_reward_cycle = 1 ;
8084
8093
let http_origin = format ! ( "http://{}" , & conf. node. rpc_bind) ;
8085
8094
@@ -8102,35 +8111,69 @@ fn v3_signer_api_endpoint() {
8102
8111
let blocks_signed_pre_naka = get_v3_signer ( & signer_pubkey, pre_naka_reward_cycle) ;
8103
8112
assert_eq ! ( blocks_signed_pre_naka, 0 ) ;
8104
8113
8105
- // Keep track of reward cycles encountered
8106
- let mut reward_cycles = HashSet :: new ( ) ;
8114
+ let block_height = btc_regtest_controller. get_headers_height ( ) ;
8115
+ let first_reward_cycle = btc_regtest_controller
8116
+ . get_burnchain ( )
8117
+ . block_height_to_reward_cycle ( block_height)
8118
+ . unwrap ( ) ;
8119
+
8120
+ let second_reward_cycle = first_reward_cycle. saturating_add ( 1 ) ;
8121
+ let second_reward_cycle_start = btc_regtest_controller
8122
+ . get_burnchain ( )
8123
+ . reward_cycle_to_block_height ( second_reward_cycle)
8124
+ . saturating_sub ( 1 ) ;
8125
+
8126
+ let nmb_naka_blocks_in_first_cycle = second_reward_cycle_start - block_height;
8127
+ let nmb_naka_blocks_in_second_cycle = naka_tenures - nmb_naka_blocks_in_first_cycle;
8107
8128
8108
8129
// Mine some nakamoto tenures
8109
- for _ in 0 ..naka_tenures {
8130
+ for _i in 0 ..naka_tenures {
8110
8131
next_block_and_mine_commit (
8111
8132
& mut btc_regtest_controller,
8112
8133
60 ,
8113
8134
& coord_channel,
8114
8135
& commits_submitted,
8115
8136
)
8116
8137
. unwrap ( ) ;
8117
- let block_height = btc_regtest_controller. get_headers_height ( ) ;
8118
- let reward_cycle = btc_regtest_controller
8119
- . get_burnchain ( )
8120
- . block_height_to_reward_cycle ( block_height)
8121
- . unwrap ( ) ;
8122
- reward_cycles. insert ( reward_cycle) ;
8123
8138
}
8139
+ let block_height = btc_regtest_controller. get_headers_height ( ) ;
8140
+ let reward_cycle = btc_regtest_controller
8141
+ . get_burnchain ( )
8142
+ . block_height_to_reward_cycle ( block_height)
8143
+ . unwrap ( ) ;
8124
8144
8125
- // Make sure we got a couple cycles
8126
- assert ! ( reward_cycles. len( ) > 1 ) ;
8127
- assert ! ( !reward_cycles. contains( & pre_naka_reward_cycle) ) ;
8145
+ assert_eq ! ( reward_cycle, second_reward_cycle) ;
8128
8146
8129
- // Since we have only one signer, it must be signing at least 1 block per reward cycle
8130
- for reward_cycle in reward_cycles. into_iter ( ) {
8131
- let blocks_signed = get_v3_signer ( & signer_pubkey, reward_cycle) ;
8132
- assert_ne ! ( blocks_signed, 0 ) ;
8133
- }
8147
+ // Assert that we mined a single block (the commit op) per tenure
8148
+ let nmb_signed_first_cycle = get_v3_signer ( & signer_pubkey, first_reward_cycle) ;
8149
+ let nmb_signed_second_cycle = get_v3_signer ( & signer_pubkey, second_reward_cycle) ;
8150
+
8151
+ assert_eq ! ( nmb_signed_first_cycle, nmb_naka_blocks_in_first_cycle) ;
8152
+ assert_eq ! ( nmb_signed_second_cycle, nmb_naka_blocks_in_second_cycle) ;
8153
+
8154
+ let blocks_processed_before = coord_channel
8155
+ . lock ( )
8156
+ . expect ( "Mutex poisoned" )
8157
+ . get_stacks_blocks_processed ( ) ;
8158
+ // submit a tx so that the miner will mine an extra stacks block
8159
+ let sender_nonce = 0 ;
8160
+ let transfer_tx =
8161
+ make_stacks_transfer ( & sender_sk, sender_nonce, send_fee, & recipient, send_amt) ;
8162
+ submit_tx ( & http_origin, & transfer_tx) ;
8163
+
8164
+ wait_for ( 30 , || {
8165
+ Ok ( coord_channel
8166
+ . lock ( )
8167
+ . expect ( "Mutex poisoned" )
8168
+ . get_stacks_blocks_processed ( )
8169
+ > blocks_processed_before)
8170
+ } )
8171
+ . unwrap ( ) ;
8172
+ // Assert that we mined an additional block in the second cycle
8173
+ assert_eq ! (
8174
+ get_v3_signer( & signer_pubkey, second_reward_cycle) ,
8175
+ nmb_naka_blocks_in_second_cycle + 1
8176
+ ) ;
8134
8177
8135
8178
info ! ( "------------------------- Test finished, clean up -------------------------" ) ;
8136
8179
0 commit comments