Trait JournalTr

Source
pub trait JournalTr {
    type Database: Database;
    type State;

Show 36 methods // Required methods fn new(database: Self::Database) -> Self; fn db_mut(&mut self) -> &mut Self::Database; fn db(&self) -> &Self::Database; fn sload( &mut self, address: Address, key: StorageKey, ) -> Result<StateLoad<StorageValue>, <Self::Database as Database>::Error>; fn sstore( &mut self, address: Address, key: StorageKey, value: StorageValue, ) -> Result<StateLoad<SStoreResult>, <Self::Database as Database>::Error>; fn tload(&mut self, address: Address, key: StorageKey) -> StorageValue; fn tstore(&mut self, address: Address, key: StorageKey, value: StorageValue); fn log(&mut self, log: Log); fn selfdestruct( &mut self, address: Address, target: Address, ) -> Result<StateLoad<SelfDestructResult>, <Self::Database as Database>::Error>; fn warm_account_and_storage( &mut self, address: Address, storage_keys: impl IntoIterator<Item = StorageKey>, ) -> Result<(), <Self::Database as Database>::Error>; fn warm_account(&mut self, address: Address); fn warm_precompiles(&mut self, addresses: HashSet<Address>); fn precompile_addresses(&self) -> &HashSet<Address>; fn set_spec_id(&mut self, spec_id: SpecId); fn touch_account(&mut self, address: Address); fn transfer( &mut self, from: Address, to: Address, balance: U256, ) -> Result<Option<TransferError>, <Self::Database as Database>::Error>; fn caller_accounting_journal_entry( &mut self, address: Address, old_balance: U256, bump_nonce: bool, ); fn balance_incr( &mut self, address: Address, balance: U256, ) -> Result<(), <Self::Database as Database>::Error>; fn nonce_bump_journal_entry(&mut self, address: Address); fn load_account( &mut self, address: Address, ) -> Result<StateLoad<&mut Account>, <Self::Database as Database>::Error>; fn load_account_code( &mut self, address: Address, ) -> Result<StateLoad<&mut Account>, <Self::Database as Database>::Error>; fn load_account_delegated( &mut self, address: Address, ) -> Result<StateLoad<AccountLoad>, <Self::Database as Database>::Error>; fn set_code_with_hash( &mut self, address: Address, code: Bytecode, hash: B256, ); fn checkpoint(&mut self) -> JournalCheckpoint; fn checkpoint_commit(&mut self); fn checkpoint_revert(&mut self, checkpoint: JournalCheckpoint); fn create_account_checkpoint( &mut self, caller: Address, address: Address, balance: U256, spec_id: SpecId, ) -> Result<JournalCheckpoint, TransferError>; fn depth(&self) -> usize; fn take_logs(&mut self) -> Vec<Log>; fn commit_tx(&mut self); fn discard_tx(&mut self); fn finalize(&mut self) -> Self::State; // Provided methods fn set_code(&mut self, address: Address, code: Bytecode) { ... } fn code( &mut self, address: Address, ) -> Result<StateLoad<Bytes>, <Self::Database as Database>::Error> { ... } fn code_hash( &mut self, address: Address, ) -> Result<StateLoad<B256>, <Self::Database as Database>::Error> { ... } fn clear(&mut self) { ... }
}
Expand description

Trait that contains database and journal of all changes that were made to the state.

Required Associated Types§

Required Methods§

Source

fn new(database: Self::Database) -> Self

Creates new Journaled state.

Dont forget to set spec_id.

Source

fn db_mut(&mut self) -> &mut Self::Database

Returns the database.

Source

fn db(&self) -> &Self::Database

Returns the mutable database.

Source

fn sload( &mut self, address: Address, key: StorageKey, ) -> Result<StateLoad<StorageValue>, <Self::Database as Database>::Error>

Returns the storage value from Journal state.

Loads the storage from database if not found in Journal state.

Source

fn sstore( &mut self, address: Address, key: StorageKey, value: StorageValue, ) -> Result<StateLoad<SStoreResult>, <Self::Database as Database>::Error>

Stores the storage value in Journal state.

Source

fn tload(&mut self, address: Address, key: StorageKey) -> StorageValue

Loads transient storage value.

Source

fn tstore(&mut self, address: Address, key: StorageKey, value: StorageValue)

Stores transient storage value.

Source

fn log(&mut self, log: Log)

Logs the log in Journal state.

Source

fn selfdestruct( &mut self, address: Address, target: Address, ) -> Result<StateLoad<SelfDestructResult>, <Self::Database as Database>::Error>

Marks the account for selfdestruction and transfers all the balance to the target.

Source

fn warm_account_and_storage( &mut self, address: Address, storage_keys: impl IntoIterator<Item = StorageKey>, ) -> Result<(), <Self::Database as Database>::Error>

Warms the account and storage.

Source

fn warm_account(&mut self, address: Address)

Warms the account.

Source

fn warm_precompiles(&mut self, addresses: HashSet<Address>)

Warms the precompiles.

Source

fn precompile_addresses(&self) -> &HashSet<Address>

Returns the addresses of the precompiles.

Source

fn set_spec_id(&mut self, spec_id: SpecId)

Sets the spec id.

Source

fn touch_account(&mut self, address: Address)

Touches the account.

Source

fn transfer( &mut self, from: Address, to: Address, balance: U256, ) -> Result<Option<TransferError>, <Self::Database as Database>::Error>

Transfers the balance from one account to another.

Source

fn caller_accounting_journal_entry( &mut self, address: Address, old_balance: U256, bump_nonce: bool, )

Increments the balance of the account.

Source

fn balance_incr( &mut self, address: Address, balance: U256, ) -> Result<(), <Self::Database as Database>::Error>

Increments the balance of the account.

Source

fn nonce_bump_journal_entry(&mut self, address: Address)

Increments the nonce of the account.

Source

fn load_account( &mut self, address: Address, ) -> Result<StateLoad<&mut Account>, <Self::Database as Database>::Error>

Loads the account.

Source

fn load_account_code( &mut self, address: Address, ) -> Result<StateLoad<&mut Account>, <Self::Database as Database>::Error>

Loads the account code.

Source

fn load_account_delegated( &mut self, address: Address, ) -> Result<StateLoad<AccountLoad>, <Self::Database as Database>::Error>

Loads the account delegated.

Source

fn set_code_with_hash(&mut self, address: Address, code: Bytecode, hash: B256)

Sets bytecode with hash. Assume that account is warm.

Source

fn checkpoint(&mut self) -> JournalCheckpoint

Creates a checkpoint of the current state. State can be revert to this point if needed.

Source

fn checkpoint_commit(&mut self)

Commits the changes made since the last checkpoint.

Source

fn checkpoint_revert(&mut self, checkpoint: JournalCheckpoint)

Reverts the changes made since the last checkpoint.

Source

fn create_account_checkpoint( &mut self, caller: Address, address: Address, balance: U256, spec_id: SpecId, ) -> Result<JournalCheckpoint, TransferError>

Creates a checkpoint of the account creation.

Source

fn depth(&self) -> usize

Returns the depth of the journal.

Source

fn take_logs(&mut self) -> Vec<Log>

Take logs from journal.

Source

fn commit_tx(&mut self)

Commit current transaction journal and returns transaction logs.

Source

fn discard_tx(&mut self)

Discard current transaction journal by removing journal entries and logs and incrementing the transaction id.

This function is useful to discard intermediate state that is interrupted by error and it will not revert any already committed changes and it is safe to call it multiple times.

Source

fn finalize(&mut self) -> Self::State

Clear current journal resetting it to initial state and return changes state.

Provided Methods§

Source

fn set_code(&mut self, address: Address, code: Bytecode)

Sets bytecode and calculates hash.

Assume account is warm.

Source

fn code( &mut self, address: Address, ) -> Result<StateLoad<Bytes>, <Self::Database as Database>::Error>

Returns account code bytes and if address is cold loaded.

In case of EOF account it will return EOF_MAGIC (0xEF00) as code.

Source

fn code_hash( &mut self, address: Address, ) -> Result<StateLoad<B256>, <Self::Database as Database>::Error>

Gets code hash of account.

In case of EOF account it will return EOF_MAGIC_HASH (the hash of 0xEF00).

Source

fn clear(&mut self)

Called at the end of the transaction to clean all residue data from journal.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§