From c77de627d15d4057003ed96224791cea42f11482 Mon Sep 17 00:00:00 2001 From: naviechan Date: Tue, 7 Feb 2023 00:25:54 +0800 Subject: [PATCH] Impl state and account trait for NoopProvider (#1198) --- .../storage/provider/src/test_utils/noop.rs | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/crates/storage/provider/src/test_utils/noop.rs b/crates/storage/provider/src/test_utils/noop.rs index dd6e9afb97..59f4276357 100644 --- a/crates/storage/provider/src/test_utils/noop.rs +++ b/crates/storage/provider/src/test_utils/noop.rs @@ -1,9 +1,15 @@ -use crate::{BlockHashProvider, BlockProvider, HeaderProvider}; +use crate::{ + AccountProvider, BlockHashProvider, BlockProvider, HeaderProvider, StateProvider, + StateProviderFactory, +}; use reth_interfaces::Result; -use reth_primitives::{rpc::BlockId, Block, BlockHash, BlockNumber, ChainInfo, Header, H256, U256}; +use reth_primitives::{ + rpc::BlockId, Account, Address, Block, BlockHash, BlockNumber, Bytes, ChainInfo, Header, + StorageKey, StorageValue, H256, U256, +}; /// Supports various api interfaces for testing purposes. -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone, Default, Copy)] #[non_exhaustive] pub struct NoopProvider; @@ -46,3 +52,36 @@ impl HeaderProvider for NoopProvider { Ok(None) } } + +impl AccountProvider for NoopProvider { + fn basic_account(&self, _address: Address) -> Result> { + Ok(None) + } +} + +impl StateProvider for NoopProvider { + fn storage(&self, _account: Address, _storage_key: StorageKey) -> Result> { + Ok(None) + } + + fn bytecode_by_hash(&self, _code_hash: H256) -> Result> { + Ok(None) + } +} + +impl StateProviderFactory for NoopProvider { + type HistorySP<'a> = NoopProvider where Self: 'a; + type LatestSP<'a> = NoopProvider where Self: 'a; + + fn latest(&self) -> Result> { + Ok(*self) + } + + fn history_by_block_number(&self, _block: BlockNumber) -> Result> { + Ok(*self) + } + + fn history_by_block_hash(&self, _block: BlockHash) -> Result> { + Ok(*self) + } +}