mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
Introduce HashedPostStateProvider (#12607)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -25,6 +25,7 @@ reth-storage-errors.workspace = true
|
||||
reth-trie.workspace = true
|
||||
reth-trie-db.workspace = true
|
||||
reth-db.workspace = true
|
||||
revm.workspace = true
|
||||
|
||||
# ethereum
|
||||
alloy-eips.workspace = true
|
||||
|
||||
@ -2,9 +2,9 @@
|
||||
|
||||
use crate::{
|
||||
AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt,
|
||||
BlockSource, ChangeSetReader, HeaderProvider, NodePrimitivesProvider, PruneCheckpointReader,
|
||||
ReceiptProvider, ReceiptProviderIdExt, StageCheckpointReader, StateProofProvider,
|
||||
StateProvider, StateRootProvider, StorageRootProvider, TransactionVariant,
|
||||
BlockSource, ChangeSetReader, HashedPostStateProvider, HeaderProvider, NodePrimitivesProvider,
|
||||
PruneCheckpointReader, ReceiptProvider, ReceiptProviderIdExt, StageCheckpointReader,
|
||||
StateProofProvider, StateProvider, StateRootProvider, StorageRootProvider, TransactionVariant,
|
||||
TransactionsProvider, WithdrawalsProvider,
|
||||
};
|
||||
use alloy_eips::{
|
||||
@ -456,6 +456,12 @@ impl<C: Send + Sync, N: NodePrimitives> StateProofProvider for NoopProvider<C, N
|
||||
}
|
||||
}
|
||||
|
||||
impl<C: Send + Sync, N: NodePrimitives> HashedPostStateProvider for NoopProvider<C, N> {
|
||||
fn hashed_post_state(&self, _bundle_state: &revm::db::BundleState) -> HashedPostState {
|
||||
HashedPostState::default()
|
||||
}
|
||||
}
|
||||
|
||||
impl<C: Send + Sync, N: NodePrimitives> StateProvider for NoopProvider<C, N> {
|
||||
fn storage(
|
||||
&self,
|
||||
|
||||
@ -8,7 +8,9 @@ use alloy_primitives::{Address, BlockHash, BlockNumber, StorageKey, StorageValue
|
||||
use auto_impl::auto_impl;
|
||||
use reth_primitives::Bytecode;
|
||||
use reth_storage_errors::provider::ProviderResult;
|
||||
use reth_trie::HashedPostState;
|
||||
use reth_trie_db::StateCommitment;
|
||||
use revm::db::states::BundleState;
|
||||
|
||||
/// Type alias of boxed [`StateProvider`].
|
||||
pub type StateProviderBox = Box<dyn StateProvider>;
|
||||
@ -21,6 +23,7 @@ pub trait StateProvider:
|
||||
+ StateRootProvider
|
||||
+ StorageRootProvider
|
||||
+ StateProofProvider
|
||||
+ HashedPostStateProvider
|
||||
+ Send
|
||||
+ Sync
|
||||
{
|
||||
@ -83,11 +86,18 @@ pub trait StateProvider:
|
||||
}
|
||||
|
||||
/// Trait implemented for database providers that can provide the [`StateCommitment`] type.
|
||||
pub trait StateCommitmentProvider {
|
||||
pub trait StateCommitmentProvider: Send + Sync {
|
||||
/// The [`StateCommitment`] type that can be used to perform state commitment operations.
|
||||
type StateCommitment: StateCommitment;
|
||||
}
|
||||
|
||||
/// Trait that provides the hashed state from various sources.
|
||||
#[auto_impl(&, Arc, Box)]
|
||||
pub trait HashedPostStateProvider: Send + Sync {
|
||||
/// Returns the `HashedPostState` of the provided [`BundleState`].
|
||||
fn hashed_post_state(&self, bundle_state: &BundleState) -> HashedPostState;
|
||||
}
|
||||
|
||||
/// Trait implemented for database providers that can be converted into a historical state provider.
|
||||
pub trait TryIntoHistoricalStateProvider {
|
||||
/// Returns a historical [`StateProvider`] indexed by the given historic block number.
|
||||
|
||||
Reference in New Issue
Block a user