#[doc(hidden)]
pub const STR_002_MODULE_PRESENT: () = ();
use crate::constants::{
EPOCH_L1_BLOCKS, PHASE_BLOCK_PRODUCTION_END_PCT, PHASE_CHECKPOINT_END_PCT,
PHASE_FINALIZATION_END_PCT,
};
use crate::types::epoch_phase::EpochPhase;
pub fn l1_progress_phase_for_network_epoch(
genesis_l1_height: u32,
epoch: u64,
current_l1_height: u32,
) -> EpochPhase {
let epoch_l1_start = genesis_l1_height + (epoch as u32 * EPOCH_L1_BLOCKS);
let pct = if current_l1_height <= epoch_l1_start {
0u64
} else {
let elapsed = (current_l1_height - epoch_l1_start) as u64;
(elapsed * 100 / EPOCH_L1_BLOCKS as u64).min(100)
};
if pct < PHASE_BLOCK_PRODUCTION_END_PCT as u64 {
EpochPhase::BlockProduction
} else if pct < PHASE_CHECKPOINT_END_PCT as u64 {
EpochPhase::Checkpoint
} else if pct < PHASE_FINALIZATION_END_PCT as u64 {
EpochPhase::Finalization
} else {
EpochPhase::Complete
}
}