Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 12 additions & 15 deletions crates/storage/provider/src/providers/state/historical.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,8 @@ use reth_storage_api::{
};
use reth_storage_errors::provider::ProviderResult;
use reth_trie::{
proof::{Proof, StorageProof},
updates::TrieUpdates,
witness::TrieWitness,
AccountProof, HashedPostState, HashedStorage, MultiProof, MultiProofTargets, StateRoot,
StorageMultiProof, StorageRoot, TrieInput,
updates::TrieUpdates, AccountProof, HashedPostState, HashedStorage, MultiProof,
MultiProofTargets, StorageMultiProof, TrieInput,
};
use reth_trie_db::{
DatabaseHashedPostState, DatabaseHashedStorage, DatabaseProof, DatabaseStateRoot,
Expand Down Expand Up @@ -292,13 +289,13 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StateRootP
fn state_root(&self, hashed_state: HashedPostState) -> ProviderResult<B256> {
let mut revert_state = self.revert_state()?;
revert_state.extend(hashed_state);
StateRoot::overlay_root(self.tx(), revert_state)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_, _>>::overlay_root(self.tx(), revert_state)
.map_err(|err| ProviderError::Database(err.into()))
}

fn state_root_from_nodes(&self, mut input: TrieInput) -> ProviderResult<B256> {
input.prepend(self.revert_state()?);
StateRoot::overlay_root_from_nodes(self.tx(), input)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_, _>>::overlay_root_from_nodes(self.tx(), input)
.map_err(|err| ProviderError::Database(err.into()))
}

Expand All @@ -308,7 +305,7 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StateRootP
) -> ProviderResult<(B256, TrieUpdates)> {
let mut revert_state = self.revert_state()?;
revert_state.extend(hashed_state);
StateRoot::overlay_root_with_updates(self.tx(), revert_state)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_,_>>::overlay_root_with_updates(self.tx(), revert_state)
.map_err(|err| ProviderError::Database(err.into()))
}

Expand All @@ -317,7 +314,7 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StateRootP
mut input: TrieInput,
) -> ProviderResult<(B256, TrieUpdates)> {
input.prepend(self.revert_state()?);
StateRoot::overlay_root_from_nodes_with_updates(self.tx(), input)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_,_> as DatabaseStateRoot<'_,_>>::overlay_root_from_nodes_with_updates(self.tx(), input)
.map_err(|err| ProviderError::Database(err.into()))
}
}
Expand All @@ -332,7 +329,7 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StorageRoo
) -> ProviderResult<B256> {
let mut revert_storage = self.revert_storage(address)?;
revert_storage.extend(&hashed_storage);
StorageRoot::overlay_root(self.tx(), address, revert_storage)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StorageRoot<'_,_> as DatabaseStorageRoot<'_,_>>::overlay_root(self.tx(), address, revert_storage)
.map_err(|err| ProviderError::Database(err.into()))
}

Expand All @@ -344,7 +341,7 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StorageRoo
) -> ProviderResult<reth_trie::StorageProof> {
let mut revert_storage = self.revert_storage(address)?;
revert_storage.extend(&hashed_storage);
StorageProof::overlay_storage_proof(self.tx(), address, slot, revert_storage)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StorageProof<'_,_> as DatabaseStorageProof<'_, _>>::overlay_storage_proof(self.tx(), address, slot, revert_storage)
.map_err(ProviderError::from)
}

Expand All @@ -356,7 +353,7 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StorageRoo
) -> ProviderResult<StorageMultiProof> {
let mut revert_storage = self.revert_storage(address)?;
revert_storage.extend(&hashed_storage);
StorageProof::overlay_storage_multiproof(self.tx(), address, slots, revert_storage)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StorageProof<'_,_> as DatabaseStorageProof<'_,_>>::overlay_storage_multiproof(self.tx(), address, slots, revert_storage)
.map_err(ProviderError::from)
}
}
Expand All @@ -372,7 +369,7 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StateProof
slots: &[B256],
) -> ProviderResult<AccountProof> {
input.prepend(self.revert_state()?);
Proof::overlay_account_proof(self.tx(), input, address, slots).map_err(ProviderError::from)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateProof<'_, _> as DatabaseProof<'_, _>>::overlay_account_proof(self.tx(), input, address, slots).map_err(ProviderError::from)
}

fn multiproof(
Expand All @@ -381,12 +378,12 @@ impl<Provider: DBProvider + BlockNumReader + StateCommitmentProvider> StateProof
targets: MultiProofTargets,
) -> ProviderResult<MultiProof> {
input.prepend(self.revert_state()?);
Proof::overlay_multiproof(self.tx(), input, targets).map_err(ProviderError::from)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateProof<'_, _> as DatabaseProof<'_, _>>::overlay_multiproof(self.tx(), input, targets).map_err(ProviderError::from)
}

fn witness(&self, mut input: TrieInput, target: HashedPostState) -> ProviderResult<Vec<Bytes>> {
input.prepend(self.revert_state()?);
TrieWitness::overlay_witness(self.tx(), input, target)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateWitness<'_, _> as DatabaseTrieWitness<'_, _>>::overlay_witness(self.tx(), input, target)
.map_err(ProviderError::from)
.map(|hm| hm.into_values().collect())
}
Expand Down
28 changes: 13 additions & 15 deletions crates/storage/provider/src/providers/state/latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,8 @@ use reth_storage_api::{
};
use reth_storage_errors::provider::{ProviderError, ProviderResult};
use reth_trie::{
proof::{Proof, StorageProof},
updates::TrieUpdates,
witness::TrieWitness,
AccountProof, HashedPostState, HashedStorage, MultiProof, MultiProofTargets, StateRoot,
StorageMultiProof, StorageRoot, TrieInput,
updates::TrieUpdates, AccountProof, HashedPostState, HashedStorage, MultiProof,
MultiProofTargets, StorageMultiProof, TrieInput,
};
use reth_trie_db::{
DatabaseProof, DatabaseStateRoot, DatabaseStorageProof, DatabaseStorageRoot,
Expand Down Expand Up @@ -64,28 +61,28 @@ impl<Provider: DBProvider + StateCommitmentProvider> StateRootProvider
for LatestStateProviderRef<'_, Provider>
{
fn state_root(&self, hashed_state: HashedPostState) -> ProviderResult<B256> {
StateRoot::overlay_root(self.tx(), hashed_state)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_, _>>::overlay_root(self.tx(), hashed_state)
.map_err(|err| ProviderError::Database(err.into()))
}

fn state_root_from_nodes(&self, input: TrieInput) -> ProviderResult<B256> {
StateRoot::overlay_root_from_nodes(self.tx(), input)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_, _>>::overlay_root_from_nodes(self.tx(), input)
.map_err(|err| ProviderError::Database(err.into()))
}

fn state_root_with_updates(
&self,
hashed_state: HashedPostState,
) -> ProviderResult<(B256, TrieUpdates)> {
StateRoot::overlay_root_with_updates(self.tx(), hashed_state)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_, _>>::overlay_root_with_updates(self.tx(), hashed_state)
.map_err(|err| ProviderError::Database(err.into()))
}

fn state_root_from_nodes_with_updates(
&self,
input: TrieInput,
) -> ProviderResult<(B256, TrieUpdates)> {
StateRoot::overlay_root_from_nodes_with_updates(self.tx(), input)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateRoot<'_, _> as DatabaseStateRoot<'_, _>>::overlay_root_from_nodes_with_updates(self.tx(), input)
.map_err(|err| ProviderError::Database(err.into()))
}
}
Expand All @@ -98,7 +95,7 @@ impl<Provider: DBProvider + StateCommitmentProvider> StorageRootProvider
address: Address,
hashed_storage: HashedStorage,
) -> ProviderResult<B256> {
StorageRoot::overlay_root(self.tx(), address, hashed_storage)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StorageRoot<'_, _> as DatabaseStorageRoot<'_, _>>::overlay_root(self.tx(), address, hashed_storage)
.map_err(|err| ProviderError::Database(err.into()))
}

Expand All @@ -108,7 +105,7 @@ impl<Provider: DBProvider + StateCommitmentProvider> StorageRootProvider
slot: B256,
hashed_storage: HashedStorage,
) -> ProviderResult<reth_trie::StorageProof> {
StorageProof::overlay_storage_proof(self.tx(), address, slot, hashed_storage)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StorageProof<'_, _> as DatabaseStorageProof<'_, _>>::overlay_storage_proof(self.tx(), address, slot, hashed_storage)
.map_err(ProviderError::from)
}

Expand All @@ -118,7 +115,7 @@ impl<Provider: DBProvider + StateCommitmentProvider> StorageRootProvider
slots: &[B256],
hashed_storage: HashedStorage,
) -> ProviderResult<StorageMultiProof> {
StorageProof::overlay_storage_multiproof(self.tx(), address, slots, hashed_storage)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StorageProof<'_, _> as DatabaseStorageProof<'_, _>>::overlay_storage_multiproof(self.tx(), address, slots, hashed_storage)
.map_err(ProviderError::from)
}
}
Expand All @@ -132,19 +129,20 @@ impl<Provider: DBProvider + StateCommitmentProvider> StateProofProvider
address: Address,
slots: &[B256],
) -> ProviderResult<AccountProof> {
Proof::overlay_account_proof(self.tx(), input, address, slots).map_err(ProviderError::from)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateProof<'_, _> as DatabaseProof<'_, _>>::overlay_account_proof(
self.tx(), input, address, slots).map_err(ProviderError::from)
}

fn multiproof(
&self,
input: TrieInput,
targets: MultiProofTargets,
) -> ProviderResult<MultiProof> {
Proof::overlay_multiproof(self.tx(), input, targets).map_err(ProviderError::from)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateProof<'_, _> as DatabaseProof<'_, _>>::overlay_multiproof(self.tx(), input, targets).map_err(ProviderError::from)
}

fn witness(&self, input: TrieInput, target: HashedPostState) -> ProviderResult<Vec<Bytes>> {
TrieWitness::overlay_witness(self.tx(), input, target)
<<<Self as StateCommitmentProvider>::StateCommitment as StateCommitment>::StateWitness<'_, _> as DatabaseTrieWitness<'_, _>>::overlay_witness(self.tx(), input, target)
.map_err(ProviderError::from)
.map(|hm| hm.into_values().collect())
}
Expand Down
12 changes: 9 additions & 3 deletions crates/trie/db/src/commitment.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
use crate::{
DatabaseHashedCursorFactory, DatabaseProof, DatabaseStateRoot, DatabaseStorageRoot,
DatabaseTrieCursorFactory, DatabaseTrieWitness,
DatabaseHashedCursorFactory, DatabaseProof, DatabaseStateRoot, DatabaseStorageProof,
DatabaseStorageRoot, DatabaseTrieCursorFactory, DatabaseTrieWitness,
};
use reth_db_api::transaction::DbTx;
use reth_trie::{
proof::Proof, witness::TrieWitness, KeccakKeyHasher, KeyHasher, StateRoot, StorageRoot,
proof::{Proof, StorageProof},
witness::TrieWitness,
KeccakKeyHasher, KeyHasher, StateRoot, StorageRoot,
};

/// The `StateCommitment` trait provides associated types for state commitment operations.
Expand All @@ -15,6 +17,8 @@ pub trait StateCommitment: std::fmt::Debug + Clone + Send + Sync + Unpin + 'stat
type StorageRoot<'a, TX: DbTx + 'a>: DatabaseStorageRoot<'a, TX>;
/// The state proof type.
type StateProof<'a, TX: DbTx + 'a>: DatabaseProof<'a, TX>;
/// The storage proof type.
type StorageProof<'a, TX: DbTx + 'a>: DatabaseStorageProof<'a, TX>;
/// The state witness type.
type StateWitness<'a, TX: DbTx + 'a>: DatabaseTrieWitness<'a, TX>;
/// The key hasher type.
Expand All @@ -33,6 +37,8 @@ impl StateCommitment for MerklePatriciaTrie {
StorageRoot<DatabaseTrieCursorFactory<'a, TX>, DatabaseHashedCursorFactory<'a, TX>>;
type StateProof<'a, TX: DbTx + 'a> =
Proof<DatabaseTrieCursorFactory<'a, TX>, DatabaseHashedCursorFactory<'a, TX>>;
type StorageProof<'a, TX: DbTx + 'a> =
StorageProof<DatabaseTrieCursorFactory<'a, TX>, DatabaseHashedCursorFactory<'a, TX>>;
type StateWitness<'a, TX: DbTx + 'a> =
TrieWitness<DatabaseTrieCursorFactory<'a, TX>, DatabaseHashedCursorFactory<'a, TX>>;
type KeyHasher = KeccakKeyHasher;
Expand Down
Loading