diff --git a/Cargo.lock b/Cargo.lock index ad79469956..a57445fb06 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3802,7 +3802,7 @@ dependencies = [ [[package]] name = "revm-context" -version = "9.1.0" +version = "9.1.1" dependencies = [ "bitvec", "cfg-if", diff --git a/crates/context/Cargo.toml b/crates/context/Cargo.toml index aec9972079..0aaf2df564 100644 --- a/crates/context/Cargo.toml +++ b/crates/context/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "revm-context" description = "Revm context crates" -version = "9.1.0" +version = "9.1.1" authors.workspace = true edition.workspace = true keywords.workspace = true @@ -79,3 +79,4 @@ optional_priority_fee_check = [] optional_fee_charge = [] enable_eip7702 = [] enable_eip7623 = [] +enable_eip7939 = [] diff --git a/crates/context/interface/src/cfg.rs b/crates/context/interface/src/cfg.rs index 2466e4e5d3..7b0ec5de5f 100644 --- a/crates/context/interface/src/cfg.rs +++ b/crates/context/interface/src/cfg.rs @@ -67,6 +67,9 @@ pub trait Cfg { /// Returns whether the EIP-7623 is enabled. fn is_eip7623_enabled(&self) -> bool; + + /// Returns whether the EIP-7939 is enabled. + fn is_eip7939_enabled(&self) -> bool; } /// What bytecode analysis to perform diff --git a/crates/context/src/cfg.rs b/crates/context/src/cfg.rs index 7ee337ba55..05cb380716 100644 --- a/crates/context/src/cfg.rs +++ b/crates/context/src/cfg.rs @@ -120,6 +120,12 @@ pub struct CfgEnv { /// By default, it is set to `false`. #[cfg(feature = "enable_eip7623")] pub enable_eip7623: bool, + + /// Enables EIP-7939, regardless of the current spec. + /// + /// By default, it is set to `false`. + #[cfg(feature = "enable_eip7939")] + pub enable_eip7939: bool, } impl CfgEnv { @@ -181,6 +187,8 @@ impl CfgEnv { enable_eip7702: false, #[cfg(feature = "enable_eip7623")] enable_eip7623: false, + #[cfg(feature = "enable_eip7939")] + enable_eip7939: false, } } @@ -234,6 +242,8 @@ impl CfgEnv { enable_eip7702: self.enable_eip7702, #[cfg(feature = "enable_eip7623")] enable_eip7623: self.enable_eip7623, + #[cfg(feature = "enable_eip7939")] + enable_eip7939: self.enable_eip7939, } } @@ -280,6 +290,13 @@ impl CfgEnv { self.enable_eip7623 = true; self } + + /// Enables EIP-7939. + #[cfg(feature = "enable_eip7939")] + pub fn enable_eip_7939(mut self) -> CfgEnv { + self.enable_eip7939 = true; + self + } } impl + Copy> Cfg for CfgEnv { @@ -423,6 +440,16 @@ impl + Copy> Cfg for CfgEnv { } } } + + fn is_eip7939_enabled(&self) -> bool { + cfg_if::cfg_if! { + if #[cfg(feature = "enable_eip7939")] { + self.enable_eip7623 || (self.spec.into() >= SpecId::OSAKA) + } else { + self.spec.into() >= SpecId::OSAKA + } + } + } } impl Default for CfgEnv { diff --git a/crates/revm/Cargo.toml b/crates/revm/Cargo.toml index 9cf1149111..56738e378b 100644 --- a/crates/revm/Cargo.toml +++ b/crates/revm/Cargo.toml @@ -94,6 +94,7 @@ optional_eip3607 = ["context/optional_eip3607"] optional_no_base_fee = ["context/optional_no_base_fee"] enable_eip7702 = ["context/enable_eip7702"] enable_eip7623 = ["context/enable_eip7623"] +enable_eip7939 = ["context/enable_eip7939"] # Precompiles features: Please look at the comments in `precompile` crate for more information.