> ## 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.

# Откат состояния

> Откатите Virtual Environment к предыдущему состоянию, чтобы повторно выполнить транзакции и тесты с известного контрольного пункта.

Откат состояния может быть полезен при тестировании контрактов и протоколов, когда вы хотите отбросить все изменения состояния до позиции снимка.

<Note>
  Вместо отката состояния рассмотрите вариант [форка существующей Virtual Environment](/virtual-environments/develop/fork-testnet) и проводите тестирование на одноразовой рабочей копии.
</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" />

## Откат к снимку

<Steps>
  ### Создайте снимок

  Используйте [`evm_snapshot`](/virtual-environments/admin-rpc#evm_snapshot), чтобы создать снимок на текущем блоке.
  Метод возвращает ID снимка, который вы можете использовать для отката.

  ```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')
  ```

  ### Откат

  Используйте [`evm_revert`](/virtual-environments/admin-rpc#evm_revert), чтобы откатиться к ранее созданному снимку (`SNAPSHOT_ID`).
  С этого момента все предыдущие изменения до снимка будут отброшены.

  ```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>

## Ограничение дистанции отката

Одиночный [`evm_revert`](/virtual-environments/admin-rpc#evm_revert) может откатить не более 2000 блоков. Если снимок находится более чем на 2000 блоков позади текущего блока, вызов завершается ошибкой:

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

Это касается Virtual Environments, непрерывно производящих блоки (например, при выполнении запланированного задания, добывающего блоки), где целевой снимок может быстро выйти за пределы окна в 2000 блоков. Чтобы вернуться к точке, находящейся ещё дальше, вместо отката клонируйте Virtual Environment на целевом историческом блоке.

## Клонирование на историческом блоке

Чтобы получить Virtual Environment, состояние которой соответствует конкретному прошлому блоку, клонируйте её на этом блоке. Клон — это новая, независимая Virtual Environment, форкнутая в выбранной точке, при этом источник остаётся неизменным. Ограничения по дистанции нет, поэтому это способ добраться до блока более чем на 2000 блоков в прошлом.

В панели откройте вкладку **Activity** и используйте действие клонирования на транзакции в том блоке, к которому хотите вернуться. Новая Virtual Environment создаётся с состоянием на блок этой транзакции.

<Note>**Placeholder для скриншота:** действие «клонировать» по транзакции на вкладке Activity.</Note>

Клонирование на историческом блоке также является правильным подходом, когда вы хотите «форкнуть на конкретном номере блока». [Форк](/virtual-environments/develop/fork-testnet) всегда начинается с последнего блока, тогда как клон может быть направлен на любой исторический блок.
