From fe611ab379318965b4dc618bbd432760a13827b6 Mon Sep 17 00:00:00 2001 From: stevencartavia <112043913+stevencartavia@users.noreply.github.com> Date: Thu, 19 Mar 2026 04:11:43 -0600 Subject: [PATCH] perf(rpc): avoid header clone in `logs_for_filter` (#23106) --- crates/rpc/rpc/src/eth/filter.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/crates/rpc/rpc/src/eth/filter.rs b/crates/rpc/rpc/src/eth/filter.rs index 3f93879dcf..d3f72159ba 100644 --- a/crates/rpc/rpc/src/eth/filter.rs +++ b/crates/rpc/rpc/src/eth/filter.rs @@ -478,22 +478,24 @@ where return Err(ProviderError::HeaderNotFound(block_hash.into()).into()) }; - // Get header - from cached block if available, otherwise from provider - let header = if let Some(block) = &maybe_block { - block.header().clone() + // Read number and timestamp from cached block or provider header + let (block_number, block_timestamp) = if let Some(block) = &maybe_block { + (block.header().number(), block.header().timestamp()) } else { - self.provider() + let header = self + .provider() .header_by_hash_or_number(block_hash.into())? - .ok_or_else(|| ProviderError::HeaderNotFound(block_hash.into()))? + .ok_or_else(|| ProviderError::HeaderNotFound(block_hash.into()))?; + (header.number(), header.timestamp()) }; // Check if the block has been pruned (EIP-4444) let earliest_block = self.provider().earliest_block_number()?; - if header.number() < earliest_block { + if block_number < earliest_block { return Err(EthApiError::PrunedHistoryUnavailable.into()); } - let block_num_hash = BlockNumHash::new(header.number(), block_hash); + let block_num_hash = BlockNumHash::new(block_number, block_hash); let mut all_logs = Vec::new(); append_matching_block_logs( @@ -505,7 +507,7 @@ where block_num_hash, &receipts, false, - header.timestamp(), + block_timestamp, )?; Ok(all_logs)