Skip to content

Commit 32f0b1c

Browse files
committed
perf(rpc): use CacheDB for wrapping StateProviderDatabase
Reth also does this [e.g](https://github.com/paradigmxyz/reth/blob/main/crates/rpc/rpc/src/eth/bundle.rs#L151). This makes sense, as for RPC we're only accessing state and more complex calls might need accessing the same parts of the trie. We can save a bunch of I/O time by caching the results (and state changes when tracing, which once implemented should be faster with this layer).
1 parent 1514ad2 commit 32f0b1c

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

crates/rpc/src/ctx.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use reth::{
2121
TransactionsProvider,
2222
providers::{BlockchainProvider, ProviderNodeTypes},
2323
},
24-
revm::{database::StateProviderDatabase, primitives::hardfork::SpecId},
24+
revm::{database::StateProviderDatabase, db::CacheDB, primitives::hardfork::SpecId},
2525
rpc::{
2626
eth::{filter::EthFilterError, helpers::types::EthRpcConverter},
2727
server_types::eth::{
@@ -54,7 +54,9 @@ use trevm::{
5454
///
5555
/// [`StateProviderBox`]: reth::providers::StateProviderBox
5656
pub type RuRevmState = trevm::revm::database::State<
57-
reth::revm::database::StateProviderDatabase<reth::providers::StateProviderBox>,
57+
reth::revm::db::CacheDB<
58+
reth::revm::database::StateProviderDatabase<reth::providers::StateProviderBox>,
59+
>,
5860
>;
5961

6062
/// The maximum number of headers we read at once when handling a range filter.
@@ -305,7 +307,7 @@ where
305307
let sp = self.provider.history_by_block_number(height)?;
306308

307309
// Wrap in Revm compatibility layer
308-
let spd = StateProviderDatabase::new(sp);
310+
let spd = CacheDB::new(StateProviderDatabase::new(sp));
309311

310312
let builder = StateBuilder::new_with_database(spd);
311313

0 commit comments

Comments
 (0)