Skip to content
Merged
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
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 14 additions & 2 deletions crates/optimism/trie/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ workspace = true
reth-db = { workspace = true, features = ["mdbx"] }
reth-evm.workspace = true
reth-execution-errors.workspace = true
reth-node-api.workspace = true
reth-primitives-traits.workspace = true
reth-provider.workspace = true
reth-revm.workspace = true
Expand Down Expand Up @@ -48,17 +47,30 @@ itertools.workspace = true

[dev-dependencies]
reth-codecs = { workspace = true, features = ["test-utils"] }
tokio = { workspace = true, features = ["test-util", "rt-multi-thread", "macros"] }
tempfile.workspace = true
tokio = { workspace = true, features = ["test-util", "rt-multi-thread", "macros"] }
test-case.workspace = true
reth-db = { workspace = true, features = ["test-utils"] }
# workaround for failing doc test <https://github.com/op-rs/op-reth/pull/234>
reth-db-api = { workspace = true, features = ["test-utils"] }
reth-trie = { workspace = true, features = ["test-utils"] }
reth-provider = { workspace = true, features = ["test-utils"] }
reth-node-api.workspace = true
alloy-consensus.workspace = true
alloy-genesis.workspace = true
reth-chainspec.workspace = true
reth-db-common.workspace = true
reth-ethereum-primitives.workspace = true
reth-evm-ethereum.workspace = true
reth-testing-utils.workspace = true
secp256k1.workspace = true

[features]
serde-bincode-compat = [
"reth-primitives-traits/serde-bincode-compat",
"reth-trie/serde-bincode-compat",
"alloy-consensus/serde-bincode-compat",
"alloy-eips/serde-bincode-compat",
"alloy-genesis/serde-bincode-compat",
"reth-ethereum-primitives/serde-bincode-compat",
]
3 changes: 2 additions & 1 deletion crates/optimism/trie/src/in_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,8 @@ impl OpProofsStorage for InMemoryProofsStorage {
// We don't have a hash stored, so return a default
Ok(Some((block, B256::ZERO)))
} else {
Ok(None)
// otherwise return earliest block if set
Ok(inner.earliest_block)
}
}

Expand Down
23 changes: 11 additions & 12 deletions crates/optimism/trie/src/live.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ use crate::{
provider::OpProofsStateProviderRef,
};
use reth_evm::{execute::Executor, ConfigureEvm};
use reth_node_api::{FullNodeComponents, NodePrimitives, NodeTypes};
use reth_primitives_traits::{AlloyBlockHeader, RecoveredBlock};
use reth_primitives_traits::{AlloyBlockHeader, BlockTy, RecoveredBlock};
use reth_provider::{
DatabaseProviderFactory, HashedPostStateProvider, StateProviderFactory, StateReader,
StateRootProvider,
Expand All @@ -17,31 +16,31 @@ use tracing::debug;

/// Live trie collector for external proofs storage.
#[derive(Debug)]
pub struct LiveTrieCollector<'tx, Node, PreimageStore>
pub struct LiveTrieCollector<'tx, Evm, Provider, PreimageStore>
where
Node: FullNodeComponents,
Node::Provider: StateReader + DatabaseProviderFactory + StateProviderFactory,
Evm: ConfigureEvm,
Provider: StateReader + DatabaseProviderFactory + StateProviderFactory,
{
evm_config: Node::Evm,
provider: Node::Provider,
evm_config: Evm,
provider: Provider,
storage: &'tx PreimageStore,
}

impl<'tx, Node, Store, Primitives> LiveTrieCollector<'tx, Node, Store>
impl<'tx, Evm, Provider, Store> LiveTrieCollector<'tx, Evm, Provider, Store>
where
Node: FullNodeComponents<Types: NodeTypes<Primitives = Primitives>>,
Primitives: NodePrimitives,
Evm: ConfigureEvm,
Provider: StateReader + DatabaseProviderFactory + StateProviderFactory,
Store: 'tx + OpProofsStorage + Clone + 'static,
{
/// Create a new `LiveTrieCollector` instance
pub const fn new(evm_config: Node::Evm, provider: Node::Provider, storage: &'tx Store) -> Self {
pub const fn new(evm_config: Evm, provider: Provider, storage: &'tx Store) -> Self {
Self { evm_config, provider, storage }
}

/// Execute a block and store the updates in the storage.
pub async fn execute_and_store_block_updates(
&self,
block: &RecoveredBlock<Primitives::Block>,
block: &RecoveredBlock<BlockTy<Evm::Primitives>>,
) -> eyre::Result<()> {
let start = Instant::now();
// ensure that we have the state of the parent block
Expand Down
3 changes: 2 additions & 1 deletion crates/optimism/trie/src/proof.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use alloy_primitives::{
map::{B256Map, HashMap},
Address, Bytes, B256, U256,
};
use core::marker;
use reth_db::DatabaseError;
use reth_execution_errors::{StateProofError, StateRootError, StorageRootError, TrieWitnessError};
use reth_primitives_traits::Account;
Expand Down Expand Up @@ -75,7 +76,7 @@ where
pub struct OpProofsTrieCursorFactory<'tx, Storage: OpProofsStorage> {
storage: &'tx Storage,
block_number: u64,
_marker: core::marker::PhantomData<&'tx ()>,
_marker: marker::PhantomData<&'tx ()>,
}

impl<'tx, Storage: OpProofsStorage> OpProofsTrieCursorFactory<'tx, Storage> {
Expand Down
13 changes: 2 additions & 11 deletions crates/optimism/trie/src/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use crate::{
},
};
use alloy_primitives::keccak256;
use derive_more::Constructor;
use reth_primitives_traits::{Account, Bytecode};
use reth_provider::{
AccountReader, BlockHashReader, BytecodeReader, HashedPostStateProvider, ProviderError,
Expand All @@ -27,6 +28,7 @@ use reth_trie::{
use std::fmt::Debug;

/// State provider for external proofs storage.
#[derive(Constructor)]
pub struct OpProofsStateProviderRef<'a, Storage: OpProofsStorage> {
/// Historical state provider for non-state related tasks.
latest: Box<dyn StateProvider + 'a>,
Expand All @@ -38,17 +40,6 @@ pub struct OpProofsStateProviderRef<'a, Storage: OpProofsStorage> {
block_number: BlockNumber,
}

impl<'a, Storage: OpProofsStorage> OpProofsStateProviderRef<'a, Storage> {
/// Initializes new `OpProofsStateProviderRef`
pub fn new(
latest: Box<dyn StateProvider + 'a>,
storage: &'a Storage,
block_number: BlockNumber,
) -> Self {
Self { latest, storage, block_number }
}
}

impl<'a, Storage> Debug for OpProofsStateProviderRef<'a, Storage>
where
Storage: OpProofsStorage + 'a + Debug,
Expand Down
Loading
Loading