JournaledAccount

Struct JournaledAccount 

Source
pub struct JournaledAccount<'a, ENTRY: JournalEntryTr> { /* private fields */ }
Expand description

Journaled account contains both mutable account and journal entries.

Useful to encapsulate account and journal entries together. So when account gets changed, we can add a journal entry for it.

Implementations§

Source§

impl<'a, ENTRY: JournalEntryTr> JournaledAccount<'a, ENTRY>

Source

pub fn into_account_ref(self) -> &'a Account

Consumes the journaled account and returns the mutable account.

Source

pub fn new( address: Address, account: &'a mut Account, journal_entries: &'a mut Vec<ENTRY>, ) -> Self

Creates a new journaled account.

Source

pub fn balance(&self) -> &U256

Returns the balance of the account.

Source

pub fn nonce(&self) -> u64

Returns the nonce of the account.

Source

pub fn code_hash(&self) -> &B256

Returns the code hash of the account.

Source

pub fn code(&self) -> Option<&Bytecode>

Returns the code of the account.

Source

pub fn touch(&mut self)

Touches the account.

Source

pub fn set_balance(&mut self, balance: U256)

Sets the balance of the account.

If balance is the same, we don’t add a journal entry.

Touches the account in all cases.

Source

pub fn incr_balance(&mut self, balance: U256) -> bool

Increments the balance of the account.

Touches the account in all cases.

Source

pub fn decr_balance(&mut self, balance: U256) -> bool

Decrements the balance of the account.

Touches the account in all cases.

Source

pub fn bump_nonce(&mut self) -> bool

Bumps the nonce of the account.

Touches the account in all cases.

Returns true if nonce was bumped, false if nonce is at the max value.

Source

pub fn set_code(&mut self, code_hash: B256, code: Bytecode)

Sets the code of the account.

Touches the account in all cases.

Source

pub fn set_code_and_hash_slow(&mut self, code: Bytecode)

Sets the code of the account. Calculates hash of the code.

Touches the account in all cases.

Source

pub fn delegate(&mut self, address: Address)

Delegates the account to another address (EIP-7702).

This touches the account, sets the code to the delegation designation, and bumps the nonce.

Methods from Deref<Target = Account>§

pub fn state_clear_aware_is_empty(&self, spec: SpecId) -> bool

Checks if account is empty and check if empty state before spurious dragon hardfork.

pub fn is_selfdestructed(&self) -> bool

Is account marked for self destruct.

pub fn is_touched(&self) -> bool

If account status is marked as touched.

pub fn is_cold_transaction_id(&self, transaction_id: usize) -> bool

Is account warm for given transaction id.

pub fn is_created_locally(&self) -> bool

Is account locally created

pub fn is_selfdestructed_locally(&self) -> bool

Is account locally selfdestructed

pub fn is_loaded_as_not_existing(&self) -> bool

Is account loaded as not existing from database.

This is needed for pre spurious dragon hardforks where existing and empty were two separate states.

pub fn is_loaded_as_not_existing_not_touched(&self) -> bool

Is account loaded as not existing from database and not touched.

pub fn is_created(&self) -> bool

Is account newly created in this transaction.

pub fn is_empty(&self) -> bool

Is account empty, check if nonce and balance are zero and code is empty.

pub fn changed_storage_slots( &self, ) -> impl Iterator<Item = (&Uint<256, 4>, &EvmStorageSlot)>

Returns an iterator over the storage slots that have been changed.

See also [EvmStorageSlot::is_changed].

Trait Implementations§

Source§

impl<'a, ENTRY: Debug + JournalEntryTr> Debug for JournaledAccount<'a, ENTRY>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, ENTRY: JournalEntryTr> Deref for JournaledAccount<'a, ENTRY>

Source§

type Target = Account

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<'a, ENTRY: PartialEq + JournalEntryTr> PartialEq for JournaledAccount<'a, ENTRY>

Source§

fn eq(&self, other: &JournaledAccount<'a, ENTRY>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a, ENTRY: Eq + JournalEntryTr> Eq for JournaledAccount<'a, ENTRY>

Source§

impl<'a, ENTRY: JournalEntryTr> StructuralPartialEq for JournaledAccount<'a, ENTRY>

Auto Trait Implementations§

§

impl<'a, ENTRY> Freeze for JournaledAccount<'a, ENTRY>

§

impl<'a, ENTRY> RefUnwindSafe for JournaledAccount<'a, ENTRY>
where ENTRY: RefUnwindSafe,

§

impl<'a, ENTRY> Send for JournaledAccount<'a, ENTRY>
where ENTRY: Send,

§

impl<'a, ENTRY> Sync for JournaledAccount<'a, ENTRY>
where ENTRY: Sync,

§

impl<'a, ENTRY> Unpin for JournaledAccount<'a, ENTRY>

§

impl<'a, ENTRY> !UnwindSafe for JournaledAccount<'a, ENTRY>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.