reth_storage_api/
account.rs
1use alloc::{
2 collections::{BTreeMap, BTreeSet},
3 vec::Vec,
4};
5use alloy_primitives::{Address, BlockNumber};
6use auto_impl::auto_impl;
7use core::ops::{RangeBounds, RangeInclusive};
8use reth_db_models::AccountBeforeTx;
9use reth_primitives_traits::Account;
10use reth_storage_errors::provider::ProviderResult;
11
12#[auto_impl(&, Arc, Box)]
14pub trait AccountReader: Send + Sync {
15 fn basic_account(&self, address: &Address) -> ProviderResult<Option<Account>>;
19}
20
21#[auto_impl(&, Arc, Box)]
23pub trait AccountExtReader: Send + Sync {
24 fn changed_accounts_with_range(
26 &self,
27 _range: impl RangeBounds<BlockNumber>,
28 ) -> ProviderResult<BTreeSet<Address>>;
29
30 fn basic_accounts(
35 &self,
36 _iter: impl IntoIterator<Item = Address>,
37 ) -> ProviderResult<Vec<(Address, Option<Account>)>>;
38
39 fn changed_accounts_and_blocks_with_range(
44 &self,
45 range: RangeInclusive<BlockNumber>,
46 ) -> ProviderResult<BTreeMap<Address, Vec<BlockNumber>>>;
47}
48
49#[auto_impl(&, Arc, Box)]
51pub trait ChangeSetReader: Send + Sync {
52 fn account_block_changeset(
54 &self,
55 block_number: BlockNumber,
56 ) -> ProviderResult<Vec<AccountBeforeTx>>;
57}