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
1 change: 1 addition & 0 deletions Cargo.lock

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

1 change: 1 addition & 0 deletions crates/optimism/trie/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ serde.workspace = true
bincode.workspace = true

# misc
parking_lot.workspace = true
thiserror.workspace = true
auto_impl.workspace = true
eyre = { workspace = true, optional = true }
Expand Down
16 changes: 0 additions & 16 deletions crates/optimism/trie/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ use reth_provider::ProviderError;
use reth_trie_common::Nibbles;
use std::sync::Arc;
use thiserror::Error;
use tokio::sync::TryLockError;

/// Error type for storage operations
#[derive(Debug, Clone, Error)]
Expand Down Expand Up @@ -98,12 +97,6 @@ pub enum OpProofsStorageError {
InitializeStorageInconsistentState,
}

impl From<TryLockError> for OpProofsStorageError {
fn from(_: TryLockError) -> Self {
Self::TryLockError
}
}

impl From<BlockExecutionError> for OpProofsStorageError {
fn from(error: BlockExecutionError) -> Self {
Self::ExecutionError(Arc::new(error))
Expand Down Expand Up @@ -169,15 +162,6 @@ mod test {
assert!(matches!(converted_error, DatabaseError::Decode))
}

#[test]
fn test_conversion_from_lock_error() {
let lock = tokio::sync::Mutex::new(());
let _guard = lock.try_lock().unwrap();
let lock_error = lock.try_lock().err().unwrap();
let op_proofs_store_error = OpProofsStorageError::from(lock_error);
assert!(matches!(op_proofs_store_error, OpProofsStorageError::TryLockError));
}

#[test]
fn test_conversion_from_block_execution_error() {
let block_execution_error =
Expand Down
32 changes: 16 additions & 16 deletions crates/optimism/trie/src/in_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use crate::{
};
use alloy_eips::{eip1898::BlockWithParent, BlockNumHash};
use alloy_primitives::{B256, U256};
use parking_lot::RwLock;
use reth_db::DatabaseError;
use reth_primitives_traits::Account;
use reth_trie::{
Expand All @@ -15,7 +16,6 @@ use reth_trie_common::{
updates::TrieUpdatesSorted, BranchNodeCompact, HashedPostStateSorted, Nibbles,
};
use std::{collections::BTreeMap, sync::Arc};
use tokio::sync::RwLock;

/// In-memory implementation of [`OpProofsStore`] for testing purposes
#[derive(Debug, Clone)]
Expand Down Expand Up @@ -174,7 +174,7 @@ impl InMemoryTrieCursor {
return Ok(());
}

let storage = self.inner.try_read().map_err(OpProofsStorageError::from)?;
let storage = self.inner.try_read().ok_or(OpProofsStorageError::TryLockError)?;

// Common logic: collect latest values for each path
let mut path_to_latest: std::collections::BTreeMap<
Expand Down Expand Up @@ -333,7 +333,7 @@ impl InMemoryStorageCursor {
return Ok(());
}

let storage = self.inner.try_read().map_err(OpProofsStorageError::from)?;
let storage = self.inner.try_read().ok_or(OpProofsStorageError::TryLockError)?;

// Collect latest values for each slot
let mut slot_to_latest: std::collections::BTreeMap<B256, (u64, U256)> =
Expand Down Expand Up @@ -489,7 +489,7 @@ impl OpProofsStore for InMemoryProofsStorage {
&self,
updates: Vec<(Nibbles, Option<BranchNodeCompact>)>,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();

for (path, branch) in updates {
inner.account_branches.insert((0, path), branch);
Expand All @@ -503,7 +503,7 @@ impl OpProofsStore for InMemoryProofsStorage {
hashed_address: B256,
items: Vec<(Nibbles, Option<BranchNodeCompact>)>,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();

for (path, branch) in items {
inner.storage_branches.insert((0, hashed_address, path), branch);
Expand All @@ -516,7 +516,7 @@ impl OpProofsStore for InMemoryProofsStorage {
&self,
accounts: Vec<(B256, Option<Account>)>,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();

for (address, account) in accounts {
inner.hashed_accounts.insert((0, address), account);
Expand All @@ -530,7 +530,7 @@ impl OpProofsStore for InMemoryProofsStorage {
hashed_address: B256,
storages: Vec<(B256, U256)>,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();

for (slot, value) in storages {
inner.hashed_storages.insert((0, hashed_address, slot), value);
Expand All @@ -540,12 +540,12 @@ impl OpProofsStore for InMemoryProofsStorage {
}

async fn get_earliest_block_number(&self) -> OpProofsStorageResult<Option<(u64, B256)>> {
let inner = self.inner.read().await;
let inner = self.inner.read();
Ok(inner.earliest_block)
}

async fn get_latest_block_number(&self) -> OpProofsStorageResult<Option<(u64, B256)>> {
let inner = self.inner.read().await;
let inner = self.inner.read();
// Find the latest block number from trie_updates
let latest_block = inner.trie_updates.keys().max().copied();
if let Some(block) = latest_block {
Expand Down Expand Up @@ -584,7 +584,7 @@ impl OpProofsStore for InMemoryProofsStorage {
&self,
max_block_number: u64,
) -> OpProofsStorageResult<Self::AccountHashedCursor<'tx>> {
let inner = self.inner.try_read()?;
let inner = self.inner.try_read().ok_or(OpProofsStorageError::TryLockError)?;
Ok(InMemoryAccountCursor::new(&inner, max_block_number))
}

Expand All @@ -593,13 +593,13 @@ impl OpProofsStore for InMemoryProofsStorage {
block_ref: BlockWithParent,
block_state_diff: BlockStateDiff,
) -> OpProofsStorageResult<WriteCounts> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();

Ok(inner.store_trie_updates(block_ref.block.number, block_state_diff))
}

async fn fetch_trie_updates(&self, block_number: u64) -> OpProofsStorageResult<BlockStateDiff> {
let inner = self.inner.read().await;
let inner = self.inner.read();

let trie_updates = inner.trie_updates.get(&block_number).cloned().unwrap_or_default();
let post_state = inner.post_states.get(&block_number).cloned().unwrap_or_default();
Expand All @@ -612,7 +612,7 @@ impl OpProofsStore for InMemoryProofsStorage {
new_earliest_block_ref: BlockWithParent,
) -> OpProofsStorageResult<WriteCounts> {
let mut write_counts = WriteCounts::default();
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();
let new_earliest = new_earliest_block_ref.block.number;

// 1. Account Branches
Expand Down Expand Up @@ -698,7 +698,7 @@ impl OpProofsStore for InMemoryProofsStorage {
&self,
unwind_upto_block: BlockWithParent,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();
let unwind_upto_block_number = unwind_upto_block.block.number - 1;

// Remove all updates after unwind_upto_block_number
Expand All @@ -717,7 +717,7 @@ impl OpProofsStore for InMemoryProofsStorage {
latest_common_block: BlockNumHash,
blocks_to_add: Vec<(BlockWithParent, BlockStateDiff)>,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();
let latest_common_block_number = latest_common_block.number;

// Remove all updates after latest_common_block_number
Expand All @@ -740,7 +740,7 @@ impl OpProofsStore for InMemoryProofsStorage {
block_number: u64,
hash: B256,
) -> OpProofsStorageResult<()> {
let mut inner = self.inner.write().await;
let mut inner = self.inner.write();
inner.earliest_block = Some((block_number, hash));
Ok(())
}
Expand Down
Loading