use crate::eip7840::BlobParams;
use alloc::vec::Vec;
pub const BPO1_TARGET_BLOBS_PER_BLOCK: u64 = 10;
pub const BPO1_MAX_BLOBS_PER_BLOCK: u64 = 15;
pub const BPO1_BASE_UPDATE_FRACTION: u64 = 8346193;
pub const BPO2_TARGET_BLOBS_PER_BLOCK: u64 = 14;
pub const BPO2_MAX_BLOBS_PER_BLOCK: u64 = 21;
pub const BPO2_BASE_UPDATE_FRACTION: u64 = 11684671;
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum BlobScheduleEntry {
Cancun(BlobParams),
Prague(BlobParams),
TimestampUpdate(u64, BlobParams),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BlobScheduleBlobParams {
pub cancun: BlobParams,
pub prague: BlobParams,
pub osaka: BlobParams,
pub scheduled: Vec<(u64, BlobParams)>,
}
impl BlobScheduleBlobParams {
pub fn mainnet() -> Self {
Self {
cancun: BlobParams::cancun(),
prague: BlobParams::prague(),
osaka: BlobParams::osaka(),
scheduled: Default::default(),
}
}
pub fn with_scheduled(
mut self,
scheduled: impl IntoIterator<Item = (u64, BlobParams)>,
) -> Self {
self.scheduled = scheduled.into_iter().collect();
self
}
pub fn active_scheduled_params_at_timestamp(&self, timestamp: u64) -> Option<&BlobParams> {
self.scheduled.iter().rev().find(|(ts, _)| timestamp >= *ts).map(|(_, params)| params)
}
pub const fn cancun(&self) -> &BlobParams {
&self.cancun
}
pub const fn prague(&self) -> &BlobParams {
&self.prague
}
pub const fn osaka(&self) -> &BlobParams {
&self.osaka
}
}
impl Default for BlobScheduleBlobParams {
fn default() -> Self {
Self::mainnet()
}
}