Skip to content

Commit de8b6e6

Browse files
committed
fix: tx_replay_disagreement
1 parent 991f010 commit de8b6e6

File tree

1 file changed

+45
-75
lines changed
  • testnet/stacks-node/src/tests/signer

1 file changed

+45
-75
lines changed

testnet/stacks-node/src/tests/signer/v0.rs

Lines changed: 45 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -3948,40 +3948,36 @@ fn tx_replay_disagreement() {
39483948
}
39493949

39503950
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+
);
39703970

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;
39793974

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 -------------------------");
39853981

39863982
let miner_pk = btc_controller
39873983
.get_mining_pubkey()
@@ -3994,13 +3990,10 @@ fn tx_replay_disagreement() {
39943990

39953991
for i in 0..pre_fork_tenures {
39963992
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);
40003994
}
40013995

4002-
let ignore_bitcoin_fork_keys = miners
4003-
.signer_test
3996+
let ignore_bitcoin_fork_keys = signer_test
40043997
.signer_stacks_private_keys
40053998
.iter()
40063999
.enumerate()
@@ -4015,19 +4008,21 @@ fn tx_replay_disagreement() {
40154008
TEST_IGNORE_BITCOIN_FORK_PUBKEYS.set(ignore_bitcoin_fork_keys);
40164009

40174010
info!("------------------------- Triggering Bitcoin Fork -------------------------");
4018-
let tip = get_chain_info(&conf_1);
4011+
let tip = get_chain_info(&conf);
40194012
// 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();
40214016

40224017
wait_for(30, || {
4023-
let new_tip = get_chain_info(&conf_1);
4018+
let new_tip = get_chain_info(&conf);
40244019
Ok(new_tip.stacks_tip_height > tip.stacks_tip_height)
40254020
})
40264021
.expect("Timed out waiting for transfer tx to be mined");
40274022

40284023
let mut commit_txid: Option<Txid> = None;
40294024
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 {
40314026
return Ok(false);
40324027
};
40334028
commit_txid = Some(txid);
@@ -4042,12 +4037,12 @@ fn tx_replay_disagreement() {
40424037
// Wait for the block commit re-broadcast to be confirmed
40434038
wait_for(10, || {
40444039
let is_confirmed =
4045-
BitcoinRPCRequest::check_transaction_confirmed(&conf_1, &commit_txid.unwrap()).unwrap();
4040+
BitcoinRPCRequest::check_transaction_confirmed(&conf, &commit_txid.unwrap()).unwrap();
40464041
Ok(is_confirmed)
40474042
})
40484043
.expect("Timed out waiting for transaction to be confirmed");
40494044

4050-
let tip_before = get_chain_info(&conf_1);
4045+
let tip_before = get_chain_info(&conf);
40514046

40524047
info!("---- Building next block ----";
40534048
"tip_before.stacks_tip_height" => tip_before.stacks_tip_height,
@@ -4056,43 +4051,19 @@ fn tx_replay_disagreement() {
40564051

40574052
btc_controller.build_next_block(1);
40584053
wait_for(30, || {
4059-
let tip = get_chain_info(&conf_1);
4054+
let tip = get_chain_info(&conf);
40604055
Ok(tip.stacks_tip_height < tip_before.stacks_tip_height)
40614056
})
40624057
.expect("Timed out waiting for next block to be mined");
40634058

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-
40694059
TEST_MINE_STALL.set(true);
40704060

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);
40914062

40924063
// Wait for the signer states to be updated. Odd indexed signers
40934064
// should not have a replay set.
40944065
wait_for(30, || {
4095-
let (signer_states, _) = miners.signer_test.get_burn_updated_states();
4066+
let (signer_states, _) = signer_test.get_burn_updated_states();
40964067
let all_pass = signer_states.iter().enumerate().all(|(i, state)| {
40974068
if i % 2 == 0 {
40984069
let Some(tx_replay_set) = state.get_tx_replay_set() else {
@@ -4107,27 +4078,26 @@ fn tx_replay_disagreement() {
41074078
})
41084079
.expect("Timed out waiting for signer states to be updated");
41094080

4110-
let tip = get_chain_info(&conf_1);
4081+
let tip = get_chain_info(&conf);
41114082

41124083
TEST_MINE_STALL.set(false);
41134084

41144085
// Now, wait for the tx replay set to be cleared
41154086

41164087
wait_for(30, || {
4117-
let new_tip = get_chain_info(&conf_1);
4088+
let new_tip = get_chain_info(&conf);
41184089
Ok(new_tip.stacks_tip_height >= tip.stacks_tip_height + 2)
41194090
})
41204091
.expect("Timed out waiting for transfer tx to be mined");
41214092

4122-
miners
4123-
.signer_test
4093+
signer_test
41244094
.wait_for_signer_state_check(30, |state| {
41254095
let tx_replay_set = state.get_tx_replay_set();
41264096
Ok(tx_replay_set.is_none())
41274097
})
41284098
.expect("Timed out waiting for tx replay set to be cleared");
41294099

4130-
miners.shutdown();
4100+
signer_test.shutdown();
41314101
}
41324102

41334103
#[test]

0 commit comments

Comments
 (0)