revm_interpreter/interpreter_action/
eof_create_inputs.rs1use bytecode::Eof;
2use primitives::{Address, Bytes, U256};
3
4#[derive(Debug, Clone, PartialEq, Eq)]
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16pub enum EOFCreateKind {
17 Tx {
18 initdata: Bytes,
19 },
20 Opcode {
21 initcode: Eof,
22 input: Bytes,
23 created_address: Address,
24 },
25}
26
27impl EOFCreateKind {
28 pub fn created_address(&self) -> Option<&Address> {
30 match self {
31 EOFCreateKind::Opcode {
32 created_address, ..
33 } => Some(created_address),
34 EOFCreateKind::Tx { .. } => None,
35 }
36 }
37}
38
39impl Default for EOFCreateKind {
40 fn default() -> Self {
41 EOFCreateKind::Opcode {
42 initcode: Eof::default(),
43 input: Bytes::default(),
44 created_address: Address::default(),
45 }
46 }
47}
48
49#[derive(Debug, Default, Clone, PartialEq, Eq)]
51#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
52pub struct EOFCreateInputs {
53 pub caller: Address,
55 pub value: U256,
57 pub gas_limit: u64,
59 pub kind: EOFCreateKind,
61}
62
63impl EOFCreateInputs {
64 pub fn new(caller: Address, value: U256, gas_limit: u64, kind: EOFCreateKind) -> Self {
68 EOFCreateInputs {
70 caller,
71 value,
72 gas_limit,
73 kind,
74 }
75 }
76
77 pub fn new_opcode(
79 caller: Address,
80 created_address: Address,
81 value: U256,
82 eof_init_code: Eof,
83 gas_limit: u64,
84 input: Bytes,
85 ) -> EOFCreateInputs {
86 EOFCreateInputs::new(
87 caller,
88 value,
89 gas_limit,
90 EOFCreateKind::Opcode {
91 initcode: eof_init_code,
92 input,
93 created_address,
94 },
95 )
96 }
97}