moonbeam_client_evm_tracing/types/
mod.rs1extern crate alloc;
20
21use ethereum_types::{H160, H256};
22use parity_scale_codec::{Decode, Encode};
23use sp_std::vec::Vec;
24
25pub mod block;
26pub mod serialization;
27pub mod single;
28
29use serde::Serialize;
30use serialization::*;
31
32pub const MANUAL_BLOCK_INITIALIZATION_RUNTIME_VERSION: u32 = 159;
33
34#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
35#[serde(rename_all = "camelCase")]
36pub enum CallResult {
37 Output(#[serde(serialize_with = "bytes_0x_serialize")] Vec<u8>),
38 Error(#[serde(serialize_with = "string_serialize")] Vec<u8>),
40}
41
42#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
43#[serde(rename_all = "camelCase", untagged)]
44pub enum CreateResult {
45 Error {
46 #[serde(serialize_with = "string_serialize")]
47 error: Vec<u8>,
48 },
49 Success {
50 #[serde(rename = "createdContractAddressHash")]
51 created_contract_address_hash: H160,
52 #[serde(serialize_with = "bytes_0x_serialize", rename = "createdContractCode")]
53 created_contract_code: Vec<u8>,
54 },
55}
56
57#[derive(Clone, Copy, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
58#[serde(rename_all = "lowercase")]
59pub enum CallType {
60 Call,
61 CallCode,
62 DelegateCall,
63 StaticCall,
64}
65
66#[derive(Clone, Copy, Eq, PartialEq, Debug, Encode, Decode, Serialize)]
67#[serde(rename_all = "lowercase")]
68pub enum CreateType {
69 Create,
70}
71
72#[derive(Debug)]
73pub enum ContextType {
74 Call(CallType),
75 Create,
76}
77
78impl ContextType {
79 pub fn from(opcode: Vec<u8>) -> Option<Self> {
80 let opcode = match alloc::str::from_utf8(&opcode[..]) {
81 Ok(op) => op.to_uppercase(),
82 _ => return None,
83 };
84 match &opcode[..] {
85 "CREATE" | "CREATE2" => Some(ContextType::Create),
86 "CALL" => Some(ContextType::Call(CallType::Call)),
87 "CALLCODE" => Some(ContextType::Call(CallType::CallCode)),
88 "DELEGATECALL" => Some(ContextType::Call(CallType::DelegateCall)),
89 "STATICCALL" => Some(ContextType::Call(CallType::StaticCall)),
90 _ => None,
91 }
92 }
93}
94
95pub fn convert_memory(memory: Vec<u8>) -> Vec<H256> {
96 let size = 32;
97 memory
98 .chunks(size)
99 .map(|c| {
100 let mut msg = [0u8; 32];
101 let chunk = c.len();
102 if chunk < size {
103 let left = size - chunk;
104 let remainder = vec![0; left];
105 msg[0..left].copy_from_slice(&remainder[..]);
106 msg[left..size].copy_from_slice(c);
107 } else {
108 msg[0..size].copy_from_slice(c)
109 }
110 H256::from_slice(&msg[..])
111 })
112 .collect()
113}