Skip to main content

foundry_evm_core/env/
journal.rs

1//! Access to execution journals and their native state.
2
3use crate::backend::JournaledState;
4use revm::{Database, Journal, inspector::JournalExt};
5
6/// Foundry extension for Journal type
7pub trait FoundryJournal: JournalExt {
8    /// Mutable access to the database and journal inner.
9    fn db_journal_inner_mut(&mut self) -> (&mut Self::Database, &mut JournaledState);
10
11    /// Reference to the journal inner.
12    fn journal_inner(&self) -> &JournaledState;
13
14    /// Captures Monad's reserve-balance tracker for the active transaction.
15    #[cfg(feature = "monad")]
16    fn capture_reserve_balance(
17        &self,
18    ) -> monad_revm::reserve_balance::tracker::ReserveBalanceTracker {
19        monad_revm::reserve_balance::tracker::ReserveBalanceTracker::default()
20    }
21
22    /// Restores Monad's reserve-balance tracker for the active transaction.
23    #[cfg(feature = "monad")]
24    fn restore_reserve_balance(
25        &mut self,
26        _tracker: monad_revm::reserve_balance::tracker::ReserveBalanceTracker,
27    ) {
28    }
29
30    /// Whether transaction boundaries currently preserve the reserve-balance tracker, e.g. for
31    /// an isolated call that models an inner call of the enclosing transaction rather than a
32    /// new one.
33    #[cfg(feature = "monad")]
34    fn preserves_reserve_balance(&self) -> bool {
35        false
36    }
37
38    /// Sets whether transaction boundaries preserve the reserve-balance tracker.
39    #[cfg(feature = "monad")]
40    fn set_preserve_reserve_balance(&mut self, _preserve: bool) {}
41}
42
43impl<DB: Database> FoundryJournal for Journal<DB> {
44    fn db_journal_inner_mut(&mut self) -> (&mut DB, &mut JournaledState) {
45        (&mut self.database, &mut self.inner)
46    }
47
48    fn journal_inner(&self) -> &JournaledState {
49        &self.inner
50    }
51}
52
53#[cfg(feature = "monad")]
54impl<DB: Database> FoundryJournal for monad_revm::MonadJournal<DB> {
55    fn db_journal_inner_mut(&mut self) -> (&mut DB, &mut JournaledState) {
56        Journal::db_journal_inner_mut(self)
57    }
58
59    fn journal_inner(&self) -> &JournaledState {
60        Journal::journal_inner(self)
61    }
62
63    fn capture_reserve_balance(
64        &self,
65    ) -> monad_revm::reserve_balance::tracker::ReserveBalanceTracker {
66        monad_revm::MonadJournalTr::reserve_balance(self).clone()
67    }
68
69    fn restore_reserve_balance(
70        &mut self,
71        tracker: monad_revm::reserve_balance::tracker::ReserveBalanceTracker,
72    ) {
73        *monad_revm::MonadJournalTr::reserve_balance_mut(self) = tracker;
74    }
75
76    fn preserves_reserve_balance(&self) -> bool {
77        monad_revm::MonadJournalTr::preserves_reserve_balance_tracker(self)
78    }
79
80    fn set_preserve_reserve_balance(&mut self, preserve: bool) {
81        monad_revm::MonadJournalTr::set_preserve_reserve_balance_tracker(self, preserve);
82    }
83}