Skip to main content

Database

Trait Database 

pub trait Database {
    type Error: DBErrorMarker;

    // Required methods
    fn basic(
        &mut self,
        address: Address,
    ) -> Result<Option<AccountInfo>, Self::Error>;
    fn code_by_hash(
        &mut self,
        code_hash: FixedBytes<32>,
    ) -> Result<Bytecode, Self::Error>;
    fn storage(
        &mut self,
        address: Address,
        index: Uint<256, 4>,
    ) -> Result<Uint<256, 4>, Self::Error>;
    fn block_hash(&mut self, number: u64) -> Result<FixedBytes<32>, Self::Error>;

    // Provided method
    fn storage_by_account_id(
        &mut self,
        address: Address,
        account_id: AccountId,
        storage_key: Uint<256, 4>,
    ) -> Result<Uint<256, 4>, Self::Error> { ... }
}
Expand description

EVM database interface.

Required Associated Types§

type Error: DBErrorMarker

The database error type.

Required Methods§

fn basic( &mut self, address: Address, ) -> Result<Option<AccountInfo>, Self::Error>

Gets basic account information.

fn code_by_hash( &mut self, code_hash: FixedBytes<32>, ) -> Result<Bytecode, Self::Error>

Gets account code by its hash.

fn storage( &mut self, address: Address, index: Uint<256, 4>, ) -> Result<Uint<256, 4>, Self::Error>

Gets storage value of address at index.

fn block_hash(&mut self, number: u64) -> Result<FixedBytes<32>, Self::Error>

Gets block hash by block number.

Provided Methods§

fn storage_by_account_id( &mut self, address: Address, account_id: AccountId, storage_key: Uint<256, 4>, ) -> Result<Uint<256, 4>, Self::Error>

Gets storage value of account by its id. By default call Database::storage method.

If basic account sets account_id inside AccountInfo::account_id, evm will call this function with that given account_id. This can be useful if IndexMap is used to get faster access to the account.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

§

impl Database for BenchmarkDB

§

fn basic( &mut self, address: Address, ) -> Result<Option<AccountInfo>, <BenchmarkDB as Database>::Error>

Get basic account information.

§

fn code_by_hash( &mut self, code_hash: FixedBytes<32>, ) -> Result<Bytecode, <BenchmarkDB as Database>::Error>

Get account code by its hash

§

fn storage( &mut self, _address: Address, _index: Uint<256, 4>, ) -> Result<Uint<256, 4>, <BenchmarkDB as Database>::Error>

Get storage value of address at index.

§

type Error = Infallible

§

fn block_hash( &mut self, _number: u64, ) -> Result<FixedBytes<32>, <BenchmarkDB as Database>::Error>

§

impl<'a, T> Database for &'a mut T
where T: 'a + Database + ?Sized,

§

type Error = <T as Database>::Error

§

fn basic( &mut self, address: Address, ) -> Result<Option<AccountInfo>, <&'a mut T as Database>::Error>

§

fn code_by_hash( &mut self, code_hash: FixedBytes<32>, ) -> Result<Bytecode, <&'a mut T as Database>::Error>

§

fn storage( &mut self, address: Address, index: Uint<256, 4>, ) -> Result<Uint<256, 4>, <&'a mut T as Database>::Error>

§

fn storage_by_account_id( &mut self, address: Address, account_id: AccountId, storage_key: Uint<256, 4>, ) -> Result<Uint<256, 4>, <&'a mut T as Database>::Error>

§

fn block_hash( &mut self, number: u64, ) -> Result<FixedBytes<32>, <&'a mut T as Database>::Error>

§

impl<ExtDB> Database for CacheDB<ExtDB>
where ExtDB: DatabaseRef,

§

fn storage( &mut self, address: Address, index: Uint<256, 4>, ) -> Result<Uint<256, 4>, <CacheDB<ExtDB> as Database>::Error>

Get the value in an account’s storage slot.

It is assumed that account is already loaded.

§

type Error = <ExtDB as DatabaseRef>::Error

§

fn basic( &mut self, address: Address, ) -> Result<Option<AccountInfo>, <CacheDB<ExtDB> as Database>::Error>

§

fn code_by_hash( &mut self, code_hash: FixedBytes<32>, ) -> Result<Bytecode, <CacheDB<ExtDB> as Database>::Error>

§

fn block_hash( &mut self, number: u64, ) -> Result<FixedBytes<32>, <CacheDB<ExtDB> as Database>::Error>

§

impl<T> Database for Box<T>
where T: Database + ?Sized,

§

type Error = <T as Database>::Error

§

fn basic( &mut self, address: Address, ) -> Result<Option<AccountInfo>, <Box<T> as Database>::Error>

§

fn code_by_hash( &mut self, code_hash: FixedBytes<32>, ) -> Result<Bytecode, <Box<T> as Database>::Error>

§

fn storage( &mut self, address: Address, index: Uint<256, 4>, ) -> Result<Uint<256, 4>, <Box<T> as Database>::Error>

§

fn storage_by_account_id( &mut self, address: Address, account_id: AccountId, storage_key: Uint<256, 4>, ) -> Result<Uint<256, 4>, <Box<T> as Database>::Error>

§

fn block_hash( &mut self, number: u64, ) -> Result<FixedBytes<32>, <Box<T> as Database>::Error>

Implementors§

Source§

impl<DB: DatabaseRef> Database for CachedReadsDbMut<'_, DB>

Source§

impl<DB: EvmStateProvider> Database for StateProviderDatabase<DB>

§

impl<DB> Database for BalDatabase<DB>
where DB: Database,

§

impl<DB> Database for State<DB>
where DB: Database,

§

impl<E> Database for EmptyDBTyped<E>
where E: DBErrorMarker + Error + Send + Sync + 'static,

§

type Error = E

§

impl<L, R> Database for Either<L, R>
where L: Database, R: Database<Error = <L as Database>::Error>,

§

type Error = <L as Database>::Error

§

impl<T> Database for WrapDatabaseRef<T>
where T: DatabaseRef,

§

type Error = <T as DatabaseRef>::Error