From 9af381f91e7ad10d1bd34255a3af5fad34b9573b Mon Sep 17 00:00:00 2001 From: Yash Atreya <44857776+yash-atreya@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:17:57 +0530 Subject: [PATCH] fix(`anvil`): impl `maybe_as_full_db` for `ForkedDatabase` (#9465) --- crates/anvil/src/eth/backend/mem/fork_db.rs | 12 +++++-- crates/anvil/tests/it/fork.rs | 39 +++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/crates/anvil/src/eth/backend/mem/fork_db.rs b/crates/anvil/src/eth/backend/mem/fork_db.rs index a4528a8f0..be5c3bcd7 100644 --- a/crates/anvil/src/eth/backend/mem/fork_db.rs +++ b/crates/anvil/src/eth/backend/mem/fork_db.rs @@ -5,7 +5,7 @@ use crate::{ }, revm::primitives::AccountInfo, }; -use alloy_primitives::{Address, B256, U256, U64}; +use alloy_primitives::{map::HashMap, Address, B256, U256, U64}; use alloy_rpc_types::BlockId; use foundry_evm::{ backend::{ @@ -14,7 +14,7 @@ use foundry_evm::{ fork::database::ForkDbStateSnapshot, revm::{primitives::BlockEnv, Database}, }; -use revm::DatabaseRef; +use revm::{db::DbAccount, DatabaseRef}; pub use foundry_evm::fork::database::ForkedDatabase; @@ -92,6 +92,10 @@ impl MaybeFullDatabase for ForkedDatabase { self } + fn maybe_as_full_db(&self) -> Option<&HashMap
> { + Some(&self.database().accounts) + } + fn clear_into_state_snapshot(&mut self) -> StateSnapshot { let db = self.inner().db(); let accounts = std::mem::take(&mut *db.accounts.write()); @@ -127,6 +131,10 @@ impl MaybeFullDatabase for ForkDbStateSnapshot { self } + fn maybe_as_full_db(&self) -> Option<&HashMap> { + Some(&self.local.accounts) + } + fn clear_into_state_snapshot(&mut self) -> StateSnapshot { std::mem::take(&mut self.state_snapshot) } diff --git a/crates/anvil/tests/it/fork.rs b/crates/anvil/tests/it/fork.rs index 3d470894b..1b664d99e 100644 --- a/crates/anvil/tests/it/fork.rs +++ b/crates/anvil/tests/it/fork.rs @@ -1473,3 +1473,42 @@ async fn test_reset_dev_account_nonce() { assert!(receipt.status()); } + +#[tokio::test(flavor = "multi_thread")] +async fn test_fork_get_account() { + let (_api, handle) = spawn(fork_config()).await; + let provider = handle.http_provider(); + + let accounts = handle.dev_accounts().collect::