client/rpc/impls/cfx/
trace.rs1use crate::{
6 common::delegate_convert::into_jsonrpc_result,
7 rpc::{
8 traits::trace::Trace,
9 types::{
10 EpochNumber as RpcEpochNumber, LocalizedBlockTrace, LocalizedTrace,
11 TraceFilter as RpcTraceFilter,
12 },
13 },
14};
15use cfx_addr::Network;
16use cfx_rpc_cfx_impl::TraceHandler as CfxTraceHandler;
17use cfx_rpc_eth_types::trace::EpochTrace;
18use cfx_rpc_utils::error::jsonrpc_error_helpers::error_object_owned_to_jsonrpc_error;
19use cfx_types::H256;
20
21use cfxcore::SharedConsensusGraph;
22use jsonrpc_core::Result as JsonRpcResult;
23
24#[derive(Clone)]
25pub struct TraceHandler {
26 pub(crate) inner: CfxTraceHandler,
27}
28
29impl TraceHandler {
30 pub fn new(network: Network, consensus: SharedConsensusGraph) -> Self {
31 TraceHandler {
32 inner: CfxTraceHandler::new(network, consensus),
33 }
34 }
35}
36
37impl Trace for TraceHandler {
38 fn block_traces(
39 &self, block_hash: H256,
40 ) -> JsonRpcResult<Option<LocalizedBlockTrace>> {
41 into_jsonrpc_result(self.inner.block_traces_impl(block_hash))
42 }
43
44 fn filter_traces(
45 &self, filter: RpcTraceFilter,
46 ) -> JsonRpcResult<Option<Vec<LocalizedTrace>>> {
47 let primitive_filter = filter
48 .into_primitive()
49 .map_err(error_object_owned_to_jsonrpc_error)?;
50 into_jsonrpc_result(self.inner.filter_traces_impl(primitive_filter))
51 }
52
53 fn transaction_traces(
54 &self, tx_hash: H256,
55 ) -> JsonRpcResult<Option<Vec<LocalizedTrace>>> {
56 into_jsonrpc_result(Ok(self.inner.transaction_trace_impl(&tx_hash)))
57 }
58
59 fn epoch_traces(
60 &self, epoch: RpcEpochNumber,
61 ) -> JsonRpcResult<Option<EpochTrace>> {
62 into_jsonrpc_result(self.inner.epoch_trace_impl(epoch.into_primitive()))
63 }
64}