// Copyright 2015-2019 Parity Technologies (UK) Ltd.
// This file is part of Parity Ethereum.
// Parity Ethereum 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.
// Parity Ethereum 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 Parity Ethereum. If not, see .
//! Traces api implementation.
use std::sync::Arc;
use ethcore::client::{BlockChainClient, StateClient, StateInfo, Call};
use ethereum_types::H256;
use rlp::Rlp;
use types::{
call_analytics::CallAnalytics,
ids::{BlockId, TransactionId, TraceId},
transaction::SignedTransaction,
};
use jsonrpc_core::Result;
use v1::Metadata;
use v1::traits::Traces;
use v1::helpers::{errors, fake_sign};
use v1::types::{TraceFilter, LocalizedTrace, BlockNumber, Index, CallRequest, Bytes, TraceResults,
TraceResultsWithTransactionHash, TraceOptions, block_number_to_id};
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 + 'static
{
type Metadata = Metadata;
fn filter(&self, filter: TraceFilter) -> Result