mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
Move OptimismHardfork to new crate reth_optimism_forks (#10963)
This commit is contained in:
@ -40,7 +40,6 @@ proptest.workspace = true
|
||||
[features]
|
||||
default = ["std", "serde", "rustc-hash"]
|
||||
arbitrary = ["dep:arbitrary", "dep:proptest", "dep:proptest-derive"]
|
||||
optimism = []
|
||||
serde = ["dep:serde"]
|
||||
std = ["thiserror-no-std/std", "rustc-hash/std"]
|
||||
rustc-hash = ["dep:rustc-hash"]
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
use crate::{ChainHardforks, EthereumHardfork, ForkCondition};
|
||||
use alloc::vec;
|
||||
|
||||
use alloy_primitives::U256;
|
||||
use once_cell::sync::Lazy;
|
||||
|
||||
use crate::{ChainHardforks, EthereumHardfork, ForkCondition};
|
||||
|
||||
/// Dev hardforks
|
||||
pub static DEV_HARDFORKS: Lazy<ChainHardforks> = Lazy::new(|| {
|
||||
ChainHardforks::new(vec![
|
||||
@ -23,13 +25,5 @@ pub static DEV_HARDFORKS: Lazy<ChainHardforks> = Lazy::new(|| {
|
||||
),
|
||||
(EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(0)),
|
||||
(EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(0)),
|
||||
#[cfg(feature = "optimism")]
|
||||
(crate::OptimismHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)),
|
||||
#[cfg(feature = "optimism")]
|
||||
(crate::OptimismHardfork::Bedrock.boxed(), ForkCondition::Block(0)),
|
||||
#[cfg(feature = "optimism")]
|
||||
(crate::OptimismHardfork::Ecotone.boxed(), ForkCondition::Timestamp(0)),
|
||||
#[cfg(feature = "optimism")]
|
||||
(crate::OptimismHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)),
|
||||
])
|
||||
});
|
||||
|
||||
@ -3,9 +3,6 @@ mod macros;
|
||||
mod ethereum;
|
||||
pub use ethereum::EthereumHardfork;
|
||||
|
||||
mod optimism;
|
||||
pub use optimism::OptimismHardfork;
|
||||
|
||||
mod dev;
|
||||
pub use dev::DEV_HARDFORKS;
|
||||
|
||||
@ -47,7 +44,6 @@ impl Hash for dyn Hardfork + 'static {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::hardfork::optimism::OptimismHardfork;
|
||||
use std::str::FromStr;
|
||||
|
||||
#[test]
|
||||
@ -99,24 +95,6 @@ mod tests {
|
||||
assert_eq!(hardforks, expected_hardforks);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_op_hardfork_from_str() {
|
||||
let hardfork_str = ["beDrOck", "rEgOlITH", "cAnYoN", "eCoToNe", "FJorD", "GRaNiTe"];
|
||||
let expected_hardforks = [
|
||||
OptimismHardfork::Bedrock,
|
||||
OptimismHardfork::Regolith,
|
||||
OptimismHardfork::Canyon,
|
||||
OptimismHardfork::Ecotone,
|
||||
OptimismHardfork::Fjord,
|
||||
OptimismHardfork::Granite,
|
||||
];
|
||||
|
||||
let hardforks: Vec<OptimismHardfork> =
|
||||
hardfork_str.iter().map(|h| OptimismHardfork::from_str(h).unwrap()).collect();
|
||||
|
||||
assert_eq!(hardforks, expected_hardforks);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_nonexistent_hardfork_from_str() {
|
||||
assert!(EthereumHardfork::from_str("not a hardfork").is_err());
|
||||
|
||||
@ -1,350 +0,0 @@
|
||||
use alloc::{boxed::Box, format, string::String, vec};
|
||||
use core::{
|
||||
any::Any,
|
||||
fmt::{self, Display, Formatter},
|
||||
str::FromStr,
|
||||
};
|
||||
|
||||
use alloy_chains::Chain;
|
||||
use alloy_primitives::U256;
|
||||
#[cfg(feature = "serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{hardfork, ChainHardforks, EthereumHardfork, ForkCondition, Hardfork};
|
||||
|
||||
hardfork!(
|
||||
/// The name of an optimism hardfork.
|
||||
///
|
||||
/// When building a list of hardforks for a chain, it's still expected to mix with
|
||||
/// [`EthereumHardfork`].
|
||||
OptimismHardfork {
|
||||
/// Bedrock: <https://blog.oplabs.co/introducing-optimism-bedrock>.
|
||||
Bedrock,
|
||||
/// Regolith: <https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/superchain-upgrades.md#regolith>.
|
||||
Regolith,
|
||||
/// <https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/superchain-upgrades.md#canyon>.
|
||||
Canyon,
|
||||
/// Ecotone: <https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/superchain-upgrades.md#ecotone>.
|
||||
Ecotone,
|
||||
/// Fjord: <https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/superchain-upgrades.md#fjord>
|
||||
Fjord,
|
||||
/// Granite: <https://github.com/ethereum-optimism/specs/blob/main/specs/protocol/superchain-upgrades.md#granite>
|
||||
Granite,
|
||||
}
|
||||
);
|
||||
|
||||
impl OptimismHardfork {
|
||||
/// Retrieves the activation block for the specified hardfork on the given chain.
|
||||
pub fn activation_block<H: Hardfork>(self, fork: H, chain: Chain) -> Option<u64> {
|
||||
if chain == Chain::base_sepolia() {
|
||||
return Self::base_sepolia_activation_block(fork)
|
||||
}
|
||||
if chain == Chain::base_mainnet() {
|
||||
return Self::base_mainnet_activation_block(fork)
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
/// Retrieves the activation timestamp for the specified hardfork on the given chain.
|
||||
pub fn activation_timestamp<H: Hardfork>(self, fork: H, chain: Chain) -> Option<u64> {
|
||||
if chain == Chain::base_sepolia() {
|
||||
return Self::base_sepolia_activation_timestamp(fork)
|
||||
}
|
||||
if chain == Chain::base_mainnet() {
|
||||
return Self::base_mainnet_activation_timestamp(fork)
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
/// Retrieves the activation block for the specified hardfork on the Base Sepolia testnet.
|
||||
pub fn base_sepolia_activation_block<H: Hardfork>(fork: H) -> Option<u64> {
|
||||
match_hardfork(
|
||||
fork,
|
||||
|fork| match fork {
|
||||
EthereumHardfork::Frontier |
|
||||
EthereumHardfork::Homestead |
|
||||
EthereumHardfork::Dao |
|
||||
EthereumHardfork::Tangerine |
|
||||
EthereumHardfork::SpuriousDragon |
|
||||
EthereumHardfork::Byzantium |
|
||||
EthereumHardfork::Constantinople |
|
||||
EthereumHardfork::Petersburg |
|
||||
EthereumHardfork::Istanbul |
|
||||
EthereumHardfork::MuirGlacier |
|
||||
EthereumHardfork::Berlin |
|
||||
EthereumHardfork::London |
|
||||
EthereumHardfork::ArrowGlacier |
|
||||
EthereumHardfork::GrayGlacier |
|
||||
EthereumHardfork::Paris |
|
||||
EthereumHardfork::Shanghai => Some(2106456),
|
||||
EthereumHardfork::Cancun => Some(6383256),
|
||||
_ => None,
|
||||
},
|
||||
|fork| match fork {
|
||||
Self::Bedrock | Self::Regolith => Some(0),
|
||||
Self::Canyon => Some(2106456),
|
||||
Self::Ecotone => Some(6383256),
|
||||
Self::Fjord => Some(10615056),
|
||||
_ => None,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// Retrieves the activation block for the specified hardfork on the Base mainnet.
|
||||
pub fn base_mainnet_activation_block<H: Hardfork>(fork: H) -> Option<u64> {
|
||||
match_hardfork(
|
||||
fork,
|
||||
|fork| match fork {
|
||||
EthereumHardfork::Frontier |
|
||||
EthereumHardfork::Homestead |
|
||||
EthereumHardfork::Dao |
|
||||
EthereumHardfork::Tangerine |
|
||||
EthereumHardfork::SpuriousDragon |
|
||||
EthereumHardfork::Byzantium |
|
||||
EthereumHardfork::Constantinople |
|
||||
EthereumHardfork::Petersburg |
|
||||
EthereumHardfork::Istanbul |
|
||||
EthereumHardfork::MuirGlacier |
|
||||
EthereumHardfork::Berlin |
|
||||
EthereumHardfork::London |
|
||||
EthereumHardfork::ArrowGlacier |
|
||||
EthereumHardfork::GrayGlacier |
|
||||
EthereumHardfork::Paris |
|
||||
EthereumHardfork::Shanghai => Some(9101527),
|
||||
EthereumHardfork::Cancun => Some(11188936),
|
||||
_ => None,
|
||||
},
|
||||
|fork| match fork {
|
||||
Self::Bedrock | Self::Regolith => Some(0),
|
||||
Self::Canyon => Some(9101527),
|
||||
Self::Ecotone => Some(11188936),
|
||||
_ => None,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// Retrieves the activation timestamp for the specified hardfork on the Base Sepolia testnet.
|
||||
pub fn base_sepolia_activation_timestamp<H: Hardfork>(fork: H) -> Option<u64> {
|
||||
match_hardfork(
|
||||
fork,
|
||||
|fork| match fork {
|
||||
EthereumHardfork::Frontier |
|
||||
EthereumHardfork::Homestead |
|
||||
EthereumHardfork::Dao |
|
||||
EthereumHardfork::Tangerine |
|
||||
EthereumHardfork::SpuriousDragon |
|
||||
EthereumHardfork::Byzantium |
|
||||
EthereumHardfork::Constantinople |
|
||||
EthereumHardfork::Petersburg |
|
||||
EthereumHardfork::Istanbul |
|
||||
EthereumHardfork::MuirGlacier |
|
||||
EthereumHardfork::Berlin |
|
||||
EthereumHardfork::London |
|
||||
EthereumHardfork::ArrowGlacier |
|
||||
EthereumHardfork::GrayGlacier |
|
||||
EthereumHardfork::Paris |
|
||||
EthereumHardfork::Shanghai => Some(1699981200),
|
||||
EthereumHardfork::Cancun => Some(1708534800),
|
||||
_ => None,
|
||||
},
|
||||
|fork| match fork {
|
||||
Self::Bedrock | Self::Regolith => Some(1695768288),
|
||||
Self::Canyon => Some(1699981200),
|
||||
Self::Ecotone => Some(1708534800),
|
||||
Self::Fjord => Some(1716998400),
|
||||
Self::Granite => Some(1723478400),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// Retrieves the activation timestamp for the specified hardfork on the Base mainnet.
|
||||
pub fn base_mainnet_activation_timestamp<H: Hardfork>(fork: H) -> Option<u64> {
|
||||
match_hardfork(
|
||||
fork,
|
||||
|fork| match fork {
|
||||
EthereumHardfork::Frontier |
|
||||
EthereumHardfork::Homestead |
|
||||
EthereumHardfork::Dao |
|
||||
EthereumHardfork::Tangerine |
|
||||
EthereumHardfork::SpuriousDragon |
|
||||
EthereumHardfork::Byzantium |
|
||||
EthereumHardfork::Constantinople |
|
||||
EthereumHardfork::Petersburg |
|
||||
EthereumHardfork::Istanbul |
|
||||
EthereumHardfork::MuirGlacier |
|
||||
EthereumHardfork::Berlin |
|
||||
EthereumHardfork::London |
|
||||
EthereumHardfork::ArrowGlacier |
|
||||
EthereumHardfork::GrayGlacier |
|
||||
EthereumHardfork::Paris |
|
||||
EthereumHardfork::Shanghai => Some(1704992401),
|
||||
EthereumHardfork::Cancun => Some(1710374401),
|
||||
_ => None,
|
||||
},
|
||||
|fork| match fork {
|
||||
Self::Bedrock | Self::Regolith => Some(1686789347),
|
||||
Self::Canyon => Some(1704992401),
|
||||
Self::Ecotone => Some(1710374401),
|
||||
Self::Fjord => Some(1720627201),
|
||||
Self::Granite => Some(1726070401),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// Optimism mainnet list of hardforks.
|
||||
pub fn op_mainnet() -> ChainHardforks {
|
||||
ChainHardforks::new(vec![
|
||||
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(3950000)),
|
||||
(EthereumHardfork::London.boxed(), ForkCondition::Block(105235063)),
|
||||
(EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(105235063)),
|
||||
(EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(105235063)),
|
||||
(
|
||||
EthereumHardfork::Paris.boxed(),
|
||||
ForkCondition::TTD { fork_block: Some(105235063), total_difficulty: U256::ZERO },
|
||||
),
|
||||
(Self::Bedrock.boxed(), ForkCondition::Block(105235063)),
|
||||
(Self::Regolith.boxed(), ForkCondition::Timestamp(0)),
|
||||
(EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1704992401)),
|
||||
(Self::Canyon.boxed(), ForkCondition::Timestamp(1704992401)),
|
||||
(EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1710374401)),
|
||||
(Self::Ecotone.boxed(), ForkCondition::Timestamp(1710374401)),
|
||||
(Self::Fjord.boxed(), ForkCondition::Timestamp(1720627201)),
|
||||
(Self::Granite.boxed(), ForkCondition::Timestamp(1726070401)),
|
||||
])
|
||||
}
|
||||
|
||||
/// Optimism sepolia list of hardforks.
|
||||
pub fn op_sepolia() -> ChainHardforks {
|
||||
ChainHardforks::new(vec![
|
||||
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(
|
||||
EthereumHardfork::Paris.boxed(),
|
||||
ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::ZERO },
|
||||
),
|
||||
(Self::Bedrock.boxed(), ForkCondition::Block(0)),
|
||||
(Self::Regolith.boxed(), ForkCondition::Timestamp(0)),
|
||||
(EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1699981200)),
|
||||
(Self::Canyon.boxed(), ForkCondition::Timestamp(1699981200)),
|
||||
(EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1708534800)),
|
||||
(Self::Ecotone.boxed(), ForkCondition::Timestamp(1708534800)),
|
||||
(Self::Fjord.boxed(), ForkCondition::Timestamp(1716998400)),
|
||||
(Self::Granite.boxed(), ForkCondition::Timestamp(1723478400)),
|
||||
])
|
||||
}
|
||||
|
||||
/// Base sepolia list of hardforks.
|
||||
pub fn base_sepolia() -> ChainHardforks {
|
||||
ChainHardforks::new(vec![
|
||||
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(
|
||||
EthereumHardfork::Paris.boxed(),
|
||||
ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::ZERO },
|
||||
),
|
||||
(Self::Bedrock.boxed(), ForkCondition::Block(0)),
|
||||
(Self::Regolith.boxed(), ForkCondition::Timestamp(0)),
|
||||
(EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1699981200)),
|
||||
(Self::Canyon.boxed(), ForkCondition::Timestamp(1699981200)),
|
||||
(EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1708534800)),
|
||||
(Self::Ecotone.boxed(), ForkCondition::Timestamp(1708534800)),
|
||||
(Self::Fjord.boxed(), ForkCondition::Timestamp(1716998400)),
|
||||
(Self::Granite.boxed(), ForkCondition::Timestamp(1723478400)),
|
||||
])
|
||||
}
|
||||
|
||||
/// Base mainnet list of hardforks.
|
||||
pub fn base_mainnet() -> ChainHardforks {
|
||||
ChainHardforks::new(vec![
|
||||
(EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::MuirGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::London.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::ArrowGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(EthereumHardfork::GrayGlacier.boxed(), ForkCondition::Block(0)),
|
||||
(
|
||||
EthereumHardfork::Paris.boxed(),
|
||||
ForkCondition::TTD { fork_block: Some(0), total_difficulty: U256::ZERO },
|
||||
),
|
||||
(Self::Bedrock.boxed(), ForkCondition::Block(0)),
|
||||
(Self::Regolith.boxed(), ForkCondition::Timestamp(0)),
|
||||
(EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(1704992401)),
|
||||
(Self::Canyon.boxed(), ForkCondition::Timestamp(1704992401)),
|
||||
(EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(1710374401)),
|
||||
(Self::Ecotone.boxed(), ForkCondition::Timestamp(1710374401)),
|
||||
(Self::Fjord.boxed(), ForkCondition::Timestamp(1720627201)),
|
||||
(Self::Granite.boxed(), ForkCondition::Timestamp(1726070401)),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
/// Match helper method since it's not possible to match on `dyn Hardfork`
|
||||
fn match_hardfork<H, HF, OHF>(fork: H, hardfork_fn: HF, optimism_hardfork_fn: OHF) -> Option<u64>
|
||||
where
|
||||
H: Hardfork,
|
||||
HF: Fn(&EthereumHardfork) -> Option<u64>,
|
||||
OHF: Fn(&OptimismHardfork) -> Option<u64>,
|
||||
{
|
||||
let fork: &dyn Any = ⋔
|
||||
if let Some(fork) = fork.downcast_ref::<EthereumHardfork>() {
|
||||
return hardfork_fn(fork)
|
||||
}
|
||||
fork.downcast_ref::<OptimismHardfork>().and_then(optimism_hardfork_fn)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_match_hardfork() {
|
||||
assert_eq!(
|
||||
OptimismHardfork::base_mainnet_activation_block(EthereumHardfork::Cancun),
|
||||
Some(11188936)
|
||||
);
|
||||
assert_eq!(
|
||||
OptimismHardfork::base_mainnet_activation_block(OptimismHardfork::Canyon),
|
||||
Some(9101527)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -2,10 +2,6 @@
|
||||
mod ethereum;
|
||||
pub use ethereum::EthereumHardforks;
|
||||
|
||||
/// Optimism helper methods
|
||||
mod optimism;
|
||||
pub use optimism::OptimismHardforks;
|
||||
|
||||
use crate::{ForkCondition, Hardfork};
|
||||
#[cfg(feature = "std")]
|
||||
use rustc_hash::FxHashMap;
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
use super::Hardforks;
|
||||
use crate::OptimismHardfork;
|
||||
|
||||
/// Extends [`crate::EthereumHardforks`] with optimism helper methods.
|
||||
pub trait OptimismHardforks: Hardforks {
|
||||
/// Convenience method to check if [`OptimismHardfork::Bedrock`] is active at a given block
|
||||
/// number.
|
||||
fn is_bedrock_active_at_block(&self, block_number: u64) -> bool {
|
||||
self.fork(OptimismHardfork::Bedrock).active_at_block(block_number)
|
||||
}
|
||||
|
||||
/// Returns `true` if [`Ecotone`](OptimismHardfork::Ecotone) is active at given block timestamp.
|
||||
fn is_ecotone_active_at_timestamp(&self, timestamp: u64) -> bool {
|
||||
self.fork(OptimismHardfork::Ecotone).active_at_timestamp(timestamp)
|
||||
}
|
||||
|
||||
/// Returns `true` if [`Ecotone`](OptimismHardfork::Ecotone) is active at given block timestamp.
|
||||
fn is_fjord_active_at_timestamp(&self, timestamp: u64) -> bool {
|
||||
self.fork(OptimismHardfork::Ecotone).active_at_timestamp(timestamp)
|
||||
}
|
||||
|
||||
/// Returns `true` if [`Granite`](OptimismHardfork::Granite) is active at given block timestamp.
|
||||
fn is_granite_active_at_timestamp(&self, timestamp: u64) -> bool {
|
||||
self.fork(OptimismHardfork::Granite).active_at_timestamp(timestamp)
|
||||
}
|
||||
}
|
||||
@ -27,7 +27,7 @@ mod head;
|
||||
pub use forkid::{
|
||||
EnrForkIdEntry, ForkFilter, ForkFilterKey, ForkHash, ForkId, ForkTransition, ValidationError,
|
||||
};
|
||||
pub use hardfork::{EthereumHardfork, Hardfork, OptimismHardfork, DEV_HARDFORKS};
|
||||
pub use hardfork::{EthereumHardfork, Hardfork, DEV_HARDFORKS};
|
||||
pub use head::Head;
|
||||
|
||||
pub use display::DisplayHardforks;
|
||||
|
||||
Reference in New Issue
Block a user