client/rpc/impls/cfx/
trace.rs

1// Copyright 2020 Conflux Foundation. All rights reserved.
2// Conflux is free software and distributed under GNU General Public License.
3// See http://www.gnu.org/licenses/
4
5use 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}