chore: more work on filter (#1468)

This commit is contained in:
Matthias Seitz
2023-02-22 13:24:41 +01:00
committed by GitHub
parent eccafd1bed
commit 44e1d13f11
2 changed files with 42 additions and 36 deletions

View File

@ -1,5 +1,5 @@
use jsonrpsee::{core::RpcResult as Result, proc_macros::rpc}; use jsonrpsee::{core::RpcResult as Result, proc_macros::rpc};
use reth_primitives::rpc::Filter; use reth_primitives::filter::Filter;
use reth_rpc_types::{FilterChanges, FilterId, Log}; use reth_rpc_types::{FilterChanges, FilterId, Log};
/// Rpc Interface for poll-based ethereum filter API. /// Rpc Interface for poll-based ethereum filter API.

View File

@ -8,8 +8,8 @@ use jsonrpsee::{
server::{IdProvider, RandomIntegerIdProvider}, server::{IdProvider, RandomIntegerIdProvider},
}; };
use reth_primitives::{ use reth_primitives::{
rpc::{Filter, FilterBlockOption, FilteredParams}, filter::{Filter, FilterBlockOption, FilteredParams},
U256, Block, U256,
}; };
use reth_provider::BlockProvider; use reth_provider::BlockProvider;
use reth_rpc_api::EthFilterApiServer; use reth_rpc_api::EthFilterApiServer;
@ -197,44 +197,50 @@ where
/// - underlying database error /// - underlying database error
/// - amount of matches exceeds configured limit /// - amount of matches exceeds configured limit
#[allow(dead_code)] #[allow(dead_code)]
fn filter_logs( fn filter_logs(&self, filter: &Filter, from_block: u64, to_block: u64) -> RpcResult<Vec<Log>> {
&self, let mut logs = Vec::new();
filter: &Filter, let filter_params = FilteredParams::new(Some(filter.clone()));
_from_block: u64,
_to_block: u64,
) -> RpcResult<Vec<Log>> {
let logs = Vec::new();
let topics = if filter.has_topics() {
let params = FilteredParams::new(Some(filter.clone()));
Some(params.flat_topics)
} else {
None
};
let _address_filter = FilteredParams::address_filter(&filter.address); let topics =
let _topics_filter = FilteredParams::topics_filter(&topics); if filter.has_topics() { Some(filter_params.flat_topics.clone()) } else { None };
// TODO blocked by <https://github.com/paradigmxyz/reth/issues/1371> // derive bloom filters from filter input
// let block_number = from_block; let address_filter = FilteredParams::address_filter(&filter.address);
// let topics_filter = FilteredParams::topics_filter(&topics);
// while block_number <= to_block {
// let _block = self for block_number in from_block..=to_block {
// .client if let Some(block) = self.client.block_by_number(block_number).to_rpc_result()? {
// .block_by_number(BlockNumberOrTag::Number(block_number.into())) // only if filter matches
// .to_rpc_result()? if FilteredParams::matches_address(block.header.logs_bloom, &address_filter) &&
// .ok_or(EthApiError::UnknownBlockNumber)?; FilteredParams::matches_topics(block.header.logs_bloom, &topics_filter)
// {
// self.append_matching_block_logs(&mut logs, &filter_params, block);
//
// if FilteredParams::matches_address(block.header.logs_bloom, &address_filter) && // TODO size check
// FilteredParams::matches_topics(block.header.logs_bloom, &topics_filter) }
// { }
// // TODO filter logs from transactions }
// }
// }
Ok(logs) Ok(logs)
} }
/// Appends all logs emitted in the `block` that match the `filter` to the `logs` vector.
#[allow(clippy::ptr_arg)]
fn append_matching_block_logs(
&self,
_logs: &mut Vec<Log>,
_filter: &FilteredParams,
block: Block,
) {
let _block_log_index: u32 = 0;
let _block_hash = block.hash_slow();
// loop over all transactions in the block
for tx in block.body {
let _transaction_log_index: u32 = 0;
let _transaction_hash = tx.hash;
}
}
} }
/// All active filters /// All active filters