Skip to content

Commit e9c141f

Browse files
committed
refactor: minor changes from PR review
1 parent 7f6eab9 commit e9c141f

File tree

5 files changed

+200
-75
lines changed

5 files changed

+200
-75
lines changed

stacks-common/src/types/mod.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -489,22 +489,12 @@ impl<L: Clone> EpochList<L> {
489489

490490
/// Determine which epoch, if any, a given burnchain height falls into.
491491
pub fn epoch_id_at_height(&self, height: u64) -> Option<StacksEpochId> {
492-
for epoch in self.0.iter() {
493-
if epoch.start_height <= height && height < epoch.end_height {
494-
return Some(epoch.epoch_id);
495-
}
496-
}
497-
None
492+
StacksEpoch::find_epoch(self, height).map(|idx| self.0[idx].epoch_id)
498493
}
499494

500495
/// Determine which epoch, if any, a given burnchain height falls into.
501496
pub fn epoch_at_height(&self, height: u64) -> Option<StacksEpoch<L>> {
502-
for epoch in self.0.iter() {
503-
if epoch.start_height <= height && height < epoch.end_height {
504-
return Some(epoch.clone());
505-
}
506-
}
507-
None
497+
StacksEpoch::find_epoch(self, height).map(|idx| self.0[idx].clone())
508498
}
509499

510500
/// Pushes a new `StacksEpoch` to the end of the list
@@ -517,6 +507,10 @@ impl<L: Clone> EpochList<L> {
517507
}
518508
self.0.push(epoch);
519509
}
510+
511+
pub fn to_vec(&self) -> Vec<StacksEpoch<L>> {
512+
self.0.clone()
513+
}
520514
}
521515

522516
impl<L: Clone> Index<StacksEpochId> for EpochList<L> {

stackslib/src/burnchains/bitcoin/indexer.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ impl TryFrom<u32> for BitcoinNetworkType {
9292
/// Should *not* be used except by the BitcoinIndexer when no epochs vector
9393
/// was specified.
9494
pub fn get_bitcoin_stacks_epochs(network_id: BitcoinNetworkType) -> EpochList {
95-
EpochList::new(match network_id {
96-
BitcoinNetworkType::Mainnet => &*STACKS_EPOCHS_MAINNET,
97-
BitcoinNetworkType::Testnet => &*STACKS_EPOCHS_TESTNET,
98-
BitcoinNetworkType::Regtest => &*STACKS_EPOCHS_REGTEST,
99-
})
95+
match network_id {
96+
BitcoinNetworkType::Mainnet => (*STACKS_EPOCHS_MAINNET).clone(),
97+
BitcoinNetworkType::Testnet => (*STACKS_EPOCHS_TESTNET).clone(),
98+
BitcoinNetworkType::Regtest => (*STACKS_EPOCHS_REGTEST).clone(),
99+
}
100100
}
101101

102102
#[derive(Debug, Clone, PartialEq)]

stackslib/src/chainstate/burn/db/sortdb.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10931,10 +10931,9 @@ pub mod tests {
1093110931

1093210932
fs::create_dir_all(path_root).unwrap();
1093310933

10934-
let mut bad_epochs = STACKS_EPOCHS_MAINNET.to_vec();
10935-
let idx = bad_epochs.len() - 2;
10936-
bad_epochs[idx].end_height += 1;
10937-
bad_epochs[idx + 1].start_height += 1;
10934+
let mut bad_epochs = (*STACKS_EPOCHS_MAINNET).clone();
10935+
bad_epochs[StacksEpochId::Epoch25].end_height += 1;
10936+
bad_epochs[StacksEpochId::Epoch30].start_height += 1;
1093810937

1093910938
let sortdb = SortitionDB::connect(
1094010939
&format!("{}/sortdb.sqlite", &path_root),
@@ -10949,14 +10948,14 @@ pub mod tests {
1094910948
.unwrap();
1095010949

1095110950
let db_epochs = SortitionDB::get_stacks_epochs(sortdb.conn()).unwrap();
10952-
assert_eq!(db_epochs, bad_epochs);
10951+
assert_eq!(db_epochs, bad_epochs.to_vec());
1095310952

1095410953
let fixed_sortdb = SortitionDB::connect(
1095510954
&format!("{}/sortdb.sqlite", &path_root),
1095610955
0,
1095710956
&BurnchainHeaderHash([0x00; 32]),
1095810957
0,
10959-
&STACKS_EPOCHS_MAINNET.to_vec(),
10958+
&STACKS_EPOCHS_MAINNET,
1096010959
PoxConstants::mainnet_default(),
1096110960
None,
1096210961
true,

stackslib/src/cli.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl StacksChainConfig {
6565
.unwrap(),
6666
first_burn_header_timestamp: BITCOIN_MAINNET_FIRST_BLOCK_TIMESTAMP.into(),
6767
pox_constants: PoxConstants::mainnet_default(),
68-
epochs: EpochList::new(&*STACKS_EPOCHS_MAINNET),
68+
epochs: (*STACKS_EPOCHS_MAINNET).clone(),
6969
}
7070
}
7171
}

stackslib/src/core/mod.rs

Lines changed: 183 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ pub fn check_fault_injection(fault_name: &str) -> bool {
238238
}
239239

240240
lazy_static! {
241-
pub static ref STACKS_EPOCHS_MAINNET: [StacksEpoch; 9] = [
241+
pub static ref STACKS_EPOCHS_MAINNET: EpochList = EpochList::new(&[
242242
StacksEpoch {
243243
epoch_id: StacksEpochId::Epoch10,
244244
start_height: 0,
@@ -302,11 +302,11 @@ lazy_static! {
302302
block_limit: BLOCK_LIMIT_MAINNET_21.clone(),
303303
network_epoch: PEER_VERSION_EPOCH_3_0
304304
},
305-
];
305+
]);
306306
}
307307

308308
lazy_static! {
309-
pub static ref STACKS_EPOCHS_TESTNET: [StacksEpoch; 9] = [
309+
pub static ref STACKS_EPOCHS_TESTNET: EpochList = EpochList::new(&[
310310
StacksEpoch {
311311
epoch_id: StacksEpochId::Epoch10,
312312
start_height: 0,
@@ -370,11 +370,11 @@ lazy_static! {
370370
block_limit: BLOCK_LIMIT_MAINNET_21.clone(),
371371
network_epoch: PEER_VERSION_EPOCH_3_0
372372
},
373-
];
373+
]);
374374
}
375375

376376
lazy_static! {
377-
pub static ref STACKS_EPOCHS_REGTEST: [StacksEpoch; 9] = [
377+
pub static ref STACKS_EPOCHS_REGTEST: EpochList = EpochList::new(&[
378378
StacksEpoch {
379379
epoch_id: StacksEpochId::Epoch10,
380380
start_height: 0,
@@ -438,7 +438,7 @@ lazy_static! {
438438
block_limit: BLOCK_LIMIT_MAINNET_21.clone(),
439439
network_epoch: PEER_VERSION_EPOCH_3_0
440440
},
441-
];
441+
]);
442442
}
443443

444444
/// Stacks 2.05 epoch marker. All block-commits in 2.05 must have a memo bitfield with this value
@@ -471,51 +471,183 @@ pub static STACKS_EPOCH_3_0_MARKER: u8 = 0x0b;
471471

472472
#[test]
473473
fn test_ord_for_stacks_epoch() {
474-
let epochs = STACKS_EPOCHS_MAINNET.clone();
475-
assert_eq!(epochs[0].cmp(&epochs[1]), Ordering::Less);
476-
assert_eq!(epochs[1].cmp(&epochs[2]), Ordering::Less);
477-
assert_eq!(epochs[0].cmp(&epochs[2]), Ordering::Less);
478-
assert_eq!(epochs[0].cmp(&epochs[0]), Ordering::Equal);
479-
assert_eq!(epochs[1].cmp(&epochs[1]), Ordering::Equal);
480-
assert_eq!(epochs[2].cmp(&epochs[2]), Ordering::Equal);
481-
assert_eq!(epochs[3].cmp(&epochs[3]), Ordering::Equal);
482-
assert_eq!(epochs[4].cmp(&epochs[4]), Ordering::Equal);
483-
assert_eq!(epochs[2].cmp(&epochs[0]), Ordering::Greater);
484-
assert_eq!(epochs[2].cmp(&epochs[1]), Ordering::Greater);
485-
assert_eq!(epochs[1].cmp(&epochs[0]), Ordering::Greater);
486-
assert_eq!(epochs[3].cmp(&epochs[0]), Ordering::Greater);
487-
assert_eq!(epochs[3].cmp(&epochs[1]), Ordering::Greater);
488-
assert_eq!(epochs[3].cmp(&epochs[2]), Ordering::Greater);
489-
assert_eq!(epochs[4].cmp(&epochs[0]), Ordering::Greater);
490-
assert_eq!(epochs[4].cmp(&epochs[1]), Ordering::Greater);
491-
assert_eq!(epochs[4].cmp(&epochs[2]), Ordering::Greater);
492-
assert_eq!(epochs[4].cmp(&epochs[3]), Ordering::Greater);
493-
assert_eq!(epochs[5].cmp(&epochs[0]), Ordering::Greater);
494-
assert_eq!(epochs[5].cmp(&epochs[1]), Ordering::Greater);
495-
assert_eq!(epochs[5].cmp(&epochs[2]), Ordering::Greater);
496-
assert_eq!(epochs[5].cmp(&epochs[3]), Ordering::Greater);
497-
assert_eq!(epochs[5].cmp(&epochs[4]), Ordering::Greater);
498-
assert_eq!(epochs[6].cmp(&epochs[0]), Ordering::Greater);
499-
assert_eq!(epochs[6].cmp(&epochs[1]), Ordering::Greater);
500-
assert_eq!(epochs[6].cmp(&epochs[2]), Ordering::Greater);
501-
assert_eq!(epochs[6].cmp(&epochs[3]), Ordering::Greater);
502-
assert_eq!(epochs[6].cmp(&epochs[4]), Ordering::Greater);
503-
assert_eq!(epochs[6].cmp(&epochs[5]), Ordering::Greater);
504-
assert_eq!(epochs[7].cmp(&epochs[0]), Ordering::Greater);
505-
assert_eq!(epochs[7].cmp(&epochs[1]), Ordering::Greater);
506-
assert_eq!(epochs[7].cmp(&epochs[2]), Ordering::Greater);
507-
assert_eq!(epochs[7].cmp(&epochs[3]), Ordering::Greater);
508-
assert_eq!(epochs[7].cmp(&epochs[4]), Ordering::Greater);
509-
assert_eq!(epochs[7].cmp(&epochs[5]), Ordering::Greater);
510-
assert_eq!(epochs[7].cmp(&epochs[6]), Ordering::Greater);
511-
assert_eq!(epochs[8].cmp(&epochs[0]), Ordering::Greater);
512-
assert_eq!(epochs[8].cmp(&epochs[1]), Ordering::Greater);
513-
assert_eq!(epochs[8].cmp(&epochs[2]), Ordering::Greater);
514-
assert_eq!(epochs[8].cmp(&epochs[3]), Ordering::Greater);
515-
assert_eq!(epochs[8].cmp(&epochs[4]), Ordering::Greater);
516-
assert_eq!(epochs[8].cmp(&epochs[5]), Ordering::Greater);
517-
assert_eq!(epochs[8].cmp(&epochs[6]), Ordering::Greater);
518-
assert_eq!(epochs[8].cmp(&epochs[7]), Ordering::Greater);
474+
let epochs = &*STACKS_EPOCHS_MAINNET;
475+
assert_eq!(
476+
epochs[StacksEpochId::Epoch10].cmp(&epochs[StacksEpochId::Epoch20]),
477+
Ordering::Less
478+
);
479+
assert_eq!(
480+
epochs[StacksEpochId::Epoch20].cmp(&epochs[StacksEpochId::Epoch2_05]),
481+
Ordering::Less
482+
);
483+
assert_eq!(
484+
epochs[StacksEpochId::Epoch10].cmp(&epochs[StacksEpochId::Epoch2_05]),
485+
Ordering::Less
486+
);
487+
assert_eq!(
488+
epochs[StacksEpochId::Epoch10].cmp(&epochs[StacksEpochId::Epoch10]),
489+
Ordering::Equal
490+
);
491+
assert_eq!(
492+
epochs[StacksEpochId::Epoch20].cmp(&epochs[StacksEpochId::Epoch20]),
493+
Ordering::Equal
494+
);
495+
assert_eq!(
496+
epochs[StacksEpochId::Epoch2_05].cmp(&epochs[StacksEpochId::Epoch2_05]),
497+
Ordering::Equal
498+
);
499+
assert_eq!(
500+
epochs[StacksEpochId::Epoch21].cmp(&epochs[StacksEpochId::Epoch21]),
501+
Ordering::Equal
502+
);
503+
assert_eq!(
504+
epochs[StacksEpochId::Epoch22].cmp(&epochs[StacksEpochId::Epoch22]),
505+
Ordering::Equal
506+
);
507+
assert_eq!(
508+
epochs[StacksEpochId::Epoch2_05].cmp(&epochs[StacksEpochId::Epoch10]),
509+
Ordering::Greater
510+
);
511+
assert_eq!(
512+
epochs[StacksEpochId::Epoch2_05].cmp(&epochs[StacksEpochId::Epoch20]),
513+
Ordering::Greater
514+
);
515+
assert_eq!(
516+
epochs[StacksEpochId::Epoch20].cmp(&epochs[StacksEpochId::Epoch10]),
517+
Ordering::Greater
518+
);
519+
assert_eq!(
520+
epochs[StacksEpochId::Epoch21].cmp(&epochs[StacksEpochId::Epoch10]),
521+
Ordering::Greater
522+
);
523+
assert_eq!(
524+
epochs[StacksEpochId::Epoch21].cmp(&epochs[StacksEpochId::Epoch20]),
525+
Ordering::Greater
526+
);
527+
assert_eq!(
528+
epochs[StacksEpochId::Epoch21].cmp(&epochs[StacksEpochId::Epoch2_05]),
529+
Ordering::Greater
530+
);
531+
assert_eq!(
532+
epochs[StacksEpochId::Epoch22].cmp(&epochs[StacksEpochId::Epoch10]),
533+
Ordering::Greater
534+
);
535+
assert_eq!(
536+
epochs[StacksEpochId::Epoch22].cmp(&epochs[StacksEpochId::Epoch20]),
537+
Ordering::Greater
538+
);
539+
assert_eq!(
540+
epochs[StacksEpochId::Epoch22].cmp(&epochs[StacksEpochId::Epoch2_05]),
541+
Ordering::Greater
542+
);
543+
assert_eq!(
544+
epochs[StacksEpochId::Epoch22].cmp(&epochs[StacksEpochId::Epoch21]),
545+
Ordering::Greater
546+
);
547+
assert_eq!(
548+
epochs[StacksEpochId::Epoch23].cmp(&epochs[StacksEpochId::Epoch10]),
549+
Ordering::Greater
550+
);
551+
assert_eq!(
552+
epochs[StacksEpochId::Epoch23].cmp(&epochs[StacksEpochId::Epoch20]),
553+
Ordering::Greater
554+
);
555+
assert_eq!(
556+
epochs[StacksEpochId::Epoch23].cmp(&epochs[StacksEpochId::Epoch2_05]),
557+
Ordering::Greater
558+
);
559+
assert_eq!(
560+
epochs[StacksEpochId::Epoch23].cmp(&epochs[StacksEpochId::Epoch21]),
561+
Ordering::Greater
562+
);
563+
assert_eq!(
564+
epochs[StacksEpochId::Epoch23].cmp(&epochs[StacksEpochId::Epoch22]),
565+
Ordering::Greater
566+
);
567+
assert_eq!(
568+
epochs[StacksEpochId::Epoch24].cmp(&epochs[StacksEpochId::Epoch10]),
569+
Ordering::Greater
570+
);
571+
assert_eq!(
572+
epochs[StacksEpochId::Epoch24].cmp(&epochs[StacksEpochId::Epoch20]),
573+
Ordering::Greater
574+
);
575+
assert_eq!(
576+
epochs[StacksEpochId::Epoch24].cmp(&epochs[StacksEpochId::Epoch2_05]),
577+
Ordering::Greater
578+
);
579+
assert_eq!(
580+
epochs[StacksEpochId::Epoch24].cmp(&epochs[StacksEpochId::Epoch21]),
581+
Ordering::Greater
582+
);
583+
assert_eq!(
584+
epochs[StacksEpochId::Epoch24].cmp(&epochs[StacksEpochId::Epoch22]),
585+
Ordering::Greater
586+
);
587+
assert_eq!(
588+
epochs[StacksEpochId::Epoch24].cmp(&epochs[StacksEpochId::Epoch23]),
589+
Ordering::Greater
590+
);
591+
assert_eq!(
592+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch10]),
593+
Ordering::Greater
594+
);
595+
assert_eq!(
596+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch20]),
597+
Ordering::Greater
598+
);
599+
assert_eq!(
600+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch2_05]),
601+
Ordering::Greater
602+
);
603+
assert_eq!(
604+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch21]),
605+
Ordering::Greater
606+
);
607+
assert_eq!(
608+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch22]),
609+
Ordering::Greater
610+
);
611+
assert_eq!(
612+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch23]),
613+
Ordering::Greater
614+
);
615+
assert_eq!(
616+
epochs[StacksEpochId::Epoch25].cmp(&epochs[StacksEpochId::Epoch24]),
617+
Ordering::Greater
618+
);
619+
assert_eq!(
620+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch10]),
621+
Ordering::Greater
622+
);
623+
assert_eq!(
624+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch20]),
625+
Ordering::Greater
626+
);
627+
assert_eq!(
628+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch2_05]),
629+
Ordering::Greater
630+
);
631+
assert_eq!(
632+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch21]),
633+
Ordering::Greater
634+
);
635+
assert_eq!(
636+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch22]),
637+
Ordering::Greater
638+
);
639+
assert_eq!(
640+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch23]),
641+
Ordering::Greater
642+
);
643+
assert_eq!(
644+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch24]),
645+
Ordering::Greater
646+
);
647+
assert_eq!(
648+
epochs[StacksEpochId::Epoch30].cmp(&epochs[StacksEpochId::Epoch25]),
649+
Ordering::Greater
650+
);
519651
}
520652

521653
#[test]

0 commit comments

Comments
 (0)