Skip to content

Commit 3107f61

Browse files
committed
Merge remote-tracking branch 'origin/develop' into fix/burn-view
2 parents 016d4e9 + 0e796a5 commit 3107f61

File tree

1 file changed

+32
-22
lines changed

1 file changed

+32
-22
lines changed

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ use stacks::chainstate::stacks::address::{PoxAddress, StacksAddressExtensions};
4747
use stacks::chainstate::stacks::boot::{
4848
MINERS_NAME, SIGNERS_VOTING_FUNCTION_NAME, SIGNERS_VOTING_NAME,
4949
};
50-
use stacks::chainstate::stacks::db::StacksChainState;
50+
use stacks::chainstate::stacks::db::{StacksChainState, StacksHeaderInfo};
5151
use stacks::chainstate::stacks::miner::{
5252
BlockBuilder, BlockLimitFunction, TransactionEvent, TransactionResult, TransactionSuccessEvent,
5353
};
@@ -301,6 +301,30 @@ pub fn get_stackerdb_slot_version(
301301
})
302302
}
303303

304+
pub fn get_last_block_in_current_tenure(
305+
sortdb: &SortitionDB,
306+
chainstate: &StacksChainState,
307+
) -> Option<StacksHeaderInfo> {
308+
let ch = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
309+
.unwrap()
310+
.consensus_hash;
311+
let mut tenure_blocks = test_observer::get_blocks();
312+
tenure_blocks.retain(|block| {
313+
let consensus_hash = block.get("consensus_hash").unwrap().as_str().unwrap();
314+
consensus_hash == format!("0x{ch}")
315+
});
316+
let last_block = tenure_blocks.last()?.clone();
317+
let last_block_id = StacksBlockId::from_hex(
318+
&last_block
319+
.get("index_block_hash")
320+
.unwrap()
321+
.as_str()
322+
.unwrap()[2..],
323+
)
324+
.unwrap();
325+
NakamotoChainState::get_block_header(chainstate.db(), &last_block_id).unwrap()
326+
}
327+
304328
pub fn add_initial_balances(
305329
conf: &mut Config,
306330
accounts: usize,
@@ -5079,7 +5103,7 @@ fn forked_tenure_is_ignored() {
50795103
thread::sleep(Duration::from_secs(1));
50805104
}
50815105

5082-
info!("Tenure B broadcasted but did not process a block. Issue the next bitcon block and unstall block commits.");
5106+
info!("Tenure B broadcasted but did not process a block. Issue the next bitcoin block and unstall block commits.");
50835107

50845108
// the block will be stored, not processed, so load it out of staging
50855109
let tip_sn = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
@@ -5126,27 +5150,17 @@ fn forked_tenure_is_ignored() {
51265150
.lock()
51275151
.expect("Mutex poisoned")
51285152
.get_stacks_blocks_processed();
5153+
let block_in_tenure = get_last_block_in_current_tenure(&sortdb, &chainstate).is_some();
51295154
Ok(commits_count > commits_before
51305155
&& blocks_count > blocks_before
5131-
&& blocks_processed > blocks_processed_before)
5156+
&& blocks_processed > blocks_processed_before
5157+
&& block_in_tenure)
51325158
})
51335159
.unwrap();
51345160

51355161
info!("Tenure C produced a block!");
5136-
wait_for(30, || {
5137-
let block_tenure_c =
5138-
NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5139-
.unwrap()
5140-
.unwrap();
5141-
let blocks = test_observer::get_mined_nakamoto_blocks();
5142-
let block_c = blocks.last().unwrap();
5143-
Ok(block_tenure_c.index_block_hash().to_string() == block_c.block_id)
5144-
})
5145-
.expect("Failed to wait for block processing");
51465162

5147-
let block_tenure_c = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5148-
.unwrap()
5149-
.unwrap();
5163+
let block_tenure_c = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
51505164
let blocks = test_observer::get_mined_nakamoto_blocks();
51515165
let block_c = blocks.last().unwrap();
51525166
info!("Tenure C tip block: {}", &block_tenure_c.index_block_hash());
@@ -5199,9 +5213,7 @@ fn forked_tenure_is_ignored() {
51995213

52005214
info!("Tenure C produced a second block!");
52015215

5202-
let block_2_tenure_c = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5203-
.unwrap()
5204-
.unwrap();
5216+
let block_2_tenure_c = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
52055217
let blocks = test_observer::get_mined_nakamoto_blocks();
52065218
let block_2_c = blocks.last().unwrap();
52075219

@@ -5232,9 +5244,7 @@ fn forked_tenure_is_ignored() {
52325244
})
52335245
.unwrap();
52345246

5235-
let block_tenure_d = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5236-
.unwrap()
5237-
.unwrap();
5247+
let block_tenure_d = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
52385248
let blocks = test_observer::get_mined_nakamoto_blocks();
52395249
let block_d = blocks.last().unwrap();
52405250

0 commit comments

Comments
 (0)