mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
chore: more work on filter (#1468)
This commit is contained in:
@ -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.
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user