diff --git a/crates/flashblocks-rpc/src/rpc.rs b/crates/flashblocks-rpc/src/rpc.rs index cfd228f7..3939f5c6 100644 --- a/crates/flashblocks-rpc/src/rpc.rs +++ b/crates/flashblocks-rpc/src/rpc.rs @@ -175,7 +175,13 @@ 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() { + 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.map_err(Into::into) } diff --git a/crates/flashblocks-rpc/src/tests/rpc.rs b/crates/flashblocks-rpc/src/tests/rpc.rs index b8bbdfe0..dbc6dc12 100644 --- a/crates/flashblocks-rpc/src/tests/rpc.rs +++ b/crates/flashblocks-rpc/src/tests/rpc.rs @@ -384,9 +384,13 @@ mod tests { assert_eq!(latest_block.number(), 0); // 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); + let pending_block = provider + .get_block_by_number(alloy_eips::BlockNumberOrTag::Pending) + .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?;