@@ -2093,7 +2093,7 @@ impl Backend {
2093
2093
hash : B256 ,
2094
2094
) -> Result < Vec < Log > , BlockchainError > {
2095
2095
if let Some ( block) = self . blockchain . get_block_by_hash ( & hash) {
2096
- return Ok ( self . mined_logs_for_block ( filter, block) ) ;
2096
+ return Ok ( self . mined_logs_for_block ( filter, block, hash ) ) ;
2097
2097
}
2098
2098
2099
2099
if let Some ( fork) = self . get_fork ( ) {
@@ -2104,9 +2104,8 @@ impl Backend {
2104
2104
}
2105
2105
2106
2106
/// Returns all `Log`s mined by the node that were emitted in the `block` and match the `Filter`
2107
- fn mined_logs_for_block ( & self , filter : Filter , block : Block ) -> Vec < Log > {
2107
+ fn mined_logs_for_block ( & self , filter : Filter , block : Block , block_hash : B256 ) -> Vec < Log > {
2108
2108
let mut all_logs = Vec :: new ( ) ;
2109
- let block_hash = block. header . hash_slow ( ) ;
2110
2109
let mut block_log_index = 0u32 ;
2111
2110
2112
2111
let storage = self . blockchain . storage . read ( ) ;
@@ -2167,8 +2166,12 @@ impl Backend {
2167
2166
}
2168
2167
2169
2168
for number in from..=to {
2170
- if let Some ( block) = self . get_block ( number) {
2171
- all_logs. extend ( self . mined_logs_for_block ( filter. clone ( ) , block) ) ;
2169
+ let storage = self . blockchain . storage . read ( ) ;
2170
+ if let Some ( & block_hash) = storage. hashes . get ( & number)
2171
+ && let Some ( block) = storage. blocks . get ( & block_hash) . cloned ( )
2172
+ {
2173
+ drop ( storage) ;
2174
+ all_logs. extend ( self . mined_logs_for_block ( filter. clone ( ) , block, block_hash) ) ;
2172
2175
}
2173
2176
}
2174
2177
0 commit comments