diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index 73bf0d9f5780c..bd5b415348ba2 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -2093,7 +2093,7 @@ impl Backend { hash: B256, ) -> Result, BlockchainError> { if let Some(block) = self.blockchain.get_block_by_hash(&hash) { - return Ok(self.mined_logs_for_block(filter, block)); + return Ok(self.mined_logs_for_block(filter, block, hash)); } if let Some(fork) = self.get_fork() { @@ -2104,9 +2104,8 @@ impl Backend { } /// Returns all `Log`s mined by the node that were emitted in the `block` and match the `Filter` - fn mined_logs_for_block(&self, filter: Filter, block: Block) -> Vec { + fn mined_logs_for_block(&self, filter: Filter, block: Block, block_hash: B256) -> Vec { let mut all_logs = Vec::new(); - let block_hash = block.header.hash_slow(); let mut block_log_index = 0u32; let storage = self.blockchain.storage.read(); @@ -2167,8 +2166,12 @@ impl Backend { } for number in from..=to { - if let Some(block) = self.get_block(number) { - all_logs.extend(self.mined_logs_for_block(filter.clone(), block)); + let storage = self.blockchain.storage.read(); + if let Some(&block_hash) = storage.hashes.get(&number) + && let Some(block) = storage.blocks.get(&block_hash).cloned() + { + drop(storage); + all_logs.extend(self.mined_logs_for_block(filter.clone(), block, block_hash)); } }