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§
Sourcefn new(database: Self::Database) -> Self
fn new(database: Self::Database) -> Self
Creates new Journaled state.
Dont forget to set spec_id.
Sourcefn sload(
&mut self,
address: Address,
key: StorageKey,
) -> Result<StateLoad<StorageValue>, <Self::Database as Database>::Error>
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.
Sourcefn sstore(
&mut self,
address: Address,
key: StorageKey,
value: StorageValue,
) -> Result<StateLoad<SStoreResult>, <Self::Database as Database>::Error>
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.
Sourcefn tload(&mut self, address: Address, key: StorageKey) -> StorageValue
fn tload(&mut self, address: Address, key: StorageKey) -> StorageValue
Loads transient storage value.
Sourcefn tstore(&mut self, address: Address, key: StorageKey, value: StorageValue)
fn tstore(&mut self, address: Address, key: StorageKey, value: StorageValue)
Stores transient storage value.
Sourcefn selfdestruct(
&mut self,
address: Address,
target: Address,
) -> Result<StateLoad<SelfDestructResult>, <Self::Database as Database>::Error>
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.
Sourcefn warm_account_and_storage(
&mut self,
address: Address,
storage_keys: impl IntoIterator<Item = StorageKey>,
) -> Result<(), <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>
Warms the account and storage.
Sourcefn warm_account(&mut self, address: Address)
fn warm_account(&mut self, address: Address)
Warms the account.
Sourcefn warm_precompiles(&mut self, addresses: HashSet<Address>)
fn warm_precompiles(&mut self, addresses: HashSet<Address>)
Warms the precompiles.
Sourcefn precompile_addresses(&self) -> &HashSet<Address>
fn precompile_addresses(&self) -> &HashSet<Address>
Returns the addresses of the precompiles.
Sourcefn set_spec_id(&mut self, spec_id: SpecId)
fn set_spec_id(&mut self, spec_id: SpecId)
Sets the spec id.
Sourcefn touch_account(&mut self, address: Address)
fn touch_account(&mut self, address: Address)
Touches the account.
Sourcefn transfer(
&mut self,
from: Address,
to: Address,
balance: U256,
) -> Result<Option<TransferError>, <Self::Database as Database>::Error>
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.
Sourcefn caller_accounting_journal_entry(
&mut self,
address: Address,
old_balance: U256,
bump_nonce: bool,
)
fn caller_accounting_journal_entry( &mut self, address: Address, old_balance: U256, bump_nonce: bool, )
Increments the balance of the account.
Sourcefn balance_incr(
&mut self,
address: Address,
balance: U256,
) -> Result<(), <Self::Database as Database>::Error>
fn balance_incr( &mut self, address: Address, balance: U256, ) -> Result<(), <Self::Database as Database>::Error>
Increments the balance of the account.
Sourcefn nonce_bump_journal_entry(&mut self, address: Address)
fn nonce_bump_journal_entry(&mut self, address: Address)
Increments the nonce of the account.
Sourcefn load_account(
&mut self,
address: Address,
) -> Result<StateLoad<&mut Account>, <Self::Database as Database>::Error>
fn load_account( &mut self, address: Address, ) -> Result<StateLoad<&mut Account>, <Self::Database as Database>::Error>
Loads the account.
Sourcefn load_account_code(
&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>
Loads the account code.
Sourcefn load_account_delegated(
&mut self,
address: Address,
) -> Result<StateLoad<AccountLoad>, <Self::Database as Database>::Error>
fn load_account_delegated( &mut self, address: Address, ) -> Result<StateLoad<AccountLoad>, <Self::Database as Database>::Error>
Loads the account delegated.
Sourcefn set_code_with_hash(&mut self, address: Address, code: Bytecode, hash: B256)
fn set_code_with_hash(&mut self, address: Address, code: Bytecode, hash: B256)
Sets bytecode with hash. Assume that account is warm.
Sourcefn checkpoint(&mut self) -> JournalCheckpoint
fn checkpoint(&mut self) -> JournalCheckpoint
Creates a checkpoint of the current state. State can be revert to this point if needed.
Sourcefn checkpoint_commit(&mut self)
fn checkpoint_commit(&mut self)
Commits the changes made since the last checkpoint.
Sourcefn checkpoint_revert(&mut self, checkpoint: JournalCheckpoint)
fn checkpoint_revert(&mut self, checkpoint: JournalCheckpoint)
Reverts the changes made since the last checkpoint.
Sourcefn create_account_checkpoint(
&mut self,
caller: Address,
address: Address,
balance: U256,
spec_id: SpecId,
) -> Result<JournalCheckpoint, TransferError>
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.
Sourcefn discard_tx(&mut self)
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.
Provided Methods§
Sourcefn set_code(&mut self, address: Address, code: Bytecode)
fn set_code(&mut self, address: Address, code: Bytecode)
Sets bytecode and calculates hash.
Assume account is warm.
Sourcefn code(
&mut self,
address: Address,
) -> Result<StateLoad<Bytes>, <Self::Database as Database>::Error>
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.
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.