diff --git a/crates/anvil/src/eth/api.rs b/crates/anvil/src/eth/api.rs index 4dee08b450475..89741775e66ab 100644 --- a/crates/anvil/src/eth/api.rs +++ b/crates/anvil/src/eth/api.rs @@ -2981,7 +2981,7 @@ impl EthApi { if let Some(block_overrides) = overrides.block { cache_db.apply_block_overrides(*block_overrides, &mut block); } - this.do_estimate_gas_with_state(request, &cache_db as &dyn DatabaseRef, block) + this.do_estimate_gas_with_state(request, &cache_db, block) }) .await? }) diff --git a/crates/anvil/src/eth/backend/db.rs b/crates/anvil/src/eth/backend/db.rs index b0ed8ae67913f..0792784419936 100644 --- a/crates/anvil/src/eth/backend/db.rs +++ b/crates/anvil/src/eth/backend/db.rs @@ -36,10 +36,6 @@ use crate::mem::storage::MinedTransaction; /// Helper trait get access to the full state data of the database pub trait MaybeFullDatabase: DatabaseRef + Debug { - /// Returns a reference to the database as a `dyn DatabaseRef`. - // TODO: Required until trait upcasting is stabilized: - fn as_dyn(&self) -> &dyn DatabaseRef; - fn maybe_as_full_db(&self) -> Option<&HashMap> { None } @@ -63,10 +59,6 @@ impl<'a, T: 'a + MaybeFullDatabase + ?Sized> MaybeFullDatabase for &'a T where &'a T: DatabaseRef, { - fn as_dyn(&self) -> &dyn DatabaseRef { - T::as_dyn(self) - } - fn maybe_as_full_db(&self) -> Option<&HashMap> { T::maybe_as_full_db(self) } @@ -202,13 +194,6 @@ pub trait Db: fn current_state(&self) -> StateDb; } -impl dyn Db { - // TODO: Required until trait upcasting is stabilized: - pub fn as_dbref(&self) -> &dyn DatabaseRef { - self.as_dyn() - } -} - /// Convenience impl only used to use any `Db` on the fly as the db layer for revm's CacheDB /// This is useful to create blocks without actually writing to the `Db`, but rather in the cache of /// the `CacheDB` see also @@ -251,10 +236,6 @@ impl + Send + Sync + Clone + fmt::Debug> D } impl + Debug> MaybeFullDatabase for CacheDB { - fn as_dyn(&self) -> &dyn DatabaseRef { - self - } - fn maybe_as_full_db(&self) -> Option<&HashMap> { Some(&self.cache.accounts) } @@ -364,10 +345,6 @@ impl DatabaseRef for StateDb { } impl MaybeFullDatabase for StateDb { - fn as_dyn(&self) -> &dyn DatabaseRef { - self.0.as_dyn() - } - fn maybe_as_full_db(&self) -> Option<&HashMap> { self.0.maybe_as_full_db() } diff --git a/crates/anvil/src/eth/backend/mem/fork_db.rs b/crates/anvil/src/eth/backend/mem/fork_db.rs index 107695b6b1544..952248d6dea6d 100644 --- a/crates/anvil/src/eth/backend/mem/fork_db.rs +++ b/crates/anvil/src/eth/backend/mem/fork_db.rs @@ -5,14 +5,12 @@ use crate::eth::backend::db::{ use alloy_primitives::{Address, B256, U256, map::HashMap}; use alloy_rpc_types::BlockId; use foundry_evm::{ - backend::{ - BlockchainDb, DatabaseError, DatabaseResult, RevertStateSnapshotAction, StateSnapshot, - }, + backend::{BlockchainDb, DatabaseResult, RevertStateSnapshotAction, StateSnapshot}, fork::database::ForkDbStateSnapshot, }; use revm::{ context::BlockEnv, - database::{Database, DatabaseRef, DbAccount}, + database::{Database, DbAccount}, state::AccountInfo, }; @@ -89,10 +87,6 @@ impl Db for ForkedDatabase { } impl MaybeFullDatabase for ForkedDatabase { - fn as_dyn(&self) -> &dyn DatabaseRef { - self - } - fn maybe_as_full_db(&self) -> Option<&HashMap> { Some(&self.database().cache.accounts) } @@ -128,10 +122,6 @@ impl MaybeFullDatabase for ForkedDatabase { } impl MaybeFullDatabase for ForkDbStateSnapshot { - fn as_dyn(&self) -> &dyn DatabaseRef { - self - } - fn maybe_as_full_db(&self) -> Option<&HashMap> { Some(&self.local.cache.accounts) } diff --git a/crates/anvil/src/eth/backend/mem/in_memory_db.rs b/crates/anvil/src/eth/backend/mem/in_memory_db.rs index fb6667ac8674a..d395259bad901 100644 --- a/crates/anvil/src/eth/backend/mem/in_memory_db.rs +++ b/crates/anvil/src/eth/backend/mem/in_memory_db.rs @@ -106,10 +106,6 @@ impl Db for MemDb { } impl MaybeFullDatabase for MemDb { - fn as_dyn(&self) -> &dyn DatabaseRef { - self - } - fn maybe_as_full_db(&self) -> Option<&HashMap> { Some(&self.inner.cache.accounts) } diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index 5e1db5245536f..15aee4389daba 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -137,9 +137,9 @@ pub mod inspector; pub mod state; pub mod storage; -/// Helper trait that combines DatabaseRef with Debug. +/// Helper trait that combines revm::DatabaseRef with Debug. /// This is needed because alloy-evm requires Debug on Database implementations. -/// Specific implementation for dyn Db since trait object upcasting is not stable. +/// With trait upcasting now stable, we can now upcast from this trait to revm::DatabaseRef. pub trait DatabaseRef: revm::DatabaseRef + Debug {} impl DatabaseRef for T where T: revm::DatabaseRef + Debug {} impl DatabaseRef for dyn crate::eth::backend::db::Db {} @@ -1503,7 +1503,7 @@ impl Backend { if let Some(block_overrides) = overrides.block { cache_db.apply_block_overrides(*block_overrides, &mut block); } - self.call_with_state(&cache_db as &dyn DatabaseRef, request, fee_details, block) + self.call_with_state(&cache_db, request, fee_details, block) }?; trace!(target: "backend", "call return {:?} out: {:?} gas {} on block {}", exit, out, gas, block_number); Ok((exit, out, gas, state)) @@ -1715,7 +1715,7 @@ impl Backend { // recorded and included in logs inspector = inspector.with_transfers(); let mut evm= self.new_evm_with_inspector_ref( - &cache_db as &dyn DatabaseRef, + &cache_db, &env, &mut inspector, ); @@ -1724,7 +1724,7 @@ impl Backend { evm.transact(env.tx)? } else { let mut evm = self.new_evm_with_inspector_ref( - &cache_db as &dyn DatabaseRef, + &cache_db, &env, &mut inspector, ); @@ -1932,11 +1932,8 @@ impl Backend { ); let env = self.build_call_env(request, fee_details, block); - let mut evm = self.new_evm_with_inspector_ref( - &cache_db as &dyn DatabaseRef, - &env, - &mut inspector, - ); + let mut evm = + self.new_evm_with_inspector_ref(&cache_db, &env, &mut inspector); let ResultAndState { result, state: _ } = evm.transact(env.tx)?; drop(evm); @@ -1968,11 +1965,8 @@ impl Backend { .map_err(|err| BlockchainError::Message(err.to_string()))?; let env = self.build_call_env(request, fee_details, block.clone()); - let mut evm = self.new_evm_with_inspector_ref( - &cache_db as &dyn DatabaseRef, - &env, - &mut inspector, - ); + let mut evm = + self.new_evm_with_inspector_ref(&cache_db, &env, &mut inspector); let result = evm.transact(env.tx.clone())?; let res = evm .inspector_mut() @@ -1990,11 +1984,7 @@ impl Backend { .with_tracing_config(TracingInspectorConfig::from_geth_config(&config)); let env = self.build_call_env(request, fee_details, block); - let mut evm = self.new_evm_with_inspector_ref( - &cache_db as &dyn DatabaseRef, - &env, - &mut inspector, - ); + let mut evm = self.new_evm_with_inspector_ref(&cache_db, &env, &mut inspector); let ResultAndState { result, state: _ } = evm.transact(env.tx)?; let (exit_reason, gas_used, out) = match result { @@ -2502,7 +2492,7 @@ impl Backend { pub fn get_code_with_state( &self, - state: &dyn DatabaseRef, + state: &dyn DatabaseRef, address: Address, ) -> Result { trace!(target: "backend", "get code for {:?}", address); @@ -2554,7 +2544,7 @@ impl Backend { address: Address, ) -> Result where - D: DatabaseRef, + D: DatabaseRef, { trace!(target: "backend", "get balance for {:?}", address); Ok(state.basic_ref(address)?.unwrap_or_default().balance)