From 8f53ad7419b50af6eb9c31cbee2982e563de11d3 Mon Sep 17 00:00:00 2001
From: Jorge Silva <jorge@syndicate.io>
Date: Thu, 30 Jan 2025 12:44:01 +0000
Subject: [PATCH 1/2] added anvil_rollback to anvil API provider

---
 crates/provider/src/ext/anvil.rs | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/crates/provider/src/ext/anvil.rs b/crates/provider/src/ext/anvil.rs
index 8668c2cf0d7..80c9cd36728 100644
--- a/crates/provider/src/ext/anvil.rs
+++ b/crates/provider/src/ext/anvil.rs
@@ -141,6 +141,9 @@ pub trait AnvilApi<N: Network>: Send + Sync {
     /// Reorg the chain
     async fn anvil_reorg(&self, options: ReorgOptions) -> TransportResult<()>;
 
+    /// Rollback the chain  
+    async fn anvil_rollback(&self, depth: Option<u64>) -> TransportResult<()>;
+
     /// Execute a transaction regardless of signature status.
     async fn eth_send_unsigned_transaction(
         &self,
@@ -310,6 +313,10 @@ where
         self.client().request("anvil_reorg", options).await
     }
 
+    async fn anvil_rollback(&self, depth: Option<u64>) -> TransportResult<()> {
+        self.client().request("anvil_rollback", (depth,)).await
+    }
+
     async fn eth_send_unsigned_transaction(
         &self,
         request: N::TransactionRequest,
@@ -972,6 +979,30 @@ mod tests {
         assert_ne!(reorged_block.header.hash, new_block.header.hash);
     }
 
+    #[tokio::test]
+    async fn test_anvil_rollback() {
+        let provider = ProviderBuilder::new().on_anvil();
+
+        // Mine two blocks
+        provider.anvil_mine(Some(2), None).await.unwrap();
+
+        let target_height = provider
+            .get_block_by_number(1.into(), BlockTransactionsKind::Hashes)
+            .await
+            .unwrap()
+            .unwrap();
+
+        provider.anvil_rollback(Some(1)).await.unwrap();
+
+        let new_head = provider
+            .get_block_by_number(BlockNumberOrTag::Latest, BlockTransactionsKind::Hashes)
+            .await
+            .unwrap()
+            .unwrap();
+
+        assert_eq!(target_height, new_head);
+    }
+
     #[tokio::test]
     async fn test_eth_send_unsigned_transaction() {
         let provider = ProviderBuilder::new().on_anvil();

From caac45c7d40b8e6ea9470a54611ff805c41c134c Mon Sep 17 00:00:00 2001
From: Matthias Seitz <matthias.seitz@outlook.de>
Date: Fri, 31 Jan 2025 10:25:43 +0100
Subject: [PATCH 2/2] chore: ignore test

---
 crates/provider/src/ext/anvil.rs | 1 +
 1 file changed, 1 insertion(+)

diff --git a/crates/provider/src/ext/anvil.rs b/crates/provider/src/ext/anvil.rs
index 80c9cd36728..ea293068e3d 100644
--- a/crates/provider/src/ext/anvil.rs
+++ b/crates/provider/src/ext/anvil.rs
@@ -980,6 +980,7 @@ mod tests {
     }
 
     #[tokio::test]
+    #[ignore]
     async fn test_anvil_rollback() {
         let provider = ProviderBuilder::new().on_anvil();