Перейти к основному содержанию

Нужен ли платный тарифный план для использования виртуальных окружений?


Да. Виртуальные окружения доступны на платном тарифе. Чтобы включить их для вашей учётной записи, свяжитесь с нашим отделом продаж, чтобы запланировать звонок и обсудить обновление тарифа.

Как создать виртуальные окружения?


Вы можете создать виртуальное окружение двумя способами:

Почему следует задавать уникальный chain ID?


Устанавливайте пользовательский chain ID, отличный от chain ID родительской сети.Рекомендация: добавьте префикс 7357 (test) к оригинальному Chain ID сети. Например, если вы создаёте виртуальное окружение, форкая Ethereum Mainnet (chain ID: 1), установите chain ID вашего виртуального окружения примерно в 73571.Это рекомендуется по нескольким причинам:
  • Поскольку сеть виртуального окружения независима от сети Mainnet, у неё должен быть независимый и уникальный chain ID.
  • Использование уникального chain ID — мера безопасности, которая защищает ваш dapp от атак повторного воспроизведения транзакций.
  • Кошельки, такие как MetaMask, распознают, что оригинальный chain ID уже используется, и могут ошибочно принять ваше виртуальное окружение за родительскую сеть, если оно не использует уникальный chain ID.

Как виртуальные окружения разрешают временные метки?


Когда транзакция или eth_call обращается к block.timestamp внутри контракта, значение будет зависеть от того, направлена ли транзакция к блоку latest или pending.
  • Для блока pending значение — это текущее время, скорректированное на смещение корректировки: block.timestamp == time.now() + adjustment_offset.
  • Для блока latest значение — это временная метка последнего блока: block.timestamp == latest_block.timestamp
adjustment_offset берётся из методов корректировки времени evm_setNextBlockTimestamp и evm_increaseTime.Узнать больше →

Как работает майнинг?


Каждый раз, когда вы отправляете транзакцию в виртуальное окружение через eth_sendRawTransaction и eth_sendRawTransaction, майнится блок и номер блока увеличивается на 1. Начальный номер блока берётся из последнего блока оригинальной сети на момент создания.

Как работает State Sync?


State Sync позволяет виртуальному окружению отслеживать живое состояние оригинальной сети.
  • Пока транзакция виртуального окружения не изменит слот хранилища, виртуальное окружение отслеживает текущее значение из оригинальной сети.
  • После того как транзакция виртуального окружения изменит слот X в контракте C, любое последующее чтение вернёт это значение. Неизменённое C.Y будет отражать значение из оригинальной сети.

Почему я не вижу транзакции Mainnet при State Sync?


State Sync отслеживает состояние, но не синхронизирует и не отображает из оригинальной сети:
  • транзакции
  • логи событий
  • блоки

Есть ли проблемы с State Sync?


Поведение контрактов Mainnet, кэширующих block.number, непредсказуемо при выполнении транзакций виртуального окружения, поскольку номер блока растёт с разной скоростью в Mainnet и виртуальном окружении.

Как ускорить течение времени?


Чтобы обеспечить более быстрое тестирование кода, зависящего от текущей временной метки (например, расчёты доходности и вознаграждений), вы можете использовать tenderly_increaseTime.

Поддерживают ли виртуальные окружения WebSockets?


Да, виртуальные окружения поддерживают WebSockets. Просто используйте wss:// вместо https:// в URL.

Когда стоит форкать виртуальное окружение?


Вы можете форкнуть существующее виртуальное окружение после деплоя контрактов и настройки состояния виртуального окружения посредством пополнения аккаунтов, отправки транзакций или использования Admin RPC.
  • Нетронутая стартовая точка: используя форкнутое виртуальное окружение для разработки или экспериментов, вы сохраняете стартовую точку чистой от изменений.
  • Рабочая копия на каждого члена команды: после подготовки смарт-контрактов члены вашей команды могут работать со своей собственной рабочей копией сети.

Как виртуальные окружения помогают командной работе?


При использовании виртуальных окружений для деплоя смарт-контрактов участники вашей организации Tenderly будут иметь прямой доступ к виртуальному окружению.После деплоя в виртуальное окружение вы можете распространять конфигурацию сети и контракта, чтобы разработчики других компонентов, таких как UI, API и индексация данных, могли подключаться к подготовленным контрактам.Вот некоторые рекомендации:
  1. Подготовьте контракты в виртуальном окружении.
  2. Форкните staging-виртуальное окружение для каждой команды (фронтенд, бэкенд и т. д.), чтобы обеспечить границы между командами и уменьшить шум от тестовых данных в разработке.
  3. Обновите все релевантные git-репозитории конфигурацией виртуального окружения и информацией о контрактах:
    • Конфигурация сети: поделитесь chain ID и Admin RPC (чтобы другие разработчики могли управлять состоянием сети)
    • ABI контрактов
    • Адреса деплоя контрактов
  4. При локальной разработке (UI, бэкенд) переключайтесь на виртуальное окружение.
  5. Делитесь неудачными транзакциями с разработчиками смарт-контрактов

Как подготовить dapp для внешних демо и тестирования сообществом?


При подготовке dapp’а для внешнего и демо-тестирования убедитесь, что:
  • Вы подготовили контракты в виртуальном окружении.
  • Вы подготовили все офф-чейн компоненты (бэкенд, решения индексации данных и т. д.) и подключили их к виртуальному окружению.
  • Подключили ваш подготовленный dapp через Public RPC (не Admin RPC) и подключили его к другим офф-чейн компонентам.

Как откатить состояние виртуального окружения?


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

Как назвать моё виртуальное окружение?


Для более удобного различения добавляйте к вашим виртуальным окружениям префикс virtual (например, virtualMainnet). Это особенно полезно для интеграций, таких как Viem, HardHat и другие.Альтернативно включайте назначение в имя виртуального окружения:
  • internalTestingMainnet
  • demoMainnet
  • dataInsightsMainnet
  • ciMainnet
  • bugBountyBase
  • frontEndDevOptimism
  • communityTestingAvalanche

Что такое видимость верификации в виртуальных окружениях?


Публичный обозреватель виртуального окружения соблюдает видимость верификации для контрактов, которые вы деплоите и верифицируете в виртуальном окружении:
  • Full: публичный обозреватель блоков будет отображать весь исходный код всех функций
  • ABI-only: публичный обозреватель блоков показывает только имена и сигнатуры функций и событий, включая имена аргументов. Так ваш исходный код остаётся невидимым за пределами вашего проекта.
  • None: показывает только итоговые результаты транзакций, не раскрывая исходный код или имена методов.

Как запускать Foundry-скрипты в виртуальных окружениях?


Используйте флаг --slow при запуске Foundry-скриптов, чтобы предотвратить пакетирование транзакций. С ним транзакция отправляется только после подтверждения предшествующей транзакции.
forge script script/Counter.s.sol:CounterScript \
--slow
--verify \
--verifier-url $TENDERLY_VERIFIER_URL \
--rpc-url $TENDERLY_VIRTUAL_TESTNET_RPC_URL \
--private-key $PRIVATE_KEY  \
--etherscan-api-key $TENDERLY_ACCESS_TOKEN \
--broadcast \

При пополнении аккаунтов нужно ли вводить сумму в wei?


При использовании Unlimited Faucet в Dashboard 1 означает 1 ETH — как для нативного, так и для ERC-20 баланса. В случае токенов ERC-20 Tenderly автоматически рассчитывает точное количество в wei, используя количество знаков после запятой ERC-20.

В чём разница между Admin RPC и Public RPC?


Public RPC обеспечивает стандартное взаимодействие через JSON-RPC. Это RPC, который вы будете использовать для интеграции в UI или бэкенд вашего dapp’а, когда будете готовы к внешней демонстрации своего dapp’а.Admin RPC поддерживает дополнительные RPC-методы, обеспечивающие более высокий контроль над состоянием и хранилищем сети, а также балансами аккаунтов. Это RPC, который вы будете использовать в своих скриптах деплоя для программного управления сетью.

Могу ли я имитировать отправителя в виртуальных окружениях?


Вы можете успешно отправлять транзакции, используя любой адрес отправителя через Dashboard. Tenderly будет запускать эти транзакции в виртуальных окружениях без проверки подписей.

Как получить точные оценки газа?


Использование газа отражает точный расход газа всех OPCODES оригинальной сети. Вы можете получить расход газа:
  • в Transaction Overview через Dashboard,
  • через tenderly_estimateGas для оценки одиночных транзакций со 100% точностью
  • через tenderly_estimateGasBundle для оценки нескольких транзакций со 100% точностью

Будет ли работать верификация, если я использую tenderly_setcode?


При деплое изменённого байткода на адрес информация о верификации больше не будет соответствовать, и получить доступ к трейсам и debugger’у для целевых адресов будет невозможно.