Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
940db1a
chore: bring glamsterdam-devnet-5 work onto latest main (squashed)
edg-l Jun 17, 2026
22dc9bf
fix(l1): bump BAL fixtures to v7.3.x and fix self-destruct-in-initcod…
edg-l Jun 17, 2026
d5fa2ce
feat(l1): EIP-8282 builder execution requests EL wiring
edg-l Jun 17, 2026
db7213b
fix(l1): EIP-7997 deterministic factory predeploy nonce to 1
edg-l Jun 17, 2026
66907c5
chore(l1): pin Amsterdam fixtures to glamsterdam-devnet@v6.0.0
edg-l Jun 17, 2026
7140f2c
feat(l1): EIP-8038 + EIP-2780 Amsterdam gas repricing
edg-l Jun 17, 2026
808b13f
fix(l1): use real EIP-8282 builder predeploy addresses from sys-asm#43
edg-l Jun 18, 2026
dead5fc
feat(l1): EIP-8037 source-based state-gas refunds
edg-l Jun 18, 2026
7682525
fix(l1): EIP-8037 refund account creation for existing create targets
edg-l Jun 18, 2026
d9328ba
chore(l1): EIP-8037 #3002 review nits + drop stale EIP-2780/8038 PREL…
edg-l Jun 18, 2026
64d36ad
Merge remote-tracking branch 'origin/main' into glamsterdam-devnet-6
edg-l Jun 19, 2026
5621171
fix(levm): EIP-8037 refill state gas for invalid EIP-7702 authorizations
edg-l Jun 19, 2026
3ce3a6c
fix(levm): un-gate precompile state-gas assert binding for release bu…
edg-l Jun 19, 2026
c8d6249
chore: replace stale bal-devnet kurtosis configs with glamsterdam-dev…
edg-l Jun 19, 2026
a1859cf
fix(genesis): set EIP-7997 Arachnid factory nonce to 1 in l1/load-tes…
edg-l Jun 19, 2026
4a1e305
fix(p2p): announce detected LAN IP instead of 0.0.0.0 for private addrs
edg-l Jun 19, 2026
b365110
fix(levm): correct Amsterdam gas accounting for calldata floor, EIP-7…
edg-l Jun 20, 2026
95ab834
fix(levm): EIP-8038 SSTORE charges cold access XOR warm, not additive
edg-l Jun 20, 2026
e40b8bc
fix(levm): EIP-8038 EIP-7702 auth charges ACCOUNT_WRITE + 7816, refun…
edg-l Jun 20, 2026
021fcdd
fix(levm): refund EIP-8037 new-account state gas on failed value-CALL
edg-l Jun 20, 2026
538db3f
fix(levm): EIP-2780 exempt precompile recipients from top-level new-a…
edg-l Jun 20, 2026
11a100a
fix(levm): refund EIP-8037 new-account state gas when a value-CALL ch…
edg-l Jun 20, 2026
cce6a22
fix(levm): EIP-8038 SSTORE restore-to-original refunds full STORAGE_W…
edg-l Jun 20, 2026
51828d4
fix(levm): EIP-7702 multi-auth AUTH_BASE refill matches EELS delegate…
edg-l Jun 20, 2026
ec0130c
fix(levm): defer EIP-2780 top-frame new-account state charge to execu…
edg-l Jun 20, 2026
fcf2902
fix(levm): defer EIP-2780 top-frame 7702-delegation regular charge to…
edg-l Jun 20, 2026
70a7afa
fix(common): reject EIP-7928 BAL storage_changes entry with empty cha…
edg-l Jun 20, 2026
50e33ee
style(levm): avoid bare addition in auth_base_refills (clippy arithme…
edg-l Jun 20, 2026
6385f8c
refactor(levm): extract refund_new_account_state_gas helper
edg-l Jun 20, 2026
ec79584
fix(levm): preserve balance in EIP-8246 selfdestruct block access list
ilitteri Jun 22, 2026
6517a57
fix(l1): run and correctly grade Amsterdam state ef-tests for devnet-6
ilitteri Jun 22, 2026
30bb2b7
feat(l1): add EIP-8282 builder predeploys to l1-bal genesis
ilitteri Jun 22, 2026
45f03eb
chore(ci): pin hive Amsterdam eels_commit to glamsterdam-devnet-6 v6.0.0
ilitteri Jun 22, 2026
41746f8
fix(levm): use full tx.gas in EIP-8037 2D gas-allowance inclusion check
ilitteri Jun 23, 2026
116b4f7
chore(ci): bump EEST Amsterdam fixtures to glamsterdam-devnet v6.0.1
ilitteri Jun 24, 2026
04e74c3
fix(l1): align with v6.1.0 of the spec (#6909)
iovoid Jun 25, 2026
b1265f3
fix(rpc): use block gas limit for the Amsterdam eth_estimateGas ceiling
ilitteri Jun 25, 2026
9488bbf
fix(levm): roll back top-frame NEW_ACCOUNT state gas on a precompile …
ilitteri Jun 25, 2026
e4d17d7
fix(l1): serve GetBlockHeaders by non-canonical hash so syncing peers…
ilitteri Jun 26, 2026
cb03408
test(l1): GetBlockHeaders serves a non-canonical block by hash
ilitteri Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/config/hive/amsterdam.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Amsterdam (BAL) hive test configuration
# Pinned to tests-bal@v7.3.2 (execution-specs `devnets/bal/7`)
fixtures: https://github.com/ethereum/execution-specs/releases/download/tests-bal%40v7.3.2/fixtures_bal.tar.gz
eels_commit: d28f7977069d1b71984ff88ed8040b671f6e6a77
# Pinned to tests-glamsterdam-devnet@v6.1.0 (execution-specs `devnets/glamsterdam/6`)
fixtures: https://github.com/ethereum/execution-specs/releases/download/tests-glamsterdam-devnet%40v6.1.0/fixtures_glamsterdam-devnet.tar.gz
eels_commit: 4bc0fc6a7b69639db396a301302352f8cd9fc5be
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@

- Short-circuit the `KECCAK256` opcode on zero-length input by returning the precomputed `keccak256("")` constant, skipping the permutation [#6775](https://github.com/lambdaclass/ethrex/pull/6775)

### 2026-05-28

- Batch account-state prefetch via rocksdb `multi_get_cf` on the flat key-value table [#6712](https://github.com/lambdaclass/ethrex/pull/6712)

### 2026-05-27

- Prefetch all BAL storage synchronously before execution [#6732](https://github.com/lambdaclass/ethrex/pull/6732)
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,12 @@ run-hive-eels-blobs: ## Run hive EELS Blobs tests
$(MAKE) run-hive-eels EELS_SIM=ethereum/eels/execute-blobs

AMSTERDAM_FIXTURES_URL ?= $(shell cat tooling/ef_tests/blockchain/.fixtures_url_amsterdam)
AMSTERDAM_FIXTURES_BRANCH ?= devnets/bal/7
AMSTERDAM_FIXTURES_BRANCH ?= devnets/glamsterdam/6
run-hive-eels-amsterdam: build-image setup-hive ## 🧪 Run hive EELS Amsterdam Engine tests
- cd hive && ./hive --client-file $(HIVE_CLIENT_FILE) --client ethrex --sim ethereum/eels/consume-engine --sim.limit ".*fork_Amsterdam.*" --sim.parallelism $(SIM_PARALLELISM) --sim.loglevel $(SIM_LOG_LEVEL) --sim.buildarg fixtures=$(AMSTERDAM_FIXTURES_URL) --sim.buildarg branch=$(AMSTERDAM_FIXTURES_BRANCH)

run-hive-eels-bal-quick: build-image setup-hive ## 🧪 Run hive EELS BAL quick tests for EIPs 7708,7778,7843,7928,7954,8024,8037
- cd hive && ./hive --client-file $(HIVE_CLIENT_FILE) --client ethrex --sim ethereum/eels/consume-engine --sim.limit ".*(8024|7708|7778|7843|7928|7954|8037).*" --sim.parallelism $(SIM_PARALLELISM) --sim.loglevel $(SIM_LOG_LEVEL) --sim.buildarg fixtures=$(AMSTERDAM_FIXTURES_URL) --sim.buildarg branch=$(AMSTERDAM_FIXTURES_BRANCH)
run-hive-eels-bal-quick: build-image setup-hive ## 🧪 Run hive EELS quick tests for the glam-6 EIPs
- cd hive && ./hive --client-file $(HIVE_CLIENT_FILE) --client ethrex --sim ethereum/eels/consume-engine --sim.limit ".*(8024|7708|7778|7843|7928|7954|8037|8038|2780|7997|7610|8246|8282).*" --sim.parallelism $(SIM_PARALLELISM) --sim.loglevel $(SIM_LOG_LEVEL) --sim.buildarg fixtures=$(AMSTERDAM_FIXTURES_URL) --sim.buildarg branch=$(AMSTERDAM_FIXTURES_BRANCH)

clean-hive-logs: ## 🧹 Clean Hive logs
rm -rf ./hive/workspace/logs
Expand Down
19 changes: 13 additions & 6 deletions cmd/ethrex/ethrex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use ethrex::{
initializers::{init_l1, init_tracing},
utils::{NodeConfigFile, get_client_version, is_memory_datadir, store_node_config_file},
};
use ethrex_p2p::{peer_table::PeerTable, types::NodeRecord};
use ethrex_p2p::{peer_table::PeerTable, types::SharedLocalNode};
use serde::Deserialize;
use std::{path::Path, time::Duration};
use tokio::signal::unix::{SignalKind, signal};
Expand Down Expand Up @@ -49,14 +49,21 @@ async fn server_shutdown(
datadir: &Path,
cancel_token: &CancellationToken,
peer_table: PeerTable,
local_node_record: NodeRecord,
shared_local_node: SharedLocalNode,
) {
info!("Server shut down started...");
cancel_token.cancel();
if !is_memory_datadir(datadir) {
let node_config_path = datadir.join("node_config.json");
info!("Storing config at {:?}...", node_config_path);
let node_config = NodeConfigFile::new(peer_table, local_node_record).await;
// Clone the current (possibly updated) record out and drop the guard.
let record = {
let guard = shared_local_node
.read()
.expect("shared_local_node poisoned");
guard.record.clone()
};
let node_config = NodeConfigFile::new(peer_table, record).await;
store_node_config_file(node_config, node_config_path);
tokio::time::sleep(Duration::from_secs(1)).await;
}
Expand Down Expand Up @@ -179,7 +186,7 @@ async fn main() -> eyre::Result<()> {
info!("ethrex version: {}", get_client_version());
tokio::spawn(periodically_check_version_update());

let (datadir, cancel_token, peer_table, local_node_record) =
let (datadir, cancel_token, peer_table, shared_local_node) =
init_l1(opts, Some(log_filter_handler)).await?;

let mut signal_terminate = signal(SignalKind::terminate())?;
Expand All @@ -188,10 +195,10 @@ async fn main() -> eyre::Result<()> {

tokio::select! {
_ = tokio::signal::ctrl_c() => {
server_shutdown(&datadir, &cancel_token, peer_table, local_node_record).await;
server_shutdown(&datadir, &cancel_token, peer_table, shared_local_node).await;
}
_ = signal_terminate.recv() => {
server_shutdown(&datadir, &cancel_token, peer_table, local_node_record).await;
server_shutdown(&datadir, &cancel_token, peer_table, shared_local_node).await;
}
}

Expand Down
52 changes: 40 additions & 12 deletions cmd/ethrex/initializers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use ethrex_p2p::{
peer_table::{PeerTable, PeerTableServer},
sync::SyncMode,
sync_manager::SyncManager,
types::{NetworkConfig, Node, NodeRecord},
types::{LocalNode, NetworkConfig, Node, NodeRecord, SharedLocalNode},
utils::public_key_from_signing_key,
};
use ethrex_storage::{
Expand All @@ -37,7 +37,7 @@ use std::{
io::IsTerminal,
net::{IpAddr, Ipv4Addr, SocketAddr},
path::{Path, PathBuf},
sync::Arc,
sync::{Arc, RwLock},
time::{SystemTime, UNIX_EPOCH},
};
use tokio_util::{sync::CancellationToken, task::TaskTracker};
Expand Down Expand Up @@ -228,8 +228,7 @@ pub async fn init_rpc_api(
opts: &Options,
datadir: &Path,
peer_handler: PeerHandler,
local_p2p_node: Node,
local_node_record: NodeRecord,
shared_local_node: SharedLocalNode,
store: Store,
blockchain: Arc<Blockchain>,
cancel_token: CancellationToken,
Expand Down Expand Up @@ -273,8 +272,7 @@ pub async fn init_rpc_api(
store,
blockchain,
read_jwtsecret_file(&opts.authrpc_jwtsecret),
local_p2p_node,
local_node_record,
shared_local_node,
syncer,
peer_handler,
get_client_version(),
Expand All @@ -296,6 +294,7 @@ pub async fn init_network(
tracker: TaskTracker,
blockchain: Arc<Blockchain>,
context: P2PContext,
shared_local_node: SharedLocalNode,
) {
#[cfg(not(feature = "l2"))]
if opts.dev {
Expand All @@ -310,10 +309,11 @@ pub async fn init_network(
let discovery_config = DiscoveryConfig {
discv4_enabled: opts.discv4_enabled,
discv5_enabled: opts.discv5_enabled,
nat_extip_set: opts.nat_extip.is_some(),
..Default::default()
};

ethrex_p2p::start_network(context, bootnodes, discovery_config)
ethrex_p2p::start_network(context, bootnodes, discovery_config, shared_local_node)
.await
.expect("Network starts");

Expand Down Expand Up @@ -501,7 +501,17 @@ pub fn get_local_p2p_node(opts: &Options, signer: &SecretKey) -> (Node, NetworkC
local_ipv6().ok(),
);

let node = Node::new(external_addr, udp_port, tcp_port, local_public_key);
// Advertise the detected address immediately, even when it is RFC1918 private.
// On a flat private network (local / kurtosis devnet) the private IP is the
// address peers actually reach us at, and tooling such as ethereum-package
// snapshots `admin_nodeInfo` at startup to seed other nodes' bootnodes; an
// advertised `0.0.0.0` there is undiallable and breaks discovery permanently.
// For a genuinely NAT'd public node the IpPredictor upgrades this to the public
// IP once PONG votes reach quorum (see IpPredictor::finalize_ip_vote_round, which
// prefers a public winner and only falls back to a private one).
let announce_addr = external_addr;

let node = Node::new(announce_addr, udp_port, tcp_port, local_public_key);
let network_config = NetworkConfig {
bind_addr,
tcp_port,
Expand Down Expand Up @@ -573,7 +583,7 @@ async fn set_sync_block(store: &Store) {
pub async fn init_l1(
opts: Options,
log_filter_handler: Option<reload::Handle<EnvFilter, Registry>>,
) -> eyre::Result<(PathBuf, CancellationToken, PeerTable, NodeRecord)> {
) -> eyre::Result<(PathBuf, CancellationToken, PeerTable, SharedLocalNode)> {
let network = get_network(&opts);
let datadir = crate::cli::compute_effective_datadir(&opts.datadir, &network, opts.dev);

Expand Down Expand Up @@ -644,6 +654,12 @@ pub async fn init_l1(

let local_node_record = get_local_node_record(&datadir, &local_p2p_node, &signer);

// Build the shared live identity Arc once; threaded into RPC, discovery, and shutdown.
let shared_local_node: SharedLocalNode = Arc::new(RwLock::new(LocalNode {
node: local_p2p_node.clone(),
record: local_node_record,
}));

let peer_table =
PeerTableServer::spawn(local_p2p_node.node_id(), opts.target_peers, store.clone());

Expand Down Expand Up @@ -675,8 +691,7 @@ pub async fn init_l1(
&opts,
&datadir,
peer_handler.clone(),
local_p2p_node,
local_node_record.clone(),
shared_local_node.clone(),
store.clone(),
blockchain.clone(),
cancel_token.clone(),
Expand All @@ -701,6 +716,7 @@ pub async fn init_l1(
tracker.clone(),
blockchain.clone(),
p2p_context,
shared_local_node.clone(),
)
.await;
} else {
Expand All @@ -711,7 +727,7 @@ pub async fn init_l1(
datadir.clone(),
cancel_token,
peer_handler.peer_table,
local_node_record,
shared_local_node,
))
}

Expand Down Expand Up @@ -988,4 +1004,16 @@ mod tests {
fn family_mismatch_panics() {
let _ = resolve_p2p_endpoints(Some("0.0.0.0"), Some("::1"), None, None);
}

/// Regression: on a flat private network (docker / kurtosis devnet) with no
/// `--nat.extip` or `--p2p.addr`, the detected RFC1918 IP must be announced
/// as-is. Previously `get_local_p2p_node` clobbered any private IP to `0.0.0.0`,
/// producing an undiallable `enode://...@0.0.0.0` that broke peer discovery.
#[test]
fn no_flags_announces_detected_private_ip() {
let docker_ip = ip("172.16.0.10");
let (bind, ext) = resolve_p2p_endpoints(None, None, Some(docker_ip), None);
assert_eq!(bind, docker_ip);
assert_eq!(ext, docker_ip, "private IP must be announced, not 0.0.0.0");
}
}
34 changes: 25 additions & 9 deletions cmd/ethrex/l2/initializers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use ethrex_p2p::{
peer_table::PeerTableServer,
rlpx::{initiator::RLPxInitiator, l2::l2_connection::P2PBasedContext},
sync_manager::SyncManager,
types::{Node, NodeRecord},
types::{LocalNode, SharedLocalNode},
};
use ethrex_rpc::{SubscriptionManager, WebSocketConfig};
use ethrex_storage::{Store, StoreConfig};
Expand All @@ -30,7 +30,12 @@ use eyre::OptionExt;
use secp256k1::SecretKey;

use spawned_concurrency::tasks::ActorRef;
use std::{fs::read_to_string, path::Path, sync::Arc, time::Duration};
use std::{
fs::read_to_string,
path::Path,
sync::{Arc, RwLock},
time::Duration,
};
use tokio::task::JoinSet;
use tokio_util::{sync::CancellationToken, task::TaskTracker};
use tracing::{info, warn};
Expand All @@ -43,8 +48,7 @@ fn init_rpc_api(
opts: &L1Options,
l2_opts: &L2Options,
peer_handler: Option<PeerHandler>,
local_p2p_node: Node,
local_node_record: NodeRecord,
shared_local_node: SharedLocalNode,
store: Store,
blockchain: Arc<Blockchain>,
syncer: Option<Arc<SyncManager>>,
Expand All @@ -65,8 +69,7 @@ fn init_rpc_api(
store,
blockchain,
read_jwtsecret_file(&opts.authrpc_jwtsecret),
local_p2p_node,
local_node_record,
shared_local_node,
syncer,
peer_handler,
get_client_version(),
Expand Down Expand Up @@ -247,6 +250,12 @@ pub async fn init_l2(

let local_node_record = get_local_node_record(&datadir, &local_p2p_node, &signer);

// Build the shared live identity Arc once; threaded into RPC, discovery, and shutdown.
let shared_local_node: SharedLocalNode = Arc::new(RwLock::new(LocalNode {
node: local_p2p_node.clone(),
record: local_node_record,
}));

// TODO: Check every module starts properly.
let tracker = TaskTracker::new();
let mut join_set = JoinSet::new();
Expand Down Expand Up @@ -318,6 +327,7 @@ pub async fn init_l2(
tracker.clone(),
blockchain.clone(),
p2p_context,
shared_local_node.clone(),
)
.await;
(Some(peer_handler), Some(Arc::new(syncer)))
Expand Down Expand Up @@ -348,8 +358,7 @@ pub async fn init_l2(
&opts.node_opts,
&opts,
peer_handler.clone(),
local_p2p_node.clone(),
local_node_record.clone(),
shared_local_node.clone(),
store.clone(),
blockchain.clone(),
syncer,
Expand Down Expand Up @@ -404,7 +413,14 @@ pub async fn init_l2(
cancel_token.cancel();
if !opts.node_opts.p2p_disabled {
let peer_handler = peer_handler.ok_or_eyre("Peer handler not initialized")?;
let node_config = NodeConfigFile::new(peer_handler.peer_table, local_node_record).await;
// Clone the current (possibly updated) record out and drop the guard.
let record = {
let guard = shared_local_node
.read()
.expect("shared_local_node poisoned");
guard.record.clone()
};
let node_config = NodeConfigFile::new(peer_handler.peer_table, record).await;
store_node_config_file(node_config, node_config_path);
}
tokio::time::sleep(Duration::from_secs(1)).await;
Expand Down
4 changes: 2 additions & 2 deletions crates/blockchain/blockchain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2789,7 +2789,7 @@ impl Blockchain {
/// Per-block pruning only covers the head block, so stale blob txs from
/// non-head canonical blocks leak in and are never evicted (value/nonce
/// eviction pins low nonces). Resetting against on-chain nonces clears them.
pub fn remove_stale_blob_txs(&self, head_hash: BlockHash) -> Result<(), StoreError> {
pub async fn remove_stale_blob_txs(&self, head_hash: BlockHash) -> Result<(), StoreError> {
let blob_txs = self.mempool.blob_txs()?;
if blob_txs.is_empty() {
return Ok(());
Expand Down Expand Up @@ -2917,7 +2917,7 @@ impl Blockchain {
}

// Check that the gas limit covers the gas needs for transaction metadata.
if tx.gas_limit() < mempool::transaction_intrinsic_gas(tx, &header, &config)? {
if tx.gas_limit() < mempool::transaction_intrinsic_gas(tx, sender, &header, &config)? {
return Err(MempoolError::TxIntrinsicGasCostAboveLimitError);
}

Expand Down
4 changes: 2 additions & 2 deletions crates/blockchain/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ pub const TX_DATA_NON_ZERO_GAS: u64 = 68;

// Max bytecode size
pub const MAX_CODE_SIZE: u32 = 0x6000;
// EIP-7954 (Amsterdam): increased max bytecode size
pub const AMSTERDAM_MAX_CODE_SIZE: u32 = 0x8000;
// EIP-7954 (Amsterdam): increase max bytecode size to 64 KiB
pub const AMSTERDAM_MAX_CODE_SIZE: u32 = 0x10000;

// === EIP-3860 constants ===

Expand Down
12 changes: 7 additions & 5 deletions crates/blockchain/mempool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -783,13 +783,15 @@ pub struct PendingTxFilter {

pub fn transaction_intrinsic_gas(
tx: &Transaction,
sender: Address,
header: &BlockHeader,
config: &ChainConfig,
) -> Result<u64, MempoolError> {
// Amsterdam (EIP-8037): the VM splits intrinsic into (regular, state) and uses
// `REGULAR_GAS_CREATE = 9000` + `STATE_BYTES_PER_NEW_ACCOUNT * cpsb` for CREATE
// instead of the legacy `TX_CREATE_GAS_COST = 53000`. Mempool admission must
// match VM charge or we spuriously reject (or admit) transactions.
// Amsterdam (EIP-2780/8037/8038): the VM splits intrinsic into (regular, state).
// A CREATE tx pays `TX_BASE (12000) + CREATE_ACCESS (11000)` regular +
// `STATE_BYTES_PER_NEW_ACCOUNT * cpsb` state, instead of the legacy
// `TX_CREATE_GAS_COST = 53000`. Mempool admission must match the VM charge or we
// spuriously reject (or admit) transactions.
//
// The VM enforces `gas_limit >= max(intrinsic_regular + intrinsic_state,
// floor)` via two separate checks in `validate_gas_allowance` +
Expand All @@ -798,7 +800,7 @@ pub fn transaction_intrinsic_gas(
// pass mempool and then fail at block inclusion, polluting the pool.
if config.is_amsterdam_activated(header.timestamp) {
let fork = config.fork(header.timestamp);
let (regular, state) = intrinsic_gas_dimensions(tx, fork, header.gas_limit)
let (regular, state) = intrinsic_gas_dimensions(tx, sender, fork, header.gas_limit)
.map_err(|_| MempoolError::TxGasOverflowError)?;
let intrinsic = regular
.checked_add(state)
Expand Down
Loading
Loading