From 97b53a1eaa34eeaa95d58e150d1f02ccf141125b Mon Sep 17 00:00:00 2001 From: Mablr <59505383+mablr@users.noreply.github.com> Date: Fri, 31 Oct 2025 08:49:39 +0100 Subject: [PATCH 1/4] feat(hardforks): add Osaka/BPO mainnet timestamps --- crates/hardforks/src/ethereum/mainnet.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/hardforks/src/ethereum/mainnet.rs b/crates/hardforks/src/ethereum/mainnet.rs index 77a7a21..6987b5e 100644 --- a/crates/hardforks/src/ethereum/mainnet.rs +++ b/crates/hardforks/src/ethereum/mainnet.rs @@ -82,3 +82,9 @@ pub const MAINNET_SHANGHAI_TIMESTAMP: u64 = 1_681_338_455; pub const MAINNET_CANCUN_TIMESTAMP: u64 = 1_710_338_135; /// Prague hard fork activation timestamp is 1746612311. pub const MAINNET_PRAGUE_TIMESTAMP: u64 = 1_746_612_311; +/// Osaka hard fork activation timestamp is 1764798551. +pub const MAINNET_OSAKA_TIMESTAMP: u64 = 1_764_798_551; +/// BPO1 hardfork activation timestamp is 1765290071. +pub const MAINNET_BPO1_TIMESTAMP: u64 = 1_765_290_071; +/// BPO2 hardfork activation timestamp is 1767747671. +pub const MAINNET_BPO2_TIMESTAMP: u64 = 1_767_747_671; From e64733f3a8a83f187ab00241126042f40cece3d1 Mon Sep 17 00:00:00 2001 From: Mablr <59505383+mablr@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:00:07 +0100 Subject: [PATCH 2/4] feat(hardforks): update `mainnet_activation_timestamp` --- crates/hardforks/src/hardfork/ethereum.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/hardforks/src/hardfork/ethereum.rs b/crates/hardforks/src/hardfork/ethereum.rs index df198a8..1fb4989 100644 --- a/crates/hardforks/src/hardfork/ethereum.rs +++ b/crates/hardforks/src/hardfork/ethereum.rs @@ -276,7 +276,9 @@ impl EthereumHardfork { Self::Shanghai => Some(MAINNET_SHANGHAI_TIMESTAMP), Self::Cancun => Some(MAINNET_CANCUN_TIMESTAMP), Self::Prague => Some(MAINNET_PRAGUE_TIMESTAMP), - // upcoming hardforks + Self::Osaka => Some(MAINNET_OSAKA_TIMESTAMP), + Self::Bpo1 => Some(MAINNET_BPO1_TIMESTAMP), + Self::Bpo2 => Some(MAINNET_BPO2_TIMESTAMP), _ => None, } } From 8db2d756e30e2e4a7234aebd218943b23867fa16 Mon Sep 17 00:00:00 2001 From: Mablr <59505383+mablr@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:01:12 +0100 Subject: [PATCH 3/4] feat(hardforks): expand mainnet hardfork list to include Osaka, BPO1, and BPO2 --- crates/hardforks/src/hardfork/ethereum.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/hardforks/src/hardfork/ethereum.rs b/crates/hardforks/src/hardfork/ethereum.rs index 1fb4989..af0c6fe 100644 --- a/crates/hardforks/src/hardfork/ethereum.rs +++ b/crates/hardforks/src/hardfork/ethereum.rs @@ -419,7 +419,7 @@ impl EthereumHardfork { } /// Ethereum mainnet list of hardforks. - pub const fn mainnet() -> [(Self, ForkCondition); 18] { + pub const fn mainnet() -> [(Self, ForkCondition); 21] { [ (Self::Frontier, ForkCondition::Block(MAINNET_FRONTIER_BLOCK)), (Self::Homestead, ForkCondition::Block(MAINNET_HOMESTEAD_BLOCK)), @@ -446,6 +446,9 @@ impl EthereumHardfork { (Self::Shanghai, ForkCondition::Timestamp(MAINNET_SHANGHAI_TIMESTAMP)), (Self::Cancun, ForkCondition::Timestamp(MAINNET_CANCUN_TIMESTAMP)), (Self::Prague, ForkCondition::Timestamp(MAINNET_PRAGUE_TIMESTAMP)), + (Self::Osaka, ForkCondition::Timestamp(MAINNET_OSAKA_TIMESTAMP)), + (Self::Bpo1, ForkCondition::Timestamp(MAINNET_BPO1_TIMESTAMP)), + (Self::Bpo2, ForkCondition::Timestamp(MAINNET_BPO2_TIMESTAMP)), ] } From 4467c70c0c96ec8d774995ce9bdeac9dea506823 Mon Sep 17 00:00:00 2001 From: Mablr <59505383+mablr@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:09:34 +0100 Subject: [PATCH 4/4] feat(hardforks): update `from_chain_and_timestamp` --- crates/hardforks/src/hardfork/ethereum.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/hardforks/src/hardfork/ethereum.rs b/crates/hardforks/src/hardfork/ethereum.rs index af0c6fe..a252cc5 100644 --- a/crates/hardforks/src/hardfork/ethereum.rs +++ b/crates/hardforks/src/hardfork/ethereum.rs @@ -625,7 +625,8 @@ impl EthereumHardfork { _i if timestamp < MAINNET_SHANGHAI_TIMESTAMP => Self::Paris, _i if timestamp < MAINNET_CANCUN_TIMESTAMP => Self::Shanghai, _i if timestamp < MAINNET_PRAGUE_TIMESTAMP => Self::Cancun, - _ => Self::Prague, + _i if timestamp < MAINNET_OSAKA_TIMESTAMP => Self::Prague, + _ => Self::Osaka, }), NamedChain::Sepolia => Some(match timestamp { _i if timestamp < SEPOLIA_PARIS_TIMESTAMP => Self::London,