reth_storage_api/
hashing.rs1use crate::ChangesetEntry;
2use alloc::collections::{BTreeMap, BTreeSet};
3use alloy_primitives::{map::B256Map, Address, BlockNumber, B256};
4use auto_impl::auto_impl;
5use core::ops::RangeBounds;
6use reth_db_api::models::BlockNumberAddress;
7use reth_db_models::AccountBeforeTx;
8use reth_primitives_traits::{Account, StorageEntry};
9use reth_storage_errors::provider::ProviderResult;
10
11#[auto_impl(&, Box)]
13pub trait HashingWriter: Send {
14 fn unwind_account_hashing<'a>(
20 &self,
21 changesets: impl Iterator<Item = &'a (BlockNumber, AccountBeforeTx)>,
22 ) -> ProviderResult<BTreeMap<B256, Option<Account>>>;
23
24 fn unwind_account_hashing_range(
30 &self,
31 range: impl RangeBounds<BlockNumber>,
32 ) -> ProviderResult<BTreeMap<B256, Option<Account>>>;
33
34 fn insert_account_for_hashing(
40 &self,
41 accounts: impl IntoIterator<Item = (Address, Option<Account>)>,
42 ) -> ProviderResult<BTreeMap<B256, Option<Account>>>;
43
44 fn unwind_storage_hashing(
50 &self,
51 changesets: impl Iterator<Item = (BlockNumberAddress, ChangesetEntry)>,
52 ) -> ProviderResult<B256Map<BTreeSet<B256>>>;
53
54 fn unwind_storage_hashing_range(
60 &self,
61 range: impl RangeBounds<BlockNumber>,
62 ) -> ProviderResult<B256Map<BTreeSet<B256>>>;
63
64 fn insert_storage_for_hashing(
70 &self,
71 storages: impl IntoIterator<Item = (Address, impl IntoIterator<Item = StorageEntry>)>,
72 ) -> ProviderResult<B256Map<BTreeSet<B256>>>;
73}