Skip to main content

ethrex_vm/
db.rs

1use crate::EvmError;
2use dyn_clone::DynClone;
3use ethrex_common::{
4    Address, H256, U256,
5    types::{AccountState, ChainConfig, Code, CodeMetadata},
6};
7
8pub trait VmDatabase: Send + Sync + DynClone {
9    fn get_account_state(&self, address: Address) -> Result<Option<AccountState>, EvmError>;
10    fn get_storage_slot(&self, address: Address, key: H256) -> Result<Option<U256>, EvmError>;
11    fn get_block_hash(&self, block_number: u64) -> Result<H256, EvmError>;
12    fn get_chain_config(&self) -> Result<ChainConfig, EvmError>;
13    fn get_account_code(&self, code_hash: H256) -> Result<Code, EvmError>;
14    fn get_code_metadata(&self, code_hash: H256) -> Result<CodeMetadata, EvmError>;
15}
16
17dyn_clone::clone_trait_object!(VmDatabase);
18
19pub type DynVmDatabase = Box<dyn VmDatabase + Send + Sync + 'static>;