@@ -3948,40 +3948,36 @@ fn tx_replay_disagreement() {
3948
3948
}
3949
3949
3950
3950
let num_signers = 5;
3951
- let mut miners = MultipleMinerTest::new_with_config_modifications(
3952
- num_signers,
3953
- 10,
3954
- |config| {
3955
- config.validate_with_replay_tx = true;
3956
- },
3957
- |config| {
3958
- config.burnchain.pox_reward_length = Some(30);
3959
- config.miner.block_commit_delay = Duration::from_secs(0);
3960
- config.miner.tenure_cost_limit_per_block_percentage = None ;
3961
- config.miner.replay_transactions = true;
3962
- },
3963
- |config| {
3964
- config.burnchain.pox_reward_length = Some(30) ;
3965
- config.miner.block_commit_delay = Duration::from_secs(0);
3966
- config.miner.tenure_cost_limit_per_block_percentage = None;
3967
- config.miner.replay_transactions = true;
3968
- } ,
3969
- );
3951
+ let sender_sk = Secp256k1PrivateKey::from_seed("sender_1".as_bytes());
3952
+ let sender_addr = tests::to_addr(&sender_sk);
3953
+ let send_amt = 100;
3954
+ let send_fee = 180;
3955
+ let signer_test: SignerTest<SpawnedSigner> =
3956
+ SignerTest::new_with_config_modifications_and_snapshot(
3957
+ num_signers,
3958
+ vec![(sender_addr, (send_amt + send_fee) * 10)],
3959
+ |c| {
3960
+ c.validate_with_replay_tx = true ;
3961
+ },
3962
+ |node_config| {
3963
+ node_config.miner.block_commit_delay = Duration::from_secs(1);
3964
+ node_config.miner.replay_transactions = true ;
3965
+ },
3966
+ None,
3967
+ None,
3968
+ Some(function_name!()) ,
3969
+ );
3970
3970
3971
- let (conf_1, _conf_2) = miners.get_node_configs();
3972
- let _skip_commit_op_rl1 = miners
3973
- .signer_test
3974
- .running_nodes
3975
- .counters
3976
- .naka_skip_commit_op
3977
- .clone();
3978
- let skip_commit_op_rl2 = miners.rl2_counters.naka_skip_commit_op.clone();
3971
+ let conf = &signer_test.running_nodes.conf;
3972
+ let _http_origin = format!("http://{}", &conf.node.rpc_bind);
3973
+ let btc_controller = &signer_test.running_nodes.btc_regtest_controller;
3979
3974
3980
- // Make sure that the first miner wins the first sortition.
3981
- info!("Pausing miner 2's block commit submissions");
3982
- skip_commit_op_rl2.set(true);
3983
- miners.boot_to_epoch_3();
3984
- let btc_controller = &miners.signer_test.running_nodes.btc_regtest_controller;
3975
+ if signer_test.bootstrap_snapshot() {
3976
+ signer_test.shutdown_and_snapshot();
3977
+ return;
3978
+ }
3979
+
3980
+ info!("------------------------- Beginning test -------------------------");
3985
3981
3986
3982
let miner_pk = btc_controller
3987
3983
.get_mining_pubkey()
@@ -3994,13 +3990,10 @@ fn tx_replay_disagreement() {
3994
3990
3995
3991
for i in 0..pre_fork_tenures {
3996
3992
info!("Mining pre-fork tenure {} of {pre_fork_tenures}", i + 1);
3997
- miners
3998
- .signer_test
3999
- .mine_nakamoto_block(Duration::from_secs(30), false);
3993
+ signer_test.mine_nakamoto_block(Duration::from_secs(30), true);
4000
3994
}
4001
3995
4002
- let ignore_bitcoin_fork_keys = miners
4003
- .signer_test
3996
+ let ignore_bitcoin_fork_keys = signer_test
4004
3997
.signer_stacks_private_keys
4005
3998
.iter()
4006
3999
.enumerate()
@@ -4015,19 +4008,21 @@ fn tx_replay_disagreement() {
4015
4008
TEST_IGNORE_BITCOIN_FORK_PUBKEYS.set(ignore_bitcoin_fork_keys);
4016
4009
4017
4010
info!("------------------------- Triggering Bitcoin Fork -------------------------");
4018
- let tip = get_chain_info(&conf_1 );
4011
+ let tip = get_chain_info(&conf );
4019
4012
// Make a transfer tx (this will get forked)
4020
- let (txid, _) = miners.send_transfer_tx();
4013
+ let (txid, _) = signer_test
4014
+ .submit_transfer_tx(&sender_sk, send_fee, send_amt)
4015
+ .unwrap();
4021
4016
4022
4017
wait_for(30, || {
4023
- let new_tip = get_chain_info(&conf_1 );
4018
+ let new_tip = get_chain_info(&conf );
4024
4019
Ok(new_tip.stacks_tip_height > tip.stacks_tip_height)
4025
4020
})
4026
4021
.expect("Timed out waiting for transfer tx to be mined");
4027
4022
4028
4023
let mut commit_txid: Option<Txid> = None;
4029
4024
wait_for(30, || {
4030
- let Some(txid) = miners. signer_test.get_parent_block_commit_txid(&miner_pk) else {
4025
+ let Some(txid) = signer_test.get_parent_block_commit_txid(&miner_pk) else {
4031
4026
return Ok(false);
4032
4027
};
4033
4028
commit_txid = Some(txid);
@@ -4042,12 +4037,12 @@ fn tx_replay_disagreement() {
4042
4037
// Wait for the block commit re-broadcast to be confirmed
4043
4038
wait_for(10, || {
4044
4039
let is_confirmed =
4045
- BitcoinRPCRequest::check_transaction_confirmed(&conf_1 , &commit_txid.unwrap()).unwrap();
4040
+ BitcoinRPCRequest::check_transaction_confirmed(&conf , &commit_txid.unwrap()).unwrap();
4046
4041
Ok(is_confirmed)
4047
4042
})
4048
4043
.expect("Timed out waiting for transaction to be confirmed");
4049
4044
4050
- let tip_before = get_chain_info(&conf_1 );
4045
+ let tip_before = get_chain_info(&conf );
4051
4046
4052
4047
info!("---- Building next block ----";
4053
4048
"tip_before.stacks_tip_height" => tip_before.stacks_tip_height,
@@ -4056,43 +4051,19 @@ fn tx_replay_disagreement() {
4056
4051
4057
4052
btc_controller.build_next_block(1);
4058
4053
wait_for(30, || {
4059
- let tip = get_chain_info(&conf_1 );
4054
+ let tip = get_chain_info(&conf );
4060
4055
Ok(tip.stacks_tip_height < tip_before.stacks_tip_height)
4061
4056
})
4062
4057
.expect("Timed out waiting for next block to be mined");
4063
4058
4064
- // note, we should still have normal signer states!
4065
- miners.signer_test.check_signer_states_normal();
4066
-
4067
- info!("Wait for block off of shallow fork");
4068
-
4069
4059
TEST_MINE_STALL.set(true);
4070
4060
4071
- let submitted_commits = miners
4072
- .signer_test
4073
- .running_nodes
4074
- .counters
4075
- .naka_submitted_commits
4076
- .clone();
4077
-
4078
- // we need to mine some blocks to get back to being considered a frequent miner
4079
- for i in 0..3 {
4080
- let current_burn_height = get_chain_info(&conf_1).burn_block_height;
4081
- info!(
4082
- "Mining block #{i} to be considered a frequent miner";
4083
- "current_burn_height" => current_burn_height,
4084
- );
4085
- let commits_count = submitted_commits.load(Ordering::SeqCst);
4086
- next_block_and(btc_controller, 60, || {
4087
- Ok(submitted_commits.load(Ordering::SeqCst) > commits_count)
4088
- })
4089
- .unwrap();
4090
- }
4061
+ btc_controller.build_next_block(1);
4091
4062
4092
4063
// Wait for the signer states to be updated. Odd indexed signers
4093
4064
// should not have a replay set.
4094
4065
wait_for(30, || {
4095
- let (signer_states, _) = miners. signer_test.get_burn_updated_states();
4066
+ let (signer_states, _) = signer_test.get_burn_updated_states();
4096
4067
let all_pass = signer_states.iter().enumerate().all(|(i, state)| {
4097
4068
if i % 2 == 0 {
4098
4069
let Some(tx_replay_set) = state.get_tx_replay_set() else {
@@ -4107,27 +4078,26 @@ fn tx_replay_disagreement() {
4107
4078
})
4108
4079
.expect("Timed out waiting for signer states to be updated");
4109
4080
4110
- let tip = get_chain_info(&conf_1 );
4081
+ let tip = get_chain_info(&conf );
4111
4082
4112
4083
TEST_MINE_STALL.set(false);
4113
4084
4114
4085
// Now, wait for the tx replay set to be cleared
4115
4086
4116
4087
wait_for(30, || {
4117
- let new_tip = get_chain_info(&conf_1 );
4088
+ let new_tip = get_chain_info(&conf );
4118
4089
Ok(new_tip.stacks_tip_height >= tip.stacks_tip_height + 2)
4119
4090
})
4120
4091
.expect("Timed out waiting for transfer tx to be mined");
4121
4092
4122
- miners
4123
- .signer_test
4093
+ signer_test
4124
4094
.wait_for_signer_state_check(30, |state| {
4125
4095
let tx_replay_set = state.get_tx_replay_set();
4126
4096
Ok(tx_replay_set.is_none())
4127
4097
})
4128
4098
.expect("Timed out waiting for tx replay set to be cleared");
4129
4099
4130
- miners .shutdown();
4100
+ signer_test .shutdown();
4131
4101
}
4132
4102
4133
4103
#[test]
0 commit comments