Skip to content

Commit efdf53e

Browse files
committed
Use helper functions in non_blocking_minority_configured_to_favour_incoming_miner test
Signed-off-by: Jacinta Ferrant <[email protected]>
1 parent d7e9720 commit efdf53e

File tree

1 file changed

+23
-149
lines changed
  • testnet/stacks-node/src/tests/signer

1 file changed

+23
-149
lines changed

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

Lines changed: 23 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -11652,193 +11652,67 @@ fn non_blocking_minority_configured_to_favour_incoming_miner() {
1165211652

1165311653
info!("------------------------- Verify that Miner 2's Block N+1' was Rejected ------------------------");
1165411654

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

1167911663
assert_eq!(miners.get_peer_stacks_tip_height(), stacks_height_before,);
1168011664

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 ------------------------";
1168211666
"stacks_height_before" => %stacks_height_before
1168311667
);
1168411668

1168511669
TEST_BROADCAST_PROPOSAL_STALL.set(vec![]);
1168611670

1168711671
// 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();
1173711676

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

1175511680
info!(
1175611681
"------------------------- Verify BlockFound in Miner 1's Block N+1 -------------------------"
1175711682
);
1175811683
verify_last_block_contains_tenure_change_tx(TenureChangeCause::Extended);
1175911684

1176011685
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;
1176711687
// submit a tx so that the miner will mine an extra block
11768-
let txid = miners
11688+
let _ = miners
1176911689
.send_and_mine_transfer_tx(30)
1177011690
.expect("Failed to mine transfer tx");
1177111691

1177211692
// 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");
1180211696

11803-
let miner_1_block_n_2 = miner_1_block_n_2.expect("No block proposal from miner 1");
1180411697
let peer_info = miners.get_peer_info();
1180511698
assert_eq!(peer_info.stacks_tip, miner_1_block_n_2.header.block_hash());
1180611699
assert_eq!(peer_info.stacks_tip_height, stacks_height_before + 1);
1180711700

1180811701
info!("------------------------- Unpause Miner 2's Block Commits -------------------------");
11809-
let stacks_height_before = peer_info.stacks_tip_height;
1181011702
miners.submit_commit_miner_2(&sortdb);
1181111703

1181211704
let burn_height_before = get_burn_height();
11813-
let block_before = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
11814-
.unwrap()
11815-
.block_height;
1181611705

1181711706
info!("------------------------- Miner 2 Mines a Normal Tenure C -------------------------";
1181811707
"burn_height_before" => burn_height_before);
1181911708

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");
1182811712
btc_blocks_mined += 1;
1182911713

1183011714
// 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);
1184211716

1184311717
info!(
1184411718
"------------------------- Verify Tenure Change Tx in Miner 2's Block N+3 -------------------------"

0 commit comments

Comments
 (0)