use super::serialization::*;
use serde::{Deserialize, Serialize};
use ethereum_types::{H160, H256, U256};
use parity_scale_codec::{Decode, Encode};
use sp_std::{collections::btree_map::BTreeMap, vec::Vec};
#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
#[serde(rename_all = "camelCase", untagged)]
pub enum Call {
Blockscout(crate::formatters::blockscout::BlockscoutCall),
CallTracer(crate::formatters::call_tracer::CallTracerCall),
}
#[derive(Clone, Copy, Eq, PartialEq, Debug, Encode, Decode)]
pub enum TraceType {
Raw {
disable_storage: bool,
disable_memory: bool,
disable_stack: bool,
},
CallList,
Block,
}
#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
#[serde(rename_all = "camelCase", untagged)]
pub enum TransactionTrace {
#[serde(rename_all = "camelCase")]
Raw {
gas: U256,
#[serde(with = "hex")]
return_value: Vec<u8>,
struct_logs: Vec<RawStepLog>,
},
CallList(Vec<Call>),
CallListNested(Call),
}
#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RawStepLog {
#[serde(serialize_with = "u256_serialize")]
pub depth: U256,
#[serde(serialize_with = "u256_serialize")]
pub gas: U256,
#[serde(serialize_with = "u256_serialize")]
pub gas_cost: U256,
#[serde(
serialize_with = "seq_h256_serialize",
skip_serializing_if = "Option::is_none"
)]
pub memory: Option<Vec<H256>>,
#[serde(serialize_with = "opcode_serialize")]
pub op: Vec<u8>,
#[serde(serialize_with = "u256_serialize")]
pub pc: U256,
#[serde(
serialize_with = "seq_h256_serialize",
skip_serializing_if = "Option::is_none"
)]
pub stack: Option<Vec<H256>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub storage: Option<BTreeMap<H256, H256>>,
}
#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TraceCallConfig {
pub with_log: bool,
}
impl Default for TraceCallConfig {
fn default() -> Self {
Self { with_log: false }
}
}
#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Serialize)]
pub struct Log {
pub address: H160,
pub topics: Vec<H256>,
#[serde(serialize_with = "bytes_0x_serialize")]
pub data: Vec<u8>,
}