fix: return an error if block does nit exist (#7374)

This commit is contained in:
Matthias Seitz
2024-03-28 14:27:13 +01:00
committed by GitHub
parent 33c466d88c
commit bd2945a988
2 changed files with 27 additions and 15 deletions

View File

@ -546,7 +546,9 @@ async fn test_eth_logs_args() {
let mut params = ArrayParams::default();
params.insert( serde_json::json!({"blockHash":"0x58dc57ab582b282c143424bd01e8d923cddfdcda9455bad02a29522f6274a948"})).unwrap();
let _resp = client.request::<Vec<Log>, _>("eth_getLogs", params).await.unwrap();
let resp = client.request::<Vec<Log>, _>("eth_getLogs", params).await;
// block does not exist
assert!(resp.is_err());
}
#[tokio::test(flavor = "multi_thread")]

View File

@ -349,21 +349,31 @@ where
async fn logs_for_filter(&self, filter: Filter) -> Result<Vec<Log>, FilterError> {
match filter.block_option {
FilterBlockOption::AtBlockHash(block_hash) => {
// all matching logs in the block
let block_number = self
.provider
.block_number_for_id(block_hash.into())?
.ok_or_else(|| EthApiError::UnknownBlockNumber)?;
// we also need to ensure that the receipts are available and return an error if
// not, in case the block hash been reorged
let receipts = self
.eth_cache
.get_receipts(block_hash)
.await?
.ok_or_else(|| EthApiError::UnknownBlockNumber)?;
let mut all_logs = Vec::new();
// all matching logs in the block, if it exists
if let Some(block_number) = self.provider.block_number_for_id(block_hash.into())? {
if let Some(receipts) = self.eth_cache.get_receipts(block_hash).await? {
let filter = FilteredParams::new(Some(filter));
logs_utils::append_matching_block_logs(
&mut all_logs,
&self.provider,
&filter,
(block_hash, block_number).into(),
&receipts,
false,
)?;
}
}
let filter = FilteredParams::new(Some(filter));
logs_utils::append_matching_block_logs(
&mut all_logs,
&self.provider,
&filter,
(block_hash, block_number).into(),
&receipts,
false,
)?;
Ok(all_logs)
}
FilterBlockOption::Range { from_block, to_block } => {