From 3d1857636dcac3fc510a7c754852438b74280944 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Tue, 8 Aug 2023 13:09:52 +0200 Subject: [PATCH] fix: bad recursion in logs (#4113) --- crates/rpc/rpc-api/src/lib.rs | 1 + crates/rpc/rpc-builder/tests/it/http.rs | 28 +++++++++++++++++++++++-- crates/rpc/rpc/src/eth/filter.rs | 2 +- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/crates/rpc/rpc-api/src/lib.rs b/crates/rpc/rpc-api/src/lib.rs index 073631c986..27a4afc389 100644 --- a/crates/rpc/rpc-api/src/lib.rs +++ b/crates/rpc/rpc-api/src/lib.rs @@ -67,6 +67,7 @@ pub mod clients { debug::DebugApiClient, engine::{EngineApiClient, EngineEthApiClient}, eth::EthApiClient, + eth_filter::EthFilterApiClient, net::NetApiClient, otterscan::OtterscanClient, rpc::RpcApiServer, diff --git a/crates/rpc/rpc-builder/tests/it/http.rs b/crates/rpc/rpc-builder/tests/it/http.rs index 9dbfb2136f..c1414d556c 100644 --- a/crates/rpc/rpc-builder/tests/it/http.rs +++ b/crates/rpc/rpc-builder/tests/it/http.rs @@ -14,10 +14,11 @@ use reth_primitives::{ }; use reth_rpc_api::{ clients::{AdminApiClient, EthApiClient}, - DebugApiClient, NetApiClient, OtterscanClient, TraceApiClient, Web3ApiClient, + DebugApiClient, EthFilterApiClient, NetApiClient, OtterscanClient, TraceApiClient, + Web3ApiClient, }; use reth_rpc_builder::RethRpcModule; -use reth_rpc_types::{trace::filter::TraceFilter, CallRequest, Index, TransactionRequest}; +use reth_rpc_types::{trace::filter::TraceFilter, CallRequest, Filter, Index, TransactionRequest}; use std::collections::HashSet; fn is_unimplemented(err: Error) -> bool { @@ -30,6 +31,20 @@ fn is_unimplemented(err: Error) -> bool { } } +async fn test_filter_calls(client: &C) +where + C: ClientT + SubscriptionClientT + Sync, +{ + EthFilterApiClient::new_filter(client, Filter::default()).await.unwrap(); + EthFilterApiClient::new_pending_transaction_filter(client).await.unwrap(); + let id = EthFilterApiClient::new_block_filter(client).await.unwrap(); + EthFilterApiClient::filter_changes(client, id.clone()).await.unwrap(); + EthFilterApiClient::logs(client, Filter::default()).await.unwrap(); + let id = EthFilterApiClient::new_filter(client, Filter::default()).await.unwrap(); + EthFilterApiClient::filter_logs(client, id.clone()).await.unwrap(); + EthFilterApiClient::uninstall_filter(client, id).await.unwrap(); +} + async fn test_basic_admin_calls(client: &C) where C: ClientT + SubscriptionClientT + Sync, @@ -240,6 +255,15 @@ where )); } +#[tokio::test(flavor = "multi_thread")] +async fn test_call_filter_functions_http() { + reth_tracing::init_test_tracing(); + + let handle = launch_http(vec![RethRpcModule::Eth]).await; + let client = handle.http_client().unwrap(); + test_filter_calls(&client).await; +} + #[tokio::test(flavor = "multi_thread")] async fn test_call_admin_functions_http() { reth_tracing::init_test_tracing(); diff --git a/crates/rpc/rpc/src/eth/filter.rs b/crates/rpc/rpc/src/eth/filter.rs index a7c5ce53f3..5332de726b 100644 --- a/crates/rpc/rpc/src/eth/filter.rs +++ b/crates/rpc/rpc/src/eth/filter.rs @@ -209,7 +209,7 @@ where /// Handler for `eth_getLogs` async fn logs(&self, filter: Filter) -> RpcResult> { trace!(target: "rpc::eth", "Serving eth_getLogs"); - Ok(EthFilter::logs(self, filter).await?) + Ok(self.inner.logs_for_filter(filter).await?) } }