diff --git a/crates/provider/src/ext/anvil.rs b/crates/provider/src/ext/anvil.rs
index 8668c2cf0d7..ea293068e3d 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,31 @@ mod tests {
         assert_ne!(reorged_block.header.hash, new_block.header.hash);
     }
 
+    #[tokio::test]
+    #[ignore]
+    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();