Skip to content

Commit 6f2b119

Browse files
committed
feat: introduce HashedStorageProvider
1 parent 3209833 commit 6f2b119

File tree

13 files changed

+137
-23
lines changed

13 files changed

+137
-23
lines changed

crates/chain-state/src/in_memory.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -870,8 +870,8 @@ mod tests {
870870
use reth_errors::ProviderResult;
871871
use reth_primitives::{Account, Bytecode, Receipt, Requests};
872872
use reth_storage_api::{
873-
AccountReader, BlockHashReader, HashedPostStateProvider, StateProofProvider, StateProvider,
874-
StateRootProvider, StorageRootProvider,
873+
AccountReader, BlockHashReader, HashedPostStateProvider, HashedStorageProvider,
874+
StateProofProvider, StateProvider, StateRootProvider, StorageRootProvider,
875875
};
876876
use reth_trie::{AccountProof, HashedStorage, MultiProof, StorageProof, TrieInput};
877877

@@ -1028,6 +1028,15 @@ mod tests {
10281028
}
10291029
}
10301030

1031+
impl HashedStorageProvider for MockStateProvider {
1032+
fn hashed_storage_from_bundle_account(
1033+
&self,
1034+
_account: &reth_execution_types::BundleAccount,
1035+
) -> HashedStorage {
1036+
HashedStorage::default()
1037+
}
1038+
}
1039+
10311040
#[test]
10321041
fn test_in_memory_state_impl_state_by_hash() {
10331042
let mut state_by_hash = HashMap::default();

crates/chain-state/src/memory_overlay.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use alloy_primitives::{
77
use reth_errors::ProviderResult;
88
use reth_primitives::{Account, Bytecode};
99
use reth_storage_api::{
10-
AccountReader, BlockHashReader, HashedPostStateProvider, StateProofProvider, StateProvider,
11-
StateProviderBox, StateRootProvider, StorageRootProvider,
10+
AccountReader, BlockHashReader, HashedPostStateProvider, HashedStorageProvider,
11+
StateProofProvider, StateProvider, StateProviderBox, StateRootProvider, StorageRootProvider,
1212
};
1313
use reth_trie::{
1414
updates::TrieUpdates, AccountProof, HashedPostState, HashedStorage, MultiProof, TrieInput,
@@ -204,6 +204,15 @@ impl HashedPostStateProvider for MemoryOverlayStateProvider {
204204
}
205205
}
206206

207+
impl HashedStorageProvider for MemoryOverlayStateProvider {
208+
fn hashed_storage_from_bundle_account(
209+
&self,
210+
account: &reth_execution_types::BundleAccount,
211+
) -> HashedStorage {
212+
self.historical.hashed_storage_from_bundle_account(account)
213+
}
214+
}
215+
207216
impl StateProvider for MemoryOverlayStateProvider {
208217
fn storage(
209218
&self,

crates/revm/src/test_utils.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use alloy_primitives::{
66
};
77
use reth_primitives::{Account, Bytecode};
88
use reth_storage_api::{
9-
AccountReader, BlockHashReader, HashedPostStateProvider, StateProofProvider, StateProvider,
10-
StateRootProvider, StorageRootProvider,
9+
AccountReader, BlockHashReader, HashedPostStateProvider, HashedStorageProvider,
10+
StateProofProvider, StateProvider, StateRootProvider, StorageRootProvider,
1111
};
1212
use reth_storage_errors::provider::ProviderResult;
1313
use reth_trie::{
@@ -155,6 +155,15 @@ impl HashedPostStateProvider for StateProviderTest {
155155
}
156156
}
157157

158+
impl HashedStorageProvider for StateProviderTest {
159+
fn hashed_storage_from_bundle_account(
160+
&self,
161+
account: &revm::db::BundleAccount,
162+
) -> HashedStorage {
163+
HashedStorage::from_bundle_account::<KeccakKeyHasher>(account)
164+
}
165+
}
166+
158167
impl StateProvider for StateProviderTest {
159168
fn storage(
160169
&self,

crates/rpc/rpc-eth-types/src/cache/db.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,15 @@ impl reth_storage_api::HashedPostStateProvider for StateProviderTraitObjWrapper<
146146
}
147147
}
148148

149+
impl reth_storage_api::HashedStorageProvider for StateProviderTraitObjWrapper<'_> {
150+
fn hashed_storage_from_bundle_account(
151+
&self,
152+
account: &reth_execution_types::BundleAccount,
153+
) -> reth_trie::HashedStorage {
154+
self.0.hashed_storage_from_bundle_account(account)
155+
}
156+
}
157+
149158
impl StateProvider for StateProviderTraitObjWrapper<'_> {
150159
fn account_balance(
151160
&self,

crates/storage/provider/src/providers/bundle_state_provider.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use alloy_primitives::{
66
Address, BlockNumber, Bytes, B256,
77
};
88
use reth_primitives::{Account, Bytecode};
9-
use reth_storage_api::{HashedPostStateProvider, StateProofProvider, StorageRootProvider};
9+
use reth_storage_api::{
10+
HashedPostStateProvider, HashedStorageProvider, StateProofProvider, StorageRootProvider,
11+
};
1012
use reth_storage_errors::provider::ProviderResult;
1113
use reth_trie::{
1214
updates::TrieUpdates, AccountProof, HashedPostState, HashedStorage, MultiProof, TrieInput,
@@ -37,12 +39,7 @@ impl<SP: StateProvider, EDP: ExecutionDataProvider> BundleStateProvider<SP, EDP>
3739
let bundle_state = self.block_execution_data_provider.execution_outcome().state();
3840
bundle_state
3941
.account(&address)
40-
.map(|account| {
41-
HashedStorage::from_plain_storage(
42-
account.status,
43-
account.storage.iter().map(|(slot, value)| (slot, &value.present_value)),
44-
)
45-
})
42+
.map(|account| self.state_provider.hashed_storage_from_bundle_account(account))
4643
.unwrap_or_default()
4744
}
4845
}
@@ -193,6 +190,17 @@ impl<SP: StateProvider, EDP: ExecutionDataProvider> HashedPostStateProvider
193190
}
194191
}
195192

193+
impl<SP: StateProvider, EDP: ExecutionDataProvider> HashedStorageProvider
194+
for BundleStateProvider<SP, EDP>
195+
{
196+
fn hashed_storage_from_bundle_account(
197+
&self,
198+
account: &reth_execution_types::BundleAccount,
199+
) -> HashedStorage {
200+
self.state_provider.hashed_storage_from_bundle_account(account)
201+
}
202+
}
203+
196204
impl<SP: StateProvider, EDP: ExecutionDataProvider> StateProvider for BundleStateProvider<SP, EDP> {
197205
fn storage(
198206
&self,

crates/storage/provider/src/providers/state/historical.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ use reth_db_api::{
1414
transaction::DbTx,
1515
};
1616
use reth_primitives::{constants::EPOCH_SLOTS, Account, Bytecode, StaticFileSegment};
17-
use reth_storage_api::{HashedPostStateProvider, StateProofProvider, StorageRootProvider};
17+
use reth_storage_api::{
18+
HashedPostStateProvider, HashedStorageProvider, StateProofProvider, StorageRootProvider,
19+
};
1820
use reth_storage_errors::provider::ProviderResult;
1921
use reth_trie::{
2022
proof::{Proof, StorageProof},
@@ -428,6 +430,17 @@ impl<TX: DbTx, SC: StateCommitment> HashedPostStateProvider
428430
}
429431
}
430432

433+
impl<TX: DbTx, SC: StateCommitment> HashedStorageProvider
434+
for HistoricalStateProviderRef<'_, TX, SC>
435+
{
436+
fn hashed_storage_from_bundle_account(
437+
&self,
438+
account: &reth_execution_types::BundleAccount,
439+
) -> HashedStorage {
440+
HashedStorage::from_bundle_account::<SC::KeyHasher>(account)
441+
}
442+
}
443+
431444
impl<TX: DbTx, SC: StateCommitment> StateProvider for HistoricalStateProviderRef<'_, TX, SC> {
432445
/// Get storage.
433446
fn storage(

crates/storage/provider/src/providers/state/latest.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ use reth_db_api::{
1212
transaction::DbTx,
1313
};
1414
use reth_primitives::{Account, Bytecode, StaticFileSegment};
15-
use reth_storage_api::{HashedPostStateProvider, StateProofProvider, StorageRootProvider};
15+
use reth_storage_api::{
16+
HashedPostStateProvider, HashedStorageProvider, StateProofProvider, StorageRootProvider,
17+
};
1618
use reth_storage_errors::provider::{ProviderError, ProviderResult};
1719
use reth_trie::{
1820
proof::{Proof, StorageProof},
@@ -180,6 +182,15 @@ impl<TX: DbTx, SC: StateCommitment> HashedPostStateProvider for LatestStateProvi
180182
}
181183
}
182184

185+
impl<TX: DbTx, SC: StateCommitment> HashedStorageProvider for LatestStateProviderRef<'_, TX, SC> {
186+
fn hashed_storage_from_bundle_account(
187+
&self,
188+
account: &reth_execution_types::BundleAccount,
189+
) -> HashedStorage {
190+
HashedStorage::from_bundle_account::<SC::KeyHasher>(account)
191+
}
192+
}
193+
183194
impl<TX: DbTx, SC: StateCommitment> StateProvider for LatestStateProviderRef<'_, TX, SC> {
184195
/// Get storage.
185196
fn storage(

crates/storage/provider/src/providers/state/macros.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ macro_rules! delegate_provider_impls {
6060
fn hashed_post_state_from_reverts(&self, block_number: alloy_primitives::BlockNumber) -> reth_storage_errors::provider::ProviderResult<reth_trie::HashedPostState>;
6161
fn hashed_post_state_from_bundle_state(&self, bundle_state: &revm::db::BundleState) -> reth_trie::HashedPostState;
6262
}
63+
HashedStorageProvider $(where [$($generics)*])? {
64+
fn hashed_storage_from_bundle_account(&self, account: &revm::db::BundleAccount) -> reth_trie::HashedStorage;
65+
}
6366
);
6467
}
6568
}

crates/storage/provider/src/test_utils/mock.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ use reth_primitives::{
2727
};
2828
use reth_stages_types::{StageCheckpoint, StageId};
2929
use reth_storage_api::{
30-
DatabaseProviderFactory, HashedPostStateProvider, StageCheckpointReader, StateProofProvider,
31-
StorageRootProvider,
30+
DatabaseProviderFactory, HashedPostStateProvider, HashedStorageProvider, StageCheckpointReader,
31+
StateProofProvider, StorageRootProvider,
3232
};
3333
use reth_storage_errors::provider::{ConsistentViewError, ProviderError, ProviderResult};
3434
use reth_trie::{
@@ -687,6 +687,15 @@ impl HashedPostStateProvider for MockEthProvider {
687687
}
688688
}
689689

690+
impl HashedStorageProvider for MockEthProvider {
691+
fn hashed_storage_from_bundle_account(
692+
&self,
693+
account: &reth_execution_types::BundleAccount,
694+
) -> HashedStorage {
695+
HashedStorage::from_bundle_account::<KeccakKeyHasher>(account)
696+
}
697+
}
698+
690699
impl StateProvider for MockEthProvider {
691700
fn storage(
692701
&self,

crates/storage/provider/src/test_utils/noop.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ use reth_primitives::{
2424
};
2525
use reth_prune_types::{PruneCheckpoint, PruneSegment};
2626
use reth_stages_types::{StageCheckpoint, StageId};
27-
use reth_storage_api::{HashedPostStateProvider, StateProofProvider, StorageRootProvider};
27+
use reth_storage_api::{
28+
HashedPostStateProvider, HashedStorageProvider, StateProofProvider, StorageRootProvider,
29+
};
2830
use reth_storage_errors::provider::ProviderResult;
2931
use reth_trie::{
3032
updates::TrieUpdates, AccountProof, HashedPostState, HashedStorage, MultiProof, TrieInput,
@@ -410,6 +412,15 @@ impl HashedPostStateProvider for NoopProvider {
410412
}
411413
}
412414

415+
impl HashedStorageProvider for NoopProvider {
416+
fn hashed_storage_from_bundle_account(
417+
&self,
418+
_account: &reth_execution_types::BundleAccount,
419+
) -> HashedStorage {
420+
HashedStorage::default()
421+
}
422+
}
423+
413424
impl StateProvider for NoopProvider {
414425
fn storage(
415426
&self,

0 commit comments

Comments
 (0)