1mod memory;
6
7pub use self::memory::{MemoryAccount, MemoryBackend, MemoryVicinity};
8
9use alloc::vec::Vec;
10use primitive_types::{H160, H256, U256};
11
12#[derive(Clone, Eq, PartialEq, Debug, Default)]
14#[cfg_attr(
15 feature = "with-codec",
16 derive(codec::Encode, codec::Decode, scale_info::TypeInfo)
17)]
18#[cfg_attr(feature = "with-serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct Basic {
20 pub balance: U256,
22 pub nonce: U256,
24}
25
26pub use ethereum::Log;
27
28#[derive(Clone, Debug)]
30pub enum Apply<I> {
31 Modify {
33 address: H160,
35 basic: Basic,
37 code: Option<Vec<u8>>,
39 storage: I,
41 reset_storage: bool,
44 },
45 Delete {
47 address: H160,
49 },
50}
51
52#[auto_impl::auto_impl(&, Arc, Box)]
54pub trait Backend {
55 fn gas_price(&self) -> U256;
57 fn gas_left(&self) -> U256;
59 fn origin(&self) -> H160;
61 fn block_hash(&self, number: U256) -> H256;
63 fn block_number(&self) -> U256;
65 fn block_coinbase(&self) -> H160;
67 fn block_timestamp(&self) -> U256;
69 fn block_difficulty(&self) -> U256;
71 fn block_gas_limit(&self) -> U256;
73 fn block_base_fee_per_gas(&self) -> U256;
75 fn chain_id(&self) -> U256;
77
78 fn exists(&self, address: H160) -> bool;
80 fn basic(&self, address: H160) -> Basic;
82 fn code(&self, address: H160) -> Vec<u8>;
84 fn storage(&self, address: H160, index: H256) -> H256;
86 fn original_storage(&self, address: H160, index: H256) -> Option<H256>;
88}
89
90pub trait ApplyBackend {
92 fn apply<A, I, L>(&mut self, values: A, logs: L, delete_empty: bool)
94 where
95 A: IntoIterator<Item = Apply<I>>,
96 I: IntoIterator<Item = (H256, H256)>,
97 L: IntoIterator<Item = Log>;
98}