diff --git a/crates/anvil/src/eth/api.rs b/crates/anvil/src/eth/api.rs index 9ab3bc34367ac..ad5d08241356f 100644 --- a/crates/anvil/src/eth/api.rs +++ b/crates/anvil/src/eth/api.rs @@ -82,7 +82,7 @@ use anvil_rpc::{error::RpcError, response::ResponseResult}; use foundry_common::provider::ProviderBuilder; use foundry_evm::decode::RevertDecoder; use futures::{ - StreamExt, + StreamExt, TryFutureExt, channel::{mpsc::Receiver, oneshot}, }; use parking_lot::RwLock; @@ -774,8 +774,8 @@ impl EthApi { { // if this predates the fork we need to fetch balance, nonce, code individually // because the provider might not support this endpoint - let balance = self.balance(address, Some(number.into())); - let code = self.get_code(address, Some(number.into())); + let balance = fork.get_balance(address, number).map_err(BlockchainError::from); + let code = fork.get_code(address, number).map_err(BlockchainError::from); let nonce = self.get_transaction_count(address, Some(number.into())); let (balance, code, nonce) = try_join!(balance, code, nonce)?; diff --git a/crates/anvil/tests/it/fork.rs b/crates/anvil/tests/it/fork.rs index da5274d94f0f5..c9d9b2c80b8fc 100644 --- a/crates/anvil/tests/it/fork.rs +++ b/crates/anvil/tests/it/fork.rs @@ -13,7 +13,7 @@ use alloy_network::{EthereumWallet, ReceiptResponse, TransactionBuilder, Transac use alloy_primitives::{Address, Bytes, TxHash, TxKind, U64, U256, address, b256, bytes, uint}; use alloy_provider::Provider; use alloy_rpc_types::{ - BlockId, BlockNumberOrTag, + AccountInfo, BlockId, BlockNumberOrTag, anvil::Forking, request::{TransactionInput, TransactionRequest}, state::EvmOverrides, @@ -1619,6 +1619,27 @@ async fn test_fork_get_account() { assert_eq!(alice_acc_init, alice_acc_prev_block); } +#[tokio::test(flavor = "multi_thread")] +async fn test_fork_get_account_info() { + let (_api, handle) = spawn(fork_config()).await; + let provider = handle.http_provider(); + + let info = provider + .get_account_info(address!("0x19e53a7397bE5AA7908fE9eA991B03710bdC74Fd")) + // predates fork + .number(BLOCK_NUMBER - 1) + .await + .unwrap(); + assert_eq!( + info, + AccountInfo { + balance: U256::from(14353753764795095694u64), + nonce: 6689, + code: Default::default(), + } + ); +} + fn assert_hardfork_config( config: &EthConfig, expected_blob_params: &BlobParams,