diff --git a/crates/anvil/src/config.rs b/crates/anvil/src/config.rs index 32db9e25f031..a36a07b2fa65 100644 --- a/crates/anvil/src/config.rs +++ b/crates/anvil/src/config.rs @@ -1091,7 +1091,12 @@ latest block number: {latest_block}" total_difficulty: block.header.total_difficulty.unwrap_or_default(), }; - (ForkedDatabase::new(backend, block_chain_db), config) + let mut db = ForkedDatabase::new(backend, block_chain_db); + + // need to insert the forked block's hash + db.insert_block_hash(U256::from(config.block_number), config.block_hash); + + (db, config) } } diff --git a/crates/anvil/src/eth/backend/fork.rs b/crates/anvil/src/eth/backend/fork.rs index 94408756f64d..07d5449bd965 100644 --- a/crates/anvil/src/eth/backend/fork.rs +++ b/crates/anvil/src/eth/backend/fork.rs @@ -79,15 +79,13 @@ impl ClientFork { let base_fee = block.header.base_fee_per_gas; let total_difficulty = block.header.total_difficulty.unwrap_or_default(); - self.config.write().update_block( - block.header.number.ok_or(BlockchainError::BlockNotFound)?.to::(), - block_hash, - timestamp, - base_fee, - total_difficulty, - ); + let number = block.header.number.ok_or(BlockchainError::BlockNotFound)?.to::(); + self.config.write().update_block(number, block_hash, timestamp, base_fee, total_difficulty); self.clear_cached_storage(); + + self.database.write().await.insert_block_hash(U256::from(number), block_hash); + Ok(()) } diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index 202cc880e929..bf17d976541d 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -297,6 +297,10 @@ impl Backend { for (account, info) in self.genesis.account_infos() { db.insert_account(account, info); } + + // insert the new genesis hash to the database so it's available for the next block in + // the evm + db.insert_block_hash(U256::from(self.best_number()), self.best_hash()); } let db = self.db.write().await;