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

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

1
Создайте снимок
2
Используйте evm_snapshot, чтобы создать снимок на текущем блоке. Метод возвращает ID снимка, который вы можете использовать для отката.
3
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')
4
Откат
5
Используйте evm_revert, чтобы откатиться к ранее созданному снимку (SNAPSHOT_ID). С этого момента все предыдущие изменения до снимка будут отброшены.
6
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

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

Одиночный evm_revert может откатить не более 2000 блоков. Если снимок находится более чем на 2000 блоков позади текущего блока, вызов завершается ошибкой:
revert operation is limited to maximum 2000 blocks
Это касается Virtual Environments, непрерывно производящих блоки (например, при выполнении запланированного задания, добывающего блоки), где целевой снимок может быстро выйти за пределы окна в 2000 блоков. Чтобы вернуться к точке, находящейся ещё дальше, вместо отката клонируйте Virtual Environment на целевом историческом блоке.

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

Чтобы получить Virtual Environment, состояние которой соответствует конкретному прошлому блоку, клонируйте её на этом блоке. Клон — это новая, независимая Virtual Environment, форкнутая в выбранной точке, при этом источник остаётся неизменным. Ограничения по дистанции нет, поэтому это способ добраться до блока более чем на 2000 блоков в прошлом. В панели откройте вкладку Activity и используйте действие клонирования на транзакции в том блоке, к которому хотите вернуться. Новая Virtual Environment создаётся с состоянием на блок этой транзакции.
Placeholder для скриншота: действие «клонировать» по транзакции на вкладке Activity.
Клонирование на историческом блоке также является правильным подходом, когда вы хотите «форкнуть на конкретном номере блока». Форк всегда начинается с последнего блока, тогда как клон может быть направлен на любой исторический блок.