pub struct BundleState {
pub state: HashMap<Address, BundleAccount>,
pub contracts: HashMap<B256, Bytecode>,
pub reverts: Reverts,
pub state_size: usize,
pub reverts_size: usize,
}
Expand description
Bundle state contain only values that got changed
For every account it contains both original and present state. This is needed to decide if there were any changes to the account.
Reverts and created when TransitionState is applied to BundleState. And can be used to revert BundleState to the state before transition.
Fields§
§state: HashMap<Address, BundleAccount>
Account state.
contracts: HashMap<B256, Bytecode>
All created contracts in this block.
reverts: Reverts
Changes to revert.
Note: Inside vector is not sorted by address. But it is unique by address.
state_size: usize
The size of the plain state in the bundle state.
reverts_size: usize
The size of reverts in the bundle state.
Implementations§
Source§impl BundleState
impl BundleState
Sourcepub fn builder(revert_range: RangeInclusive<u64>) -> BundleBuilder
pub fn builder(revert_range: RangeInclusive<u64>) -> BundleBuilder
Return builder instance for further manipulation
Sourcepub fn new(
state: impl IntoIterator<Item = (Address, Option<AccountInfo>, Option<AccountInfo>, HashMap<U256, (U256, U256)>)>,
reverts: impl IntoIterator<Item = impl IntoIterator<Item = (Address, Option<Option<AccountInfo>>, impl IntoIterator<Item = (U256, U256)>)>>,
contracts: impl IntoIterator<Item = (B256, Bytecode)>,
) -> Self
pub fn new( state: impl IntoIterator<Item = (Address, Option<AccountInfo>, Option<AccountInfo>, HashMap<U256, (U256, U256)>)>, reverts: impl IntoIterator<Item = impl IntoIterator<Item = (Address, Option<Option<AccountInfo>>, impl IntoIterator<Item = (U256, U256)>)>>, contracts: impl IntoIterator<Item = (B256, Bytecode)>, ) -> Self
Create it with new and old values of both Storage and AccountInfo.
Sourcepub fn size_hint(&self) -> usize
pub fn size_hint(&self) -> usize
Returns the approximate size of changes in the bundle state. The estimation is not precise, because the information about the number of destroyed entries that need to be removed is not accessible to the bundle state.
Sourcepub fn state(&self) -> &HashMap<Address, BundleAccount>
pub fn state(&self) -> &HashMap<Address, BundleAccount>
Return reference to the state.
Sourcepub fn account(&self, address: &Address) -> Option<&BundleAccount>
pub fn account(&self, address: &Address) -> Option<&BundleAccount>
Get account from state
Sourcepub fn apply_transitions_and_create_reverts(
&mut self,
transitions: TransitionState,
retention: BundleRetention,
)
pub fn apply_transitions_and_create_reverts( &mut self, transitions: TransitionState, retention: BundleRetention, )
Consume TransitionState
by applying the changes and creating the
reverts.
If BundleRetention::includes_reverts is true
, then the reverts will
be retained.
Sourcepub fn to_plain_state(
&self,
is_value_known: OriginalValuesKnown,
) -> StateChangeset
pub fn to_plain_state( &self, is_value_known: OriginalValuesKnown, ) -> StateChangeset
Generate a StateChangeset
from the bundle state without consuming
it.
Sourcepub fn into_plain_state(
self,
is_value_known: OriginalValuesKnown,
) -> StateChangeset
👎Deprecated: Use to_plain_state
instead
pub fn into_plain_state( self, is_value_known: OriginalValuesKnown, ) -> StateChangeset
to_plain_state
insteadConvert the bundle state into a StateChangeset
.
Sourcepub fn to_plain_state_and_reverts(
&self,
is_value_known: OriginalValuesKnown,
) -> (StateChangeset, PlainStateReverts)
pub fn to_plain_state_and_reverts( &self, is_value_known: OriginalValuesKnown, ) -> (StateChangeset, PlainStateReverts)
Generate a StateChangeset
and PlainStateReverts
from the bundle
state.
Sourcepub fn into_plain_state_and_reverts(
self,
is_value_known: OriginalValuesKnown,
) -> (StateChangeset, PlainStateReverts)
👎Deprecated: Use to_plain_state_and_reverts
instead
pub fn into_plain_state_and_reverts( self, is_value_known: OriginalValuesKnown, ) -> (StateChangeset, PlainStateReverts)
to_plain_state_and_reverts
insteadConsume the bundle state and split it into a StateChangeset
and a
PlainStateReverts
.
Sourcepub fn extend_state(&mut self, other_state: HashMap<Address, BundleAccount>)
pub fn extend_state(&mut self, other_state: HashMap<Address, BundleAccount>)
Extend the bundle with other state
Update the other
state only if other
is not flagged as destroyed.
Sourcepub fn extend(&mut self, other: Self)
pub fn extend(&mut self, other: Self)
Extend the state with state that is build on top of it.
If storage was wiped in other
state, copy this
plain state
and put it inside other
revert (if there is no duplicates of course).
If this
and other
accounts were both destroyed invalidate second
wipe flag (from other
). As wiping from database should be done only once
and we already transferred all potentially missing storages to the other
revert.
Sourcepub fn take_n_reverts(&mut self, reverts_to_take: usize) -> Reverts
pub fn take_n_reverts(&mut self, reverts_to_take: usize) -> Reverts
Take first N raw reverts from the BundleState.
Sourcepub fn take_all_reverts(&mut self) -> Reverts
pub fn take_all_reverts(&mut self) -> Reverts
Return and clear all reverts from BundleState
Sourcepub fn revert_latest(&mut self) -> bool
pub fn revert_latest(&mut self) -> bool
Reverts the state changes of the latest transition
Note: This is the same as BundleState::revert(1)
Returns true if the state was reverted.
Sourcepub fn revert(&mut self, num_transitions: usize)
pub fn revert(&mut self, num_transitions: usize)
Reverts the state changes by N transitions back.
See also Self::revert_latest
Sourcepub fn prepend_state(&mut self, other: BundleState)
pub fn prepend_state(&mut self, other: BundleState)
Prepends present the state with the given BundleState. It adds changes from the given state but does not override any existing changes.
Reverts are not updated.
Trait Implementations§
Source§impl Clone for BundleState
impl Clone for BundleState
Source§fn clone(&self) -> BundleState
fn clone(&self) -> BundleState
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for BundleState
impl Debug for BundleState
Source§impl Default for BundleState
impl Default for BundleState
Source§fn default() -> BundleState
fn default() -> BundleState
Source§impl PartialEq for BundleState
impl PartialEq for BundleState
impl Eq for BundleState
impl StructuralPartialEq for BundleState
Auto Trait Implementations§
impl Freeze for BundleState
impl RefUnwindSafe for BundleState
impl Send for BundleState
impl Sync for BundleState
impl Unpin for BundleState
impl UnwindSafe for BundleState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.