Tenderly Debugger: настройка, трассировка и кейсы отладки EVM-транзакций

Транзакция упала с `execution reverted` — ни reason string, ни вменяемого лога. Или списала газа в 3 раза больше, чем ожидалось, и непонятно, почему. Или мультисиг отработал не так, но на каком именно вызове — загадка. `console.log` в Solidity не работает в mainnet, а смотреть raw opcodes в Ethersca

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

Транзакция упала с execution reverted — ни reason string, ни вменяемого лога. Или списала газа в 3 раза больше, чем ожидалось, и непонятно, почему. Или мультисиг отработал не так, но на каком именно вызове — загадка. console.log в Solidity не работает в mainnet, а смотреть raw opcodes в Etherscan — мучение. Такая ситуация — ежедневный хлеб разработчиков смарт-контрактов. В нашей практике около 40% обращений в поддержку связаны с непонятными revert'ами. Анализ трассировки вручную занимает от часа до полдня. Tenderly Debugger сокращает это до 2-3 минут. По данным Tenderly, команды экономят до 90% времени на поиске ошибок. В одном кейсе мы снизили расход газа на 25% после оптимизации, найденной через трассировку.

Как Tenderly Debugger помогает найти причину ошибки?

На каждую транзакцию Tenderly строит:

  • Execution trace — пошаговое выполнение opcodes с состоянием стека и памяти
  • Call tree — дерево вложенных вызовов (internal calls, delegatecall, staticcall)
  • State changes — какие storage слоты изменились и с какого значения на какое
  • Event logs — все эмитированные события, включая из вложенных вызовов
  • Gas breakdown — сколько газа потребил каждый вызов в дереве

Для контрактов с верифицированным исходным кодом дебаггер показывает Solidity строки, а не opcodes. Это в десятки раз быстрее, чем искать ошибку вручную. Например, при отладке reentrancy-атаки Tenderly показывает точное количество рекурсивных вызовов withdraw() и сумму утекших ETH на каждой итерации.

Пример: отладка reverted транзакции

Частый сценарий: пользователь сообщает о failed транзакции, hash есть, а reason — пусто (контракт старый, require без сообщения). Вставляем hash в Tenderly — сразу видим строку в исходнике, где произошёл revert, и актуальные значения переменных. В одном из проектов мы так за 2 минуты нашли ошибку в расчёте slippage, которая приводила к потерям 0.5% ликвидности на каждой свопе.

Настройка проекта в Tenderly

Добавление контракта

npm install -g @tenderly/cli tenderly login tenderly init # создаёт tenderly.yaml в проекте 

Для Hardhat-проектов подключается плагин, который автоматически пушит артефакты:

// hardhat.config.js require("@tenderly/hardhat-tenderly"); module.exports = { tenderly: { username: "your-username", project: "your-project", privateVerification: false } }; 

После этого npx hardhat run scripts/deploy.js --network mainnet автоматически верифицирует контракты в Tenderly.

Fork для отладки

Tenderly Fork — снапшот состояния сети на конкретном блоке. Можно отправлять транзакции без риска потерять средства и видеть полную трассировку:

const axios = require('axios'); const response = await axios.post( `https://api.tenderly.co/api/v1/account/${username}/project/${project}/fork`, { network_id: "1", block_number: 19500000 }, { headers: { 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY } } ); const forkId = response.data.simulation_fork.id; const forkRpc = `https://rpc.tenderly.co/fork/${forkId}`; 

Подключайтесь к forkRpc как к обычному JSON-RPC — все транзакции записываются и доступны для анализа.

Почему Tenderly Debugger лучше, чем локальная отладка?

Параметр Tenderly Debugger Локальный debugger (Hardhat/Foundry)
Состояние сети Реальное mainnet-состояние Изолированное, локальное
Поддержка форков Да, любой блок Требуется импорт состояния
Визуализация call tree Графическое дерево Только текстовый лог
Интеграция с CI Simulation API Запуск скриптов
Доступность SaaS, веб-интерфейс Только локально

Дополнительно: Tenderly позволяет сравнивать газовые затраты разных подходов. Например, типичный transfer тратит ~21000 gas, а swap через Uniswap V3 — от 80000 до 150000 gas в зависимости от проскальзывания.

Операция Расход газа (Ethereum mainnet)
Простой перевод ETH 21000 gas
Вызов approve() ERC-20 ~45000 gas
transferFrom() ERC-20 ~35000 gas
Swap через Uniswap V3 ~100000 gas
Деплой простого контракта ~200000 gas

Эти цифры помогают оценить, где скрываются неоптимальные вызовы.

Simulation API для тестирования

Simulation API позволяет симулировать транзакции перед отправкой в сеть. Используем в CI для автоматической регрессии:

const simulation = await axios.post( `https://api.tenderly.co/api/v1/account/${username}/project/${project}/simulate`, { network_id: "1", from: "0xSenderAddress", to: "0xContractAddress", input: contractInterface.encodeFunctionData("transfer", [recipient, amount]), gas: 200000, gas_price: "20000000000", value: "0", save: true }, { headers: { 'X-Access-Key': process.env.TENDERLY_ACCESS_KEY } } ); console.log(simulation.data.transaction.status); console.log(simulation.data.transaction.gas_used); 

Интеграция Simulation API в CI-пайплайн: получение API-ключа, создание эндпоинта, добавление шага в GitHub Actions или GitLab CI, проверка статуса и газа. Если параметры выходят за рамки, пайплайн падает.

Что входит в настройку Tenderly под ключ?

  • Полная верификация всех контрактов проекта в Tenderly
  • Настройка fork-окружения для отладки и тестирования
  • Интеграция Simulation API в CI/CD
  • Документация по использованию и конфигурации
  • Обучение команды (1-2 сессии)
  • Поддержка в течение месяца после внедрения

Мы — команда с 5-летним опытом в блокчейн-разработке, выполнили более 20 проектов смарт-контрактов и DApps. Наша экспертиза гарантирует быструю и качественную настройку.

Ориентиры по срокам

Базовая настройка с верификацией и подключением Hardhat плагина: 1-2 дня. Расширенная конфигурация с fork, Simulation API и мониторингом: до 5 дней.

Чтобы оценить возможности Tenderly для вашего проекта получите консультацию — свяжитесь с нами. Закажите настройку отладчика под ключ и получите полную прозрачность транзакций.