fix: bad recursion in logs (#4113)

This commit is contained in:
Matthias Seitz
2023-08-08 13:09:52 +02:00
committed by GitHub
parent 4b0b63766e
commit 3d1857636d
3 changed files with 28 additions and 3 deletions

View File

@@ -67,6 +67,7 @@ pub mod clients {
debug::DebugApiClient,
engine::{EngineApiClient, EngineEthApiClient},
eth::EthApiClient,
eth_filter::EthFilterApiClient,
net::NetApiClient,
otterscan::OtterscanClient,
rpc::RpcApiServer,

View File

@@ -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<C>(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<C>(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();

View File

@@ -209,7 +209,7 @@ where
/// Handler for `eth_getLogs`
async fn logs(&self, filter: Filter) -> RpcResult<Vec<Log>> {
trace!(target: "rpc::eth", "Serving eth_getLogs");
Ok(EthFilter::logs(self, filter).await?)
Ok(self.inner.logs_for_filter(filter).await?)
}
}