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_types::H256;
19
20use cfxcore::SharedConsensusGraph;
21use jsonrpc_core::Result as JsonRpcResult;
22
23#[derive(Clone)]
24pub struct TraceHandler {
25 pub(crate) inner: CfxTraceHandler,
26}
27
28impl TraceHandler {
29 pub fn new(network: Network, consensus: SharedConsensusGraph) -> Self {
30 TraceHandler {
31 inner: CfxTraceHandler::new(network, consensus),
32 }
33 }
34}
35
36impl Trace for TraceHandler {
37 fn block_traces(
38 &self, block_hash: H256,
39 ) -> JsonRpcResult<Option<LocalizedBlockTrace>> {
40 into_jsonrpc_result(self.inner.block_traces_impl(block_hash))
41 }
42
43 fn filter_traces(
44 &self, filter: RpcTraceFilter,
45 ) -> JsonRpcResult<Option<Vec<LocalizedTrace>>> {
46 let primitive_filter = filter.into_primitive()?;
47 into_jsonrpc_result(self.inner.filter_traces_impl(primitive_filter))
48 }
49
50 fn transaction_traces(
51 &self, tx_hash: H256,
52 ) -> JsonRpcResult<Option<Vec<LocalizedTrace>>> {
53 into_jsonrpc_result(Ok(self.inner.transaction_trace_impl(&tx_hash)))
54 }
55
56 fn epoch_traces(
57 &self, epoch: RpcEpochNumber,
58 ) -> JsonRpcResult<Option<EpochTrace>> {
59 into_jsonrpc_result(self.inner.epoch_trace_impl(epoch.into_primitive()))
60 }
61}