Tenderly Debugger: налаштування та налагодження EVM-транзакцій

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

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

Часті запитання

Останні роботи

  • 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 для вашого проєкту, отримайте консультацію — зв'яжіться з нами. Замовте налаштування налагоджувача під ключ і отримайте повну прозорість транзакцій.