From 275dfc26ebc9b797e905efe65fce516db015ce84 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Fri, 1 Dec 2023 17:07:21 +0100 Subject: [PATCH 1/2] fix: ensure prevrandao is set on reset fork --- crates/anvil/src/eth/backend/mem/mod.rs | 5 +++-- crates/anvil/tests/it/fork.rs | 29 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/crates/anvil/src/eth/backend/mem/mod.rs b/crates/anvil/src/eth/backend/mem/mod.rs index b82591d1532c..a41544fea320 100644 --- a/crates/anvil/src/eth/backend/mem/mod.rs +++ b/crates/anvil/src/eth/backend/mem/mod.rs @@ -398,11 +398,12 @@ impl Backend { timestamp: fork_block.timestamp.to_alloy(), gas_limit: fork_block.gas_limit.to_alloy(), difficulty: fork_block.difficulty.to_alloy(), - prevrandao: fork_block.mix_hash.map(|h| h.to_alloy()), + // ensures prevrandao is set + prevrandao: Some(fork_block.mix_hash.map(|h| h.to_alloy()).unwrap_or_default()), // Keep previous `coinbase` and `basefee` value coinbase: env.block.coinbase, basefee: env.block.basefee, - ..Default::default() + ..env.block.clone() }; self.time.reset((env.block.timestamp.to_ethers()).as_u64()); diff --git a/crates/anvil/tests/it/fork.rs b/crates/anvil/tests/it/fork.rs index 490121afaaca..667a5823f9ec 100644 --- a/crates/anvil/tests/it/fork.rs +++ b/crates/anvil/tests/it/fork.rs @@ -899,3 +899,32 @@ async fn can_override_fork_chain_id() { let chain_id = provider.get_chainid().await.unwrap(); assert_eq!(chain_id.as_u64(), chain_id_override); } + +// +#[tokio::test(flavor = "multi_thread")] +async fn test_fork_reset_moonbeam() { + crate::init_tracing(); + let (api, handle) = spawn(fork_config() + .with_eth_rpc_url(Some("https://rpc.api.moonbeam.network".to_string())) + .with_fork_block_number(None::) + ).await; + let provider = handle.http_provider(); + + let accounts: Vec<_> = handle.dev_wallets().collect(); + let from = accounts[0].address(); + + let tx = TransactionRequest::new().to(Address::random()).value(1337u64).from(from); + let tx = provider.send_transaction(tx, None).await.unwrap().await.unwrap().unwrap(); + assert_eq!(tx.status, Some(1u64.into())); + + + // reset to check timestamp works after resetting + api.anvil_reset(Some(Forking { json_rpc_url: Some("https://rpc.api.moonbeam.network".to_string() + ), block_number: None })) + .await + .unwrap(); + + let tx = TransactionRequest::new().to(Address::random()).value(1337u64).from(from); + let tx = provider.send_transaction(tx, None).await.unwrap().await.unwrap().unwrap(); + assert_eq!(tx.status, Some(1u64.into())); +} \ No newline at end of file From def0c0c7ada37ffde876f6c41f4afba5257afe6a Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Fri, 1 Dec 2023 17:10:54 +0100 Subject: [PATCH 2/2] rustfmt --- crates/anvil/tests/it/fork.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/crates/anvil/tests/it/fork.rs b/crates/anvil/tests/it/fork.rs index 667a5823f9ec..13936f7d20c3 100644 --- a/crates/anvil/tests/it/fork.rs +++ b/crates/anvil/tests/it/fork.rs @@ -904,10 +904,12 @@ async fn can_override_fork_chain_id() { #[tokio::test(flavor = "multi_thread")] async fn test_fork_reset_moonbeam() { crate::init_tracing(); - let (api, handle) = spawn(fork_config() - .with_eth_rpc_url(Some("https://rpc.api.moonbeam.network".to_string())) - .with_fork_block_number(None::) - ).await; + let (api, handle) = spawn( + fork_config() + .with_eth_rpc_url(Some("https://rpc.api.moonbeam.network".to_string())) + .with_fork_block_number(None::), + ) + .await; let provider = handle.http_provider(); let accounts: Vec<_> = handle.dev_wallets().collect(); @@ -917,14 +919,15 @@ async fn test_fork_reset_moonbeam() { let tx = provider.send_transaction(tx, None).await.unwrap().await.unwrap().unwrap(); assert_eq!(tx.status, Some(1u64.into())); - // reset to check timestamp works after resetting - api.anvil_reset(Some(Forking { json_rpc_url: Some("https://rpc.api.moonbeam.network".to_string() - ), block_number: None })) - .await - .unwrap(); + api.anvil_reset(Some(Forking { + json_rpc_url: Some("https://rpc.api.moonbeam.network".to_string()), + block_number: None, + })) + .await + .unwrap(); let tx = TransactionRequest::new().to(Address::random()).value(1337u64).from(from); let tx = provider.send_transaction(tx, None).await.unwrap().await.unwrap().unwrap(); assert_eq!(tx.status, Some(1u64.into())); -} \ No newline at end of file +}