pub struct AccountChanges {
pub address: Address,
pub storage_changes: Vec<SlotChanges>,
pub storage_reads: Vec<Uint<256, 4>>,
pub balance_changes: Vec<BalanceChange>,
pub nonce_changes: Vec<NonceChange>,
pub code_changes: Vec<CodeChange>,
}Expand description
This struct is used to track the changes across accounts in a block.
Fields§
§address: AddressThe address of the account whose changes are stored.
storage_changes: Vec<SlotChanges>List of slot changes for this account.
storage_reads: Vec<Uint<256, 4>>List of storage reads for this account.
balance_changes: Vec<BalanceChange>List of balance changes for this account.
nonce_changes: Vec<NonceChange>List of nonce changes for this account.
code_changes: Vec<CodeChange>List of code changes for this account.
Implementations§
Source§impl AccountChanges
impl AccountChanges
Sourcepub const fn new(address: Address) -> AccountChanges
pub const fn new(address: Address) -> AccountChanges
Creates a new AccountChanges instance for the given address with empty vectors.
Sourcepub fn with_capacity(address: Address, capacity: usize) -> AccountChanges
pub fn with_capacity(address: Address, capacity: usize) -> AccountChanges
Creates a new AccountChanges instance for the given address with specified capacity.
Sourcepub fn storage_changes(&self) -> &[SlotChanges]
pub fn storage_changes(&self) -> &[SlotChanges]
Returns the storage changes for this account.
Sourcepub fn storage_post_states(
&self,
) -> impl Iterator<Item = (Uint<256, 4>, Uint<256, 4>)>
pub fn storage_post_states( &self, ) -> impl Iterator<Item = (Uint<256, 4>, Uint<256, 4>)>
Returns an iterator over the post-state value for each changed storage slot.
The post-state value is taken from the last recorded change for each slot.
Sourcepub fn merge(&mut self, incoming: AccountChanges)
pub fn merge(&mut self, incoming: AccountChanges)
Merges another account change set into this one.
Storage changes for matching slots are grouped together. Storage reads are normalized after
merging so that written slots are represented by storage_changes, while storage_reads
only contains unique read-only slots in first-seen order. This preserves the EIP-7928
invariant that a storage slot appears in either reads or changes, but not both, after
independently valid account change sets are combined.
This preserves relative ordering by appending incoming changes to existing changes. Call
Self::sort after merging if canonical EIP-7928 ordering is required.
§Panics
Panics if the two account change sets have different addresses.
Sourcepub fn storage_reads(&self) -> &[Uint<256, 4>]
pub fn storage_reads(&self) -> &[Uint<256, 4>]
Returns the storage reads for this account.
Sourcepub fn balance_changes(&self) -> &[BalanceChange]
pub fn balance_changes(&self) -> &[BalanceChange]
Returns the balance changes for this account.
Sourcepub fn nonce_changes(&self) -> &[NonceChange]
pub fn nonce_changes(&self) -> &[NonceChange]
Returns the nonce changes for this account.
Sourcepub fn code_changes(&self) -> &[CodeChange]
pub fn code_changes(&self) -> &[CodeChange]
Returns the code changes for this account.
Sourcepub fn sort(&mut self)
pub fn sort(&mut self)
Sorts this account’s changes in-place according to the account-local EIP-7928 ordering rules.
This applies the account-local ordering required by the “Ordering, Uniqueness and Determinism” section of EIP-7928:
storage_changesare sorted lexicographically by storage key- each per-slot
StorageChangelist is sorted by block access index in ascending order storage_readsare sorted lexicographically by storage keybalance_changes,nonce_changes, andcode_changesare sorted by block access index in ascending order
Per-slot storage change ordering is delegated to SlotChanges::sort.
This method only canonicalizes ordering for a single account. It does not enforce the EIP-7928 uniqueness constraints for storage keys or block access indexes.
Sourcepub const fn with_address(self, address: Address) -> AccountChanges
pub const fn with_address(self, address: Address) -> AccountChanges
Set the address.
Sourcepub fn with_storage_read(self, key: Uint<256, 4>) -> AccountChanges
pub fn with_storage_read(self, key: Uint<256, 4>) -> AccountChanges
Add a storage read slot.
Sourcepub fn with_storage_change(self, change: SlotChanges) -> AccountChanges
pub fn with_storage_change(self, change: SlotChanges) -> AccountChanges
Add a storage change (multiple writes to a slot grouped in SlotChanges).
Sourcepub fn with_balance_change(self, change: BalanceChange) -> AccountChanges
pub fn with_balance_change(self, change: BalanceChange) -> AccountChanges
Add a balance change.
Sourcepub fn with_nonce_change(self, change: NonceChange) -> AccountChanges
pub fn with_nonce_change(self, change: NonceChange) -> AccountChanges
Add a nonce change.
Sourcepub fn with_code_change(self, change: CodeChange) -> AccountChanges
pub fn with_code_change(self, change: CodeChange) -> AccountChanges
Add a code change.
Sourcepub fn extend_storage_reads<I>(self, iter: I) -> AccountChangeswhere
I: IntoIterator<Item = Uint<256, 4>>,
pub fn extend_storage_reads<I>(self, iter: I) -> AccountChangeswhere
I: IntoIterator<Item = Uint<256, 4>>,
Add multiple storage reads at once.
Sourcepub fn extend_storage_changes<I>(self, iter: I) -> AccountChangeswhere
I: IntoIterator<Item = SlotChanges>,
pub fn extend_storage_changes<I>(self, iter: I) -> AccountChangeswhere
I: IntoIterator<Item = SlotChanges>,
Add multiple slot changes at once.
Trait Implementations§
Source§impl<'arbitrary> Arbitrary<'arbitrary> for AccountChanges
impl<'arbitrary> Arbitrary<'arbitrary> for AccountChanges
Source§fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<AccountChanges, Error>
fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<AccountChanges, Error>
Self from the given unstructured data. Read moreSource§fn arbitrary_take_rest(
u: Unstructured<'arbitrary>,
) -> Result<AccountChanges, Error>
fn arbitrary_take_rest( u: Unstructured<'arbitrary>, ) -> Result<AccountChanges, Error>
Self from the entirety of the given
unstructured data. Read moreSource§fn size_hint(depth: usize) -> (usize, Option<usize>)
fn size_hint(depth: usize) -> (usize, Option<usize>)
Unstructured this type
needs to construct itself. Read moreSource§fn try_size_hint(
depth: usize,
) -> Result<(usize, Option<usize>), MaxRecursionReached>
fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>
Unstructured this type
needs to construct itself. Read moreSource§impl Clone for AccountChanges
impl Clone for AccountChanges
Source§fn clone(&self) -> AccountChanges
fn clone(&self) -> AccountChanges
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AccountChanges
impl Debug for AccountChanges
Source§impl Decodable for AccountChanges
impl Decodable for AccountChanges
Source§impl Default for AccountChanges
impl Default for AccountChanges
Source§fn default() -> AccountChanges
fn default() -> AccountChanges
Source§impl<'de> Deserialize<'de> for AccountChanges
impl<'de> Deserialize<'de> for AccountChanges
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<AccountChanges, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<AccountChanges, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Encodable for AccountChanges
impl Encodable for AccountChanges
impl Eq for AccountChanges
Source§impl FromIterator<AccountChanges> for Bal
impl FromIterator<AccountChanges> for Bal
Source§fn from_iter<I>(iter: I) -> Balwhere
I: IntoIterator<Item = AccountChanges>,
fn from_iter<I>(iter: I) -> Balwhere
I: IntoIterator<Item = AccountChanges>,
Source§impl Hash for AccountChanges
impl Hash for AccountChanges
Source§impl PartialEq for AccountChanges
impl PartialEq for AccountChanges
Source§fn eq(&self, other: &AccountChanges) -> bool
fn eq(&self, other: &AccountChanges) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for AccountChanges
impl Serialize for AccountChanges
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for AccountChanges
Auto Trait Implementations§
impl Freeze for AccountChanges
impl RefUnwindSafe for AccountChanges
impl Send for AccountChanges
impl Sync for AccountChanges
impl Unpin for AccountChanges
impl UnsafeUnpin for AccountChanges
impl UnwindSafe for AccountChanges
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> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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 moreLayout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 144 bytes