From 61dfe8513a68b118283a8989c5a846a017629d31 Mon Sep 17 00:00:00 2001 From: frisitano Date: Thu, 22 Jan 2026 12:41:00 +0000 Subject: [PATCH] l1 data fee buffer --- crates/context/Cargo.toml | 1 + crates/context/interface/src/cfg.rs | 4 ++++ crates/context/src/cfg.rs | 26 ++++++++++++++++++++++++++ crates/revm/Cargo.toml | 1 + 4 files changed, 32 insertions(+) diff --git a/crates/context/Cargo.toml b/crates/context/Cargo.toml index e69211aee5..4838714b4e 100644 --- a/crates/context/Cargo.toml +++ b/crates/context/Cargo.toml @@ -81,3 +81,4 @@ optional_priority_fee_check = [] optional_fee_charge = [] enable_eip7702 = [] enable_eip7623 = [] +require_l1_data_fee_buffer = [] diff --git a/crates/context/interface/src/cfg.rs b/crates/context/interface/src/cfg.rs index ee0b4a9fd6..a0c255be9c 100644 --- a/crates/context/interface/src/cfg.rs +++ b/crates/context/interface/src/cfg.rs @@ -70,6 +70,10 @@ pub trait Cfg { /// Returns whether the EIP-7623 is enabled. fn is_eip7623_enabled(&self) -> bool; + + /// Returns whether the L1 data fee buffer check is required. + /// When enabled, validates balance >= L2_fee + 2 * L1_fee but only charges L2_fee + L1_fee. + fn is_l1_data_fee_buffer_required(&self) -> bool; } /// What bytecode analysis to perform diff --git a/crates/context/src/cfg.rs b/crates/context/src/cfg.rs index 458c384ac4..05656b0ca2 100644 --- a/crates/context/src/cfg.rs +++ b/crates/context/src/cfg.rs @@ -128,6 +128,11 @@ pub struct CfgEnv { /// By default, it is set to `false`. #[cfg(feature = "enable_eip7623")] pub enable_eip7623: bool, + /// Requires L1 data fee buffer in balance check. + /// When enabled, validates balance >= L2_fee + 2 * L1_fee but only charges L2_fee + L1_fee. + /// By default, it is set to `false`. + #[cfg(feature = "require_l1_data_fee_buffer")] + pub require_l1_data_fee_buffer: bool, } impl CfgEnv { @@ -191,6 +196,8 @@ impl CfgEnv { enable_eip7702: false, #[cfg(feature = "enable_eip7623")] enable_eip7623: false, + #[cfg(feature = "require_l1_data_fee_buffer")] + require_l1_data_fee_buffer: false, } } @@ -246,6 +253,8 @@ impl CfgEnv { enable_eip7702: self.enable_eip7702, #[cfg(feature = "enable_eip7623")] enable_eip7623: self.enable_eip7623, + #[cfg(feature = "require_l1_data_fee_buffer")] + require_l1_data_fee_buffer: self.require_l1_data_fee_buffer, } } @@ -299,6 +308,13 @@ impl CfgEnv { self.enable_eip7623 = true; self } + + /// Sets the require L1 data fee buffer flag. + #[cfg(feature = "require_l1_data_fee_buffer")] + pub fn with_require_l1_data_fee_buffer(mut self, require: bool) -> Self { + self.require_l1_data_fee_buffer = require; + self + } } impl + Copy> Cfg for CfgEnv { @@ -452,6 +468,16 @@ impl + Copy> Cfg for CfgEnv { } } } + + fn is_l1_data_fee_buffer_required(&self) -> bool { + cfg_if::cfg_if! { + if #[cfg(feature = "require_l1_data_fee_buffer")] { + self.require_l1_data_fee_buffer + } else { + false + } + } + } } impl Default for CfgEnv { diff --git a/crates/revm/Cargo.toml b/crates/revm/Cargo.toml index 1bfa437d07..80d67d8b21 100644 --- a/crates/revm/Cargo.toml +++ b/crates/revm/Cargo.toml @@ -97,6 +97,7 @@ optional_no_base_fee = ["context/optional_no_base_fee"] optional_fee_charge = ["context/optional_fee_charge"] enable_eip7702 = ["context/enable_eip7702"] enable_eip7623 = ["context/enable_eip7623"] +require_l1_data_fee_buffer = ["context/require_l1_data_fee_buffer"] # Precompiles features: Please look at the comments in `precompile` crate for more information.