> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# State को Revert करें

> एक ज्ञात checkpoint से transactions और tests फिर से चलाने के लिए Virtual Environment को पिछले state पर revert करें।

State को revert करना contracts और protocols की testing करते समय सहायक हो सकता है जब आप snapshot स्थिति तक के सभी state changes को छोड़ना चाहते हैं।

<Note>
  State को revert करने के बजाय, इसके बजाय [मौजूदा Virtual Environment को fork करने](/virtual-environments/develop/fork-testnet) पर विचार करें, और अपनी testing एक disposable working copy पर करें।
</Note>

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/testnets/revert-state.png?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=2b20e08cfbcc34550e8deb540a3a37b4" alt="" width="1920" height="850" data-path="images/testnets/revert-state.png" />

## एक snapshot पर revert करना

<Steps>
  ### Snapshot बनाएं

  वर्तमान block पर एक snapshot बनाने के लिए [`evm_snapshot`](/virtual-environments/admin-rpc#evm_snapshot) का उपयोग करें।
  मेथड snapshot ID लौटाता है जिसका उपयोग आप revert करने के लिए कर सकते हैं।

  ```bash title="snapshot.sh" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  TENDERLY_VIRTUAL_TESTNET_RPC= #...

  SNAPSHOT_ID=$(curl $TENDERLY_VIRTUAL_TESTNET_RPC \
      -X POST \
      -H "Content-Type: application/json" \
      -d '{
        "jsonrpc": "2.0",
        "method": "evm_snapshot",
        "id": "1234"
      }' \
      | jq -r  '.result')
  ```

  ### Revert

  पहले बनाए गए snapshot (`SNAPSHOT_ID`) पर वापस revert करने के लिए [`evm_revert`](/virtual-environments/admin-rpc#evm_revert) का उपयोग करें।
  इस बिंदु से आगे, snapshot तक के सभी पूर्व बदलाव त्याग दिए जाएंगे।

  ```bash title="revert.sh" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  read -r -d '' REVERT_REQUEST <<EOF
  {
    "jsonrpc": "2.0",
    "method": "evm_revert",
    "params": ["$SNAPSHOT_ID"],
    "id": "1234"
  }
  EOF

  curl $TENDERLY_VIRTUAL_TESTNET_RPC \
      -H "Content-Type: application/json" \
      -d $REVERT_REQUEST
  ```
</Steps>

## Revert distance सीमा

एकल [`evm_revert`](/virtual-environments/admin-rpc#evm_revert) अधिकतम 2000 blocks तक रोल बैक कर सकता है। यदि snapshot वर्तमान block से 2000 से अधिक blocks पीछे है, तो call इसके साथ विफल हो जाती है:

```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
revert operation is limited to maximum 2000 blocks
```

यह उन Virtual Environments को प्रभावित करता है जो continuously blocks उत्पादित करते हैं (उदाहरण के लिए, blocks minting करने वाला एक scheduled job), जहां target snapshot जल्दी से 2000-block window के बाहर गिर सकता है। और पीछे के बिंदु पर वापस जाने के लिए, revert करने के बजाय target ऐतिहासिक block पर Virtual Environment को clone करें।

## एक ऐतिहासिक block पर clone करें

एक Virtual Environment प्राप्त करने के लिए जिसका state किसी विशिष्ट पिछले block से match करता है, उसे उस block पर clone करें। Clone एक नया, स्वतंत्र Virtual Environment है जो चुने गए बिंदु पर fork किया गया है, जबकि source अछूता छोड़ दिया जाता है। कोई distance सीमा नहीं है, इसलिए 2000 blocks से अधिक पीछे के block तक पहुंचने का यह तरीका है।

Dashboard में, **Activity** tab खोलें और उस transaction पर clone action का उपयोग करें जिस block पर आप वापस जाना चाहते हैं। नया Virtual Environment उस transaction के block के state के साथ बनाया जाता है।

<Note>**Screenshot placeholder:** Activity tab पर per-transaction clone action।</Note>

एक ऐतिहासिक block पर cloning सही दृष्टिकोण भी है जब आप "किसी विशिष्ट block number पर fork" करना चाहते हैं। एक [fork](/virtual-environments/develop/fork-testnet) हमेशा latest block से शुरू होता है, जबकि clone किसी भी ऐतिहासिक block को लक्षित कर सकता है।
