Нужен ли платный тарифный план для использования виртуальных окружений?
Да. Виртуальные окружения доступны на платном тарифе. Чтобы включить их для вашей учётной записи, свяжитесь с нашим отделом продаж, чтобы запланировать звонок и обсудить обновление тарифа.
Как создать виртуальные окружения?
Вы можете создать виртуальное окружение двумя способами:
- Из UI Dashboard
- Используя REST API виртуальных окружений.
- Через форк существующего виртуального окружения.
Почему следует задавать уникальный 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 и индексация данных, могли подключаться к подготовленным контрактам.Вот некоторые рекомендации:
- Подготовьте контракты в виртуальном окружении.
- Форкните staging-виртуальное окружение для каждой команды (фронтенд, бэкенд и т. д.), чтобы обеспечить границы между командами и уменьшить шум от тестовых данных в разработке.
- Обновите все релевантные git-репозитории конфигурацией виртуального окружения и информацией о контрактах:
- Конфигурация сети: поделитесь chain ID и Admin RPC (чтобы другие разработчики могли управлять состоянием сети)
- ABI контрактов
- Адреса деплоя контрактов
- При локальной разработке (UI, бэкенд) переключайтесь на виртуальное окружение.
- Делитесь неудачными транзакциями с разработчиками смарт-контрактов
Как подготовить dapp для внешних демо и тестирования сообществом?
При подготовке dapp’а для внешнего и демо-тестирования убедитесь, что:
- Вы подготовили контракты в виртуальном окружении.
- Вы подготовили все офф-чейн компоненты (бэкенд, решения индексации данных и т. д.) и подключили их к виртуальному окружению.
- Подключили ваш подготовленный dapp через Public RPC (не Admin RPC) и подключили его к другим офф-чейн компонентам.
Как откатить состояние виртуального окружения?
Вместо отката состояния рекомендуется форкнуть существующее
виртуальное окружение и проводить тестирование на одноразовой рабочей
копии.Вы можете откатить состояние виртуального окружения, если этапы тестирования иначе не
воспроизводимы.
Как назвать моё виртуальное окружение?
Для более удобного различения добавляйте к вашим виртуальным окружениям префикс
virtual (например, virtualMainnet). Это
особенно полезно для интеграций, таких как Viem,
HardHat и
другие.Альтернативно включайте назначение в имя виртуального окружения:internalTestingMainnetdemoMainnetdataInsightsMainnetciMainnetbugBountyBasefrontEndDevOptimismcommunityTestingAvalanche
Что такое видимость верификации в виртуальных окружениях?
Публичный обозреватель виртуального окружения соблюдает видимость верификации для
контрактов, которые вы деплоите и верифицируете в виртуальном окружении:
- Full: публичный обозреватель блоков будет отображать весь исходный код всех функций
- ABI-only: публичный обозреватель блоков показывает только имена и сигнатуры функций и событий, включая имена аргументов. Так ваш исходный код остаётся невидимым за пределами вашего проекта.
- None: показывает только итоговые результаты транзакций, не раскрывая исходный код или имена методов.
Как запускать Foundry-скрипты в виртуальных окружениях?
Используйте флаг
--slow при запуске Foundry-скриптов, чтобы предотвратить пакетирование транзакций. С ним транзакция отправляется только после подтверждения предшествующей транзакции.При пополнении аккаунтов нужно ли вводить сумму в 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’у для целевых адресов будет невозможно.