// Copyright 2015-2020 Parity Technologies (UK) Ltd.
// This file is part of OpenEthereum.
// OpenEthereum is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// OpenEthereum is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with OpenEthereum. If not, see .
//! Traces api implementation.
use std::sync::Arc;
use ethcore::client::{
BlockChainClient, BlockId, Call, CallAnalytics, EngineInfo, StateClient, StateInfo, TraceId,
TransactionId,
};
use ethereum_types::H256;
use types::transaction::{SignedTransaction, TypedTransaction};
use jsonrpc_core::Result;
use v1::{
helpers::{errors, fake_sign},
traits::Traces,
types::{
block_number_to_id, BlockNumber, Bytes, CallRequest, Index, LocalizedTrace, TraceFilter,
TraceOptions, TraceResults, TraceResultsWithTransactionHash,
},
Metadata,
};
fn to_call_analytics(flags: TraceOptions) -> CallAnalytics {
CallAnalytics {
transaction_tracing: flags.contains(&("trace".to_owned())),
vm_tracing: flags.contains(&("vmTrace".to_owned())),
state_diffing: flags.contains(&("stateDiff".to_owned())),
}
}
/// Traces api implementation.
pub struct TracesClient {
client: Arc,
}
impl TracesClient {
/// Creates new Traces client.
pub fn new(client: &Arc) -> Self {
TracesClient {
client: client.clone(),
}
}
}
impl Traces for TracesClient
where
S: StateInfo + 'static,
C: BlockChainClient + StateClient + Call + EngineInfo + 'static,
{
type Metadata = Metadata;
fn filter(&self, filter: TraceFilter) -> Result