aurora_evm/backend/
mod.rs1use crate::prelude::*;
5use primitive_types::{H160, H256, U256};
6
7pub use self::memory::{MemoryAccount, MemoryBackend, MemoryVicinity};
8
9mod memory;
10
11#[derive(Clone, Eq, PartialEq, Debug, Default)]
14#[cfg_attr(
15 feature = "with-codec",
16 derive(scale_codec::Encode, scale_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
26#[derive(Clone, Debug, PartialEq, Eq, Default, rlp::RlpEncodable, rlp::RlpDecodable)]
27#[cfg_attr(
28 feature = "with-codec",
29 derive(scale_codec::Encode, scale_codec::Decode, scale_info::TypeInfo)
30)]
31#[cfg_attr(feature = "with-serde", derive(serde::Serialize, serde::Deserialize))]
32pub struct Log {
33 pub address: H160,
34 pub topics: Vec<H256>,
35 pub data: Vec<u8>,
36}
37
38#[derive(Clone, Debug)]
40pub enum Apply<I> {
41 Modify {
43 address: H160,
45 basic: Basic,
47 code: Option<Vec<u8>>,
49 storage: I,
51 reset_storage: bool,
54 },
55 Delete {
57 address: H160,
59 },
60}
61
62#[auto_impl::auto_impl(&, Arc, Box)]
64pub trait Backend {
65 fn gas_price(&self) -> U256;
67 fn origin(&self) -> H160;
69 fn block_hash(&self, number: U256) -> H256;
71 fn block_number(&self) -> U256;
73 fn block_coinbase(&self) -> H160;
75 fn block_timestamp(&self) -> U256;
77 fn block_difficulty(&self) -> U256;
79 fn block_randomness(&self) -> Option<H256>;
81 fn block_gas_limit(&self) -> U256;
83 fn block_base_fee_per_gas(&self) -> U256;
85 fn chain_id(&self) -> U256;
87
88 fn exists(&self, address: H160) -> bool;
90 fn basic(&self, address: H160) -> Basic;
92 fn code(&self, address: H160) -> Vec<u8>;
94 fn storage(&self, address: H160, index: H256) -> H256;
96 fn is_empty_storage(&self, address: H160) -> bool;
98 fn original_storage(&self, address: H160, index: H256) -> Option<H256>;
100 fn blob_gas_price(&self) -> Option<u128>;
104 fn get_blob_hash(&self, index: usize) -> Option<U256>;
107}
108
109pub trait ApplyBackend {
111 fn apply<A, I, L>(&mut self, values: A, logs: L, delete_empty: bool)
113 where
114 A: IntoIterator<Item = Apply<I>>,
115 I: IntoIterator<Item = (H256, H256)>,
116 L: IntoIterator<Item = Log>;
117}