From b08371b5653286cc0cac1dd7b3c3afad24a77a70 Mon Sep 17 00:00:00 2001 From: Thomas Coratger <60488569+tcoratger@users.noreply.github.com> Date: Sat, 13 Jan 2024 11:26:32 +0100 Subject: [PATCH] feat: add `activation_block` method for Ethereum hardforks (#5723) Co-authored-by: Matthias Seitz --- Cargo.lock | 1 + crates/ethereum-forks/Cargo.toml | 1 + crates/ethereum-forks/src/hardfork.rs | 40 ++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index cafcd45761..a48b057233 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6114,6 +6114,7 @@ dependencies = [ name = "reth-ethereum-forks" version = "0.1.0-alpha.14" dependencies = [ + "alloy-chains", "alloy-primitives", "alloy-rlp", "arbitrary", diff --git a/crates/ethereum-forks/Cargo.toml b/crates/ethereum-forks/Cargo.toml index 99ecf2ef16..b0f2d3b97d 100644 --- a/crates/ethereum-forks/Cargo.toml +++ b/crates/ethereum-forks/Cargo.toml @@ -16,6 +16,7 @@ workspace = true reth-codecs.workspace = true # ethereum +alloy-chains.workspace = true alloy-primitives = { workspace = true, features = ["rand", "rlp"] } alloy-rlp = { workspace = true, features = ["arrayvec"] } diff --git a/crates/ethereum-forks/src/hardfork.rs b/crates/ethereum-forks/src/hardfork.rs index 38a54811b3..6667387f9b 100644 --- a/crates/ethereum-forks/src/hardfork.rs +++ b/crates/ethereum-forks/src/hardfork.rs @@ -1,5 +1,5 @@ +use alloy_chains::Chain; use serde::{Deserialize, Serialize}; - use std::{fmt::Display, str::FromStr}; /// The name of an Ethereum hardfork. @@ -51,6 +51,44 @@ pub enum Hardfork { Cancun, } +impl Hardfork { + /// Retrieves the activation block for the specified hardfork on the Ethereum mainnet. + pub fn mainnet_activation_block(&self, chain: Chain) -> Option { + if chain != Chain::mainnet() { + return None; + } + match self { + Hardfork::Frontier => Some(0), + Hardfork::Homestead => Some(1150000), + Hardfork::Dao => Some(1920000), + Hardfork::Tangerine => Some(2463000), + Hardfork::SpuriousDragon => Some(2675000), + Hardfork::Byzantium => Some(4370000), + Hardfork::Constantinople => Some(7280000), + Hardfork::Petersburg => Some(7280000), + Hardfork::Istanbul => Some(9069000), + Hardfork::MuirGlacier => Some(9200000), + Hardfork::Berlin => Some(12244000), + Hardfork::London => Some(12965000), + Hardfork::ArrowGlacier => Some(13773000), + Hardfork::GrayGlacier => Some(15050000), + Hardfork::Paris => Some(15537394), + Hardfork::Shanghai => Some(17034870), + + // upcoming hardforks + Hardfork::Cancun => None, + + // optimism hardforks + #[cfg(feature = "optimism")] + Hardfork::Bedrock => None, + #[cfg(feature = "optimism")] + Hardfork::Regolith => None, + #[cfg(feature = "optimism")] + Hardfork::Canyon => None, + } + } +} + impl FromStr for Hardfork { type Err = String;