foundry_evm_core/backend/
snapshot.rs1use super::JournaledState;
2use alloy_evm::EvmEnv;
3use alloy_primitives::{
4 B256, U256,
5 map::{AddressHashMap, HashMap},
6};
7use revm::state::AccountInfo;
8use serde::{Deserialize, Serialize};
9
10#[derive(Clone, Debug, Default, Serialize, Deserialize)]
12pub struct StateSnapshot {
13 pub accounts: AddressHashMap<AccountInfo>,
14 pub storage: AddressHashMap<HashMap<U256, U256>>,
15 pub block_hashes: HashMap<U256, B256>,
16}
17
18#[derive(Clone, Debug)]
20pub struct BackendStateSnapshot<T> {
21 pub db: T,
22 pub journaled_state: JournaledState,
24 pub snap_evm_env: EvmEnv,
26}
27
28impl<T> BackendStateSnapshot<T> {
29 pub fn new(db: T, journaled_state: JournaledState, evm_env: EvmEnv) -> Self {
31 Self { db, journaled_state, snap_evm_env: evm_env }
32 }
33
34 pub fn merge(&mut self, current: &JournaledState) {
42 self.journaled_state.logs.clone_from(¤t.logs);
43 }
44}
45
46#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
50pub enum RevertStateSnapshotAction {
51 #[default]
53 RevertRemove,
54 RevertKeep,
56}
57
58impl RevertStateSnapshotAction {
59 pub fn is_keep(&self) -> bool {
61 matches!(self, Self::RevertKeep)
62 }
63}