From e443aa7f0df01fa64d8310b54ff509ae25c3f52f Mon Sep 17 00:00:00 2001 From: parizval Date: Wed, 12 Nov 2025 23:13:52 +0530 Subject: [PATCH 1/3] fix: eth_getBlockByNumber should return Latest if Pending is None --- crates/flashblocks-rpc/src/rpc.rs | 9 ++++++++- crates/flashblocks-rpc/src/tests/rpc.rs | 7 +++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/flashblocks-rpc/src/rpc.rs b/crates/flashblocks-rpc/src/rpc.rs index 7a922b58..56466301 100644 --- a/crates/flashblocks-rpc/src/rpc.rs +++ b/crates/flashblocks-rpc/src/rpc.rs @@ -178,7 +178,14 @@ where if number.is_pending() { self.metrics.get_block_by_number.increment(1); let pending_blocks = self.flashblocks_state.get_pending_blocks(); - Ok(pending_blocks.get_block(full)) + if pending_blocks.as_ref().is_some() { + Ok(pending_blocks.get_block(full)) + } else { + // No pending state available — treat `pending` as `latest` + return EthBlocks::rpc_block(&self.eth_api, BlockNumberOrTag::Latest.into(), full) + .await + .map_err(Into::into); + } } else { EthBlocks::rpc_block(&self.eth_api, number.into(), full) .await diff --git a/crates/flashblocks-rpc/src/tests/rpc.rs b/crates/flashblocks-rpc/src/tests/rpc.rs index 2230d7c6..0c248c59 100644 --- a/crates/flashblocks-rpc/src/tests/rpc.rs +++ b/crates/flashblocks-rpc/src/tests/rpc.rs @@ -391,8 +391,11 @@ mod tests { // Querying pending block when it does not exist yet let pending_block = provider .get_block_by_number(alloy_eips::BlockNumberOrTag::Pending) - .await?; - assert_eq!(pending_block.is_none(), true); + .await? + .expect("latest block expected"); + + assert_eq!(pending_block.number(), latest_block.number()); + assert_eq!(pending_block.hash(), latest_block.hash()); let base_payload = create_first_payload(); node.send_payload(base_payload).await?; From df64ad781c6fdfb6d0382bb60c6a7cf4f6f67ac9 Mon Sep 17 00:00:00 2001 From: parizval Date: Thu, 13 Nov 2025 04:14:37 +0530 Subject: [PATCH 2/3] style: improve readibility of fn block_by_number --- crates/flashblocks-rpc/src/rpc.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/crates/flashblocks-rpc/src/rpc.rs b/crates/flashblocks-rpc/src/rpc.rs index 56466301..4f508389 100644 --- a/crates/flashblocks-rpc/src/rpc.rs +++ b/crates/flashblocks-rpc/src/rpc.rs @@ -179,13 +179,12 @@ where self.metrics.get_block_by_number.increment(1); let pending_blocks = self.flashblocks_state.get_pending_blocks(); if pending_blocks.as_ref().is_some() { - Ok(pending_blocks.get_block(full)) - } else { - // No pending state available — treat `pending` as `latest` - return EthBlocks::rpc_block(&self.eth_api, BlockNumberOrTag::Latest.into(), full) - .await - .map_err(Into::into); + return Ok(pending_blocks.get_block(full)); } + // No pending state available — treat `pending` as `latest` + EthBlocks::rpc_block(&self.eth_api, BlockNumberOrTag::Latest.into(), full) + .await + .map_err(Into::into) } else { EthBlocks::rpc_block(&self.eth_api, number.into(), full) .await From 8ed56ef883c5a2a4cbaff069484a825d7b883ac6 Mon Sep 17 00:00:00 2001 From: parizval Date: Thu, 13 Nov 2025 04:23:43 +0530 Subject: [PATCH 3/3] style: removing extra whitespaces in fn test_get_pending_block --- crates/flashblocks-rpc/src/tests/rpc.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/flashblocks-rpc/src/tests/rpc.rs b/crates/flashblocks-rpc/src/tests/rpc.rs index 4126d6d6..dbc6dc12 100644 --- a/crates/flashblocks-rpc/src/tests/rpc.rs +++ b/crates/flashblocks-rpc/src/tests/rpc.rs @@ -392,7 +392,6 @@ mod tests { assert_eq!(pending_block.number(), latest_block.number()); assert_eq!(pending_block.hash(), latest_block.hash()); - let base_payload = create_first_payload(); node.send_payload(base_payload).await?;