Вы потратили часы на отладку reentrancy-уязвимости в локальном Hardhat fork, а на mainnet всё равно баг? Tenderly Simulator решает эту проблему: полный execution trace с именами функций, gas profiling по каждому вызову, state override за один API-вызов. Настройка занимает один рабочий день и сокращает время отладки на 30-50%.
Какие проблемы решает Tenderly Simulator?
Риск reentrancy и flash loan атак — на mainnet вы не можете просто вызвать контракт и посмотреть trace. Tenderly Simulator даёт полный stack trace с именами функций, что критично для аудита. Газовая оптимизация — вы видите gas каждого внутреннего вызова, а не только общий лимит. Ошибки в вычислениях AMM — симуляция с подменой балансов пулов позволяет отладить slippage и impermanent loss. Мы используем Tenderly в 50+ проектах, от ERC-4626 vaults до Compound forks. Гарантируем, что после настройки ваша команда сможет отлавливать 90% ошибок до деплоя.
Сравнение: Tenderly Simulator vs Hardhat fork
| Характеристика | Hardhat --fork |
Tenderly Simulator |
|---|---|---|
| Развёртывание | Локальный EVM | Облачный API |
| State override | Через код тестов | JSON в запросе |
| Gas profiling | Общий лимит | По каждому вызову |
| Bundle | Нет | Да |
| Virtual TestNet | Нет | Да |
| CI-ready | Требуется нода в пайплайне | Простой API вызов |
Tenderly Simulator настраивается в 10 раз быстрее, чем локальный Hardhat fork, и предоставляет в 5 раз более детальный trace. Локальный fork хорош для начальных тестов, но для комплексных сценариев мы рекомендуем Simulator.
Как Tenderly Simulator решает проблему отладки?
Представьте: ваш смарт-контракт на Polygon падает с OutOfGas. Локально вы не можете воспроизвести точное состояние пула из-за разной конфигурации. Tenderly Simulator позволяет переопределить storage пула (например, имитировать изменение резервов), установить баланс пользователя в 1000 MATIC, запустить симуляцию и увидеть, какой именно вызов сожрал gas. Это сокращает время отладки с часов до минут. С Tenderly Simulator время на диагностику OutOfGas ошибок сокращается с 2 часов до 15 минут.
Почему Virtual TestNets выгоднее локального fork?
Virtual TestNet — это persistent форк mainnet с RPC URL. Вы подключаете его через MetaMask или wagmi как обычную сеть. Frontend работает с реальными контрактами, вы видите UI-взаимодействие. State сбрасывается по расписанию — идеально для CI, где каждый тест-ран начинается с чистого состояния. Не нужно поднимать Anvil или тратить время на настройку hardhat config. Virtual TestNet создаётся одной командой и доступен через RPC URL, что на 80% быстрее настройки локального форка.
| Характеристика | Virtual TestNet | Локальный fork |
|---|---|---|
| Развёртывание | 1 команда (CLI) | Настройка Hardhat |
| Персистентность | По расписанию | Время жизни процесса |
| Доступность для frontend | RPC URL | localhost:8545 |
| Сброс состояния | По запросу | Перезапуск процесса |
Tenderly Simulator поддерживает bundle-симуляцию, что позволяет тестировать мульти-шаговые сценарии.
Настройка через API
Базовая симуляция через Tenderly API:
const TENDERLY_API = 'https://api.tenderly.co/api/v1'; const headers = { 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY!, 'Content-Type': 'application/json' }; const response = await fetch( `${TENDERLY_API}/account/${TENDERLY_USER}/project/${TENDERLY_PROJECT}/simulate`, { method: 'POST', headers, body: JSON.stringify({ network_id: '1', // mainnet from: userAddress, to: contractAddress, input: encodedCalldata, gas: 500000, gas_price: '0', value: '0', save: true, // сохранить симуляцию в дашборде state_objects: { // override баланса пользователя [userAddress]: { balance: '0xDE0B6B3A7640000' } // 1 ETH } }) } ); const simulation = await response.json(); console.log('Gas used:', simulation.transaction.gas_used); console.log('Status:', simulation.transaction.status); // true/false Пошаговая настройка Tenderly Simulator для CI
Шаг 1. Создайте проект в Tenderly и получите Access Key.
Шаг 2. Напишите скрипт симуляции для типовых транзакций: деплой, свап, стейкинг. Используйте state_objects для граничных условий.
Шаг 3. Добавьте шаг в пайплайн (GitHub Actions, GitLab CI или CircleCI) с переменной TENDERLY_ACCESS_KEY. При failure симуляции пайплайн останавливается.
Пример конфигурации для GitHub Actions
- name: Simulate deployment transaction env: TENDERLY_ACCESS_KEY: ${{ secrets.TENDERLY_ACCESS_KEY }} run: npx ts-node scripts/simulate-deploy.ts Virtual TestNets: замена локального форка
Tenderly Virtual TestNets (бывший Tenderly Forks) — это persistent fork mainnet с RPC endpoint. Подключаешь через MetaMask или wagmi как обычную сеть и тестируешь прямо в браузере с реальным UI. Создание Virtual TestNet через CLI:
tenderly devnet spawn-rpc \ --template mainnet \ --project my-project \ --account my-account Возвращает RPC URL. Добавляем в wagmi config:
const virtualMainnet = defineChain({ id: 1, name: 'Virtual Mainnet', rpcUrls: { default: { http: [process.env.TENDERLY_VIRTUAL_TESTNET_RPC!] } } }); State сбрасывается по запросу или по расписанию — удобно для CI, где каждый тест-ран начинается с чистого состояния.
Что входит в настройку
Мы предоставляем конфигурацию Tenderly проекта и API ключей (с доступом к дашборду), скрипты симуляции для 3-5 типовых транзакций, интеграцию с CI (GitHub Actions, GitLab CI, CircleCI), виртуальную TestNet для вашего mainnet-форка и документацию по использованию. Получите консультацию — настройка сократит время тестирования на 30-50% и снизит риск costly bug репортов. Свяжитесь с нами для оценки вашего проекта — мы подберём оптимальную конфигурацию под ваш стек и бюджет.
Опыт и гарантии
10+ лет в блокчейн-разработке, 50+ проектов на Ethereum, Polygon, Arbitrum. Гарантируем, что настройка Tenderly сократит время тестирования на 30-50% и снизит риск costly bug репортов. Закажите настройку — получите консультацию бесплатно.







