From 68f38210e02f01fcd455bc5d4e51fef02b22c399 Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Thu, 10 Oct 2024 12:28:57 +0200 Subject: [PATCH] feat(trie): noop hashed cursors (#11627) --- crates/trie/trie/src/hashed_cursor/mod.rs | 3 + crates/trie/trie/src/hashed_cursor/noop.rs | 65 ++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 crates/trie/trie/src/hashed_cursor/noop.rs diff --git a/crates/trie/trie/src/hashed_cursor/mod.rs b/crates/trie/trie/src/hashed_cursor/mod.rs index 9b539cdce..1101f5078 100644 --- a/crates/trie/trie/src/hashed_cursor/mod.rs +++ b/crates/trie/trie/src/hashed_cursor/mod.rs @@ -6,6 +6,9 @@ use reth_storage_errors::db::DatabaseError; mod post_state; pub use post_state::*; +/// Implementation of noop hashed state cursor. +pub mod noop; + /// The factory trait for creating cursors over the hashed state. pub trait HashedCursorFactory { /// The hashed account cursor type. diff --git a/crates/trie/trie/src/hashed_cursor/noop.rs b/crates/trie/trie/src/hashed_cursor/noop.rs new file mode 100644 index 000000000..4783d5afd --- /dev/null +++ b/crates/trie/trie/src/hashed_cursor/noop.rs @@ -0,0 +1,65 @@ +use super::{HashedCursor, HashedCursorFactory, HashedStorageCursor}; +use alloy_primitives::{B256, U256}; +use reth_primitives::Account; +use reth_storage_errors::db::DatabaseError; + +/// Noop hashed cursor factory. +#[derive(Default, Debug)] +#[non_exhaustive] +pub struct NoopHashedCursorFactory; + +impl HashedCursorFactory for NoopHashedCursorFactory { + type AccountCursor = NoopHashedAccountCursor; + type StorageCursor = NoopHashedStorageCursor; + + fn hashed_account_cursor(&self) -> Result { + Ok(NoopHashedAccountCursor::default()) + } + + fn hashed_storage_cursor( + &self, + _hashed_address: B256, + ) -> Result { + Ok(NoopHashedStorageCursor::default()) + } +} + +/// Noop account hashed cursor. +#[derive(Default, Debug)] +#[non_exhaustive] +pub struct NoopHashedAccountCursor; + +impl HashedCursor for NoopHashedAccountCursor { + type Value = Account; + + fn next(&mut self) -> Result, DatabaseError> { + Ok(None) + } + + fn seek(&mut self, _key: B256) -> Result, DatabaseError> { + Ok(None) + } +} + +/// Noop account hashed cursor. +#[derive(Default, Debug)] +#[non_exhaustive] +pub struct NoopHashedStorageCursor; + +impl HashedCursor for NoopHashedStorageCursor { + type Value = U256; + + fn next(&mut self) -> Result, DatabaseError> { + Ok(None) + } + + fn seek(&mut self, _key: B256) -> Result, DatabaseError> { + Ok(None) + } +} + +impl HashedStorageCursor for NoopHashedStorageCursor { + fn is_storage_empty(&mut self) -> Result { + Ok(true) + } +}