From bff5d6598d16f437e61bac6928cb7b4d02fa0771 Mon Sep 17 00:00:00 2001 From: Enrique Ortiz Date: Thu, 13 Jul 2023 22:40:13 -0400 Subject: [PATCH 1/5] chore: install create_2_deployer --- anvil/src/config.rs | 12 +++++++++++- anvil/src/eth/backend/mem/mod.rs | 10 ++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/anvil/src/config.rs b/anvil/src/config.rs index b4254208cdb69..c78915ca1b337 100644 --- a/anvil/src/config.rs +++ b/anvil/src/config.rs @@ -33,7 +33,7 @@ use foundry_common::{ }; use foundry_config::Config; use foundry_evm::{ - executor::fork::{BlockchainDb, BlockchainDbMeta, SharedBackend}, + executor::{fork::{BlockchainDb, BlockchainDbMeta, SharedBackend}, inspector::DEFAULT_CREATE2_DEPLOYER}, revm, revm::primitives::{BlockEnv, CfgEnv, SpecId, TxEnv, U256 as rU256}, utils::apply_chain_and_block_specific_env_changes, @@ -164,6 +164,8 @@ pub struct NodeConfig { pub init_state: Option, /// max number of blocks with transactions in memory pub transaction_block_keeper: Option, + /// Disable the default CREATE2 deployer + pub disable_default_create2_deployer: bool, } impl NodeConfig { @@ -399,6 +401,7 @@ impl Default for NodeConfig { prune_history: Default::default(), init_state: None, transaction_block_keeper: None, + disable_default_create2_deployer: false, } } } @@ -1006,6 +1009,13 @@ latest block number: {latest_block}" ) .await; + + if !self.disable_default_create2_deployer { + backend + .set_create2_deployer(DEFAULT_CREATE2_DEPLOYER).await + .expect("Failed to create default create2 deployer"); + } + if let Some(ref state) = self.init_state { backend .get_db() diff --git a/anvil/src/eth/backend/mem/mod.rs b/anvil/src/eth/backend/mem/mod.rs index 4b6388d07fcbe..fe07774aec53e 100644 --- a/anvil/src/eth/backend/mem/mod.rs +++ b/anvil/src/eth/backend/mem/mod.rs @@ -69,7 +69,7 @@ use forge::{ }; use foundry_evm::{ decode::{decode_custom_error_args, decode_revert}, - executor::backend::{DatabaseError, DatabaseResult}, + executor::{backend::{DatabaseError, DatabaseResult}, inspector::DEFAULT_CREATE2_DEPLOYER, DEFAULT_CREATE2_DEPLOYER_CODE}, revm::{ self, db::CacheDB, @@ -87,7 +87,7 @@ use std::{ io::{Read, Write}, ops::Deref, sync::Arc, - time::Duration, + time::Duration }; use storage::{Blockchain, MinedTransaction}; use tokio::sync::RwLock as AsyncRwLock; @@ -239,6 +239,12 @@ impl Backend { backend } + pub async fn set_create2_deployer(&self, address: Address) -> DatabaseResult<()> { + self.set_code(address, Bytes::from_static(DEFAULT_CREATE2_DEPLOYER_CODE)).await?; + + Ok(()) + } + /// Updates memory limits that should be more strict when auto-mine is enabled pub(crate) fn update_interval_mine_block_time(&self, block_time: Duration) { self.states.write().update_interval_mine_block_time(block_time) From baeb2b1567ca7bf5a52557f02e170e7c748ac264 Mon Sep 17 00:00:00 2001 From: Enrique Ortiz Date: Fri, 4 Aug 2023 11:40:54 -0400 Subject: [PATCH 2/5] chore: docs --- anvil/src/config.rs | 11 ++++++++--- anvil/src/eth/backend/mem/mod.rs | 8 ++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/anvil/src/config.rs b/anvil/src/config.rs index c78915ca1b337..9d8a67b493d99 100644 --- a/anvil/src/config.rs +++ b/anvil/src/config.rs @@ -33,7 +33,10 @@ use foundry_common::{ }; use foundry_config::Config; use foundry_evm::{ - executor::{fork::{BlockchainDb, BlockchainDbMeta, SharedBackend}, inspector::DEFAULT_CREATE2_DEPLOYER}, + executor::{ + fork::{BlockchainDb, BlockchainDbMeta, SharedBackend}, + inspector::DEFAULT_CREATE2_DEPLOYER, + }, revm, revm::primitives::{BlockEnv, CfgEnv, SpecId, TxEnv, U256 as rU256}, utils::apply_chain_and_block_specific_env_changes, @@ -1009,10 +1012,12 @@ latest block number: {latest_block}" ) .await; - + // Writes the default create2 deployer to the backend, + // if the option is not disabled. if !self.disable_default_create2_deployer { backend - .set_create2_deployer(DEFAULT_CREATE2_DEPLOYER).await + .set_create2_deployer(DEFAULT_CREATE2_DEPLOYER) + .await .expect("Failed to create default create2 deployer"); } diff --git a/anvil/src/eth/backend/mem/mod.rs b/anvil/src/eth/backend/mem/mod.rs index 976932d68574d..8fd02e82df4a0 100644 --- a/anvil/src/eth/backend/mem/mod.rs +++ b/anvil/src/eth/backend/mem/mod.rs @@ -69,7 +69,10 @@ use forge::{ }; use foundry_evm::{ decode::{decode_custom_error_args, decode_revert}, - executor::{backend::{DatabaseError, DatabaseResult}, inspector::DEFAULT_CREATE2_DEPLOYER, DEFAULT_CREATE2_DEPLOYER_CODE}, + executor::{ + backend::{DatabaseError, DatabaseResult}, + DEFAULT_CREATE2_DEPLOYER_CODE, + }, revm::{ self, db::CacheDB, @@ -87,7 +90,7 @@ use std::{ io::{Read, Write}, ops::Deref, sync::Arc, - time::Duration + time::Duration, }; use storage::{Blockchain, MinedTransaction}; use tokio::sync::RwLock as AsyncRwLock; @@ -239,6 +242,7 @@ impl Backend { backend } + /// Writes the CREATE2 deployer code directly to the database at the address provided. pub async fn set_create2_deployer(&self, address: Address) -> DatabaseResult<()> { self.set_code(address, Bytes::from_static(DEFAULT_CREATE2_DEPLOYER_CODE)).await?; From 54ee4ec6c782ae8c8952db14147a806f57686fed Mon Sep 17 00:00:00 2001 From: Enrique Ortiz Date: Thu, 17 Aug 2023 18:26:53 -0400 Subject: [PATCH 3/5] chore: comment codes --- crates/evm/src/executor/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/evm/src/executor/mod.rs b/crates/evm/src/executor/mod.rs index 3de78fbc868a3..aa32860c60e4c 100644 --- a/crates/evm/src/executor/mod.rs +++ b/crates/evm/src/executor/mod.rs @@ -64,7 +64,10 @@ pub use builder::ExecutorBuilder; /// A mapping of addresses to their changed state. pub type StateChangeset = HashMap; +/// The initcode of the default create2 deployer. pub const DEFAULT_CREATE2_DEPLOYER_CODE: &[u8] = &hex!("604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3"); +/// The runtime code of the default create2 deployer. +pub const DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE: &[u8] = &hex!("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3"); /// A type that can execute calls /// From a7226369b5ec365265a98750e200948a81def880 Mon Sep 17 00:00:00 2001 From: Enrique Ortiz Date: Thu, 17 Aug 2023 18:27:07 -0400 Subject: [PATCH 4/5] fix: set proper runtime code --- crates/anvil/src/config.rs | 4 ++-- crates/anvil/src/eth/backend/mem/mod.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/anvil/src/config.rs b/crates/anvil/src/config.rs index 9d8a67b493d99..fa4f40e70d371 100644 --- a/crates/anvil/src/config.rs +++ b/crates/anvil/src/config.rs @@ -1013,8 +1013,8 @@ latest block number: {latest_block}" .await; // Writes the default create2 deployer to the backend, - // if the option is not disabled. - if !self.disable_default_create2_deployer { + // if the option is not disabled and we are not forking. + if !self.disable_default_create2_deployer && self.eth_rpc_url.is_none() { backend .set_create2_deployer(DEFAULT_CREATE2_DEPLOYER) .await diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index 3f94c5b9007f2..effa837eac673 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -70,7 +70,7 @@ use foundry_evm::{ decode::{decode_custom_error_args, decode_revert}, executor::{ backend::{DatabaseError, DatabaseResult}, - DEFAULT_CREATE2_DEPLOYER_CODE, + DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE, }, revm::{ self, @@ -243,7 +243,7 @@ impl Backend { /// Writes the CREATE2 deployer code directly to the database at the address provided. pub async fn set_create2_deployer(&self, address: Address) -> DatabaseResult<()> { - self.set_code(address, Bytes::from_static(DEFAULT_CREATE2_DEPLOYER_CODE)).await?; + self.set_code(address, Bytes::from_static(DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE)).await?; Ok(()) } From b877ad14fe7a0ae584d712e75772b28ec16d4829 Mon Sep 17 00:00:00 2001 From: Enrique Ortiz Date: Thu, 17 Aug 2023 18:28:43 -0400 Subject: [PATCH 5/5] fmt --- crates/anvil/src/eth/backend/mem/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index 1d090657478dc..c0d9b0bc3a054 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -59,8 +59,8 @@ use foundry_evm::{ decode::{decode_custom_error_args, decode_revert}, executor::{ backend::{DatabaseError, DatabaseResult}, - DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE, inspector::AccessListTracer, + DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE, }, revm::{ self,