Живой инструмент · Открытый код

EVM Transaction Troubleshooter.

Отладчик EVM, не привязанный к одной сети, который я построил и выпустил. Вставьте упавшую транзакцию, и он скажет, почему она упала, докажет исправление, не трогая сеть, и сможет отправить исправленный вызов через ваш собственный кошелёк. Живой, публичный, MIT.

Проблема

Отладка упавшей EVM-транзакции медленна и непрозрачна.

Когда транзакция откатывается, сеть даёт вам почти ничего: флаг статуса и, если повезёт, несколько байтов данных об ошибке. Инженер на другом конце обычно в разгаре инцидента, гадает между неверным адресом, отсутствующим разрешением, неправильной суммой или изменившимся контрактом. Четыре года я делал эту работу по декодированию вручную на инцидентах клиентов в Fireblocks: разбирал calldata на части, проверял разрешения и пересимулировал, пока история не сходилась.

Отладчик автоматизирует ровно этот воркфлоу. Не обозреватель блоков, не кошелёк: отладчик, построенный вокруг вопроса «почему это упало и какое минимальное изменение заставит это сработать?».

Подход

Симулировать. Декодировать. Прощупать. Трассировать. Исправить.

  1. 01
    Симулировать

    Запускает вызов в сети через eth_call, без траты газа и без отправки в сеть, чтобы воспроизвести сбой ровно так, как его видит блокчейн.

  2. 02
    Декодировать

    Определяет ABI, декодирует calldata и причину отката, превращает сырые байты в именованный вызов функции с типизированными аргументами.

  3. 03
    Прощупать

    Пересимулирует с точечной подменой состояния (балансы, разрешения, слоты хранилища), чтобы доказать, какое недостающее условие вызывает откат.

  4. 04
    Трассировать

    Отрисовывает полное дерево трассировки вызовов с изменениями активов, чтобы точка сбоя и её побочные эффекты были видны с первого взгляда.

  5. 05
    Исправить

    Может отправить исправленную транзакцию на стороне клиента через подключённый кошелёк, с пермалинками для шаринга и экспортом отчёта в markdown.

Ввод определяется автоматически: хеш транзакции, сырые calldata, подписанная сырая транзакция, json-запрос вызова. Ethereum по умолчанию, топ-10 EVM-сетей встроены, или подключите свой RPC.

Доказательства, а не обещания

Реальный упавший transferFrom, отлаженный от начала до конца.

Это неотредактированные снимки из живого инструмента, и каждый ведёт на пермалинк, который заново запускает ту же симуляцию. transferFrom по USDC без разрешения: инструмент декодирует откат, называет недостающее условие, а затем доказывает исправление, подменяя слот хранилища с разрешением и пересимулируя. Тот же вызов, без разрешения, затем разрешение выдано. Reverted становится Success, не потратив и веи газа.

Шаг 1 · декодированный откатREVERTED
Отладчик показывает упавшую симуляцию: строка ошибки 'ERC20: transfer amount exceeds allowance', декодированный вызов transferFrom с аргументами from, to и amount, и панель прощупывания «Isolate the cause»
Шаг 2 · исправление доказано подменой состоянияSUCCESS
Та же симуляция после подмены слота хранилища с разрешением: статус Success, тот же декодированный вызов transferFrom
Ввод · автоопределение
Главный экран отладчика: вставьте хеш транзакции, calldata, подписанную сырую транзакцию или JSON-запрос вызова; видны переключатель сети и поле ABI

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

Как это устроено

Маленькое ядро, строгие типы, тесты против реального форка.

Архитектура

Вся логика симуляции, декодирования и подмены живёт в независимом от фреймворка core-пакете поверх клиента viem, так что интерфейс, это тонкий слой, а логику можно тестировать модульно в изоляции. Небольшой прокси на Hono стоит перед RPC-эндпоинтами с allowlist, ограничением частоты и кешированием. Подпись никогда не покидает браузер: в системе нигде нет ключей на стороне сервера.

Определение ABI откатывается плавно: сначала ваш вставленный ABI, затем Sourcify и Etherscan, затем публичная база сигнатур. Контейнерные вызовы вроде multicall и транзакций Safe разворачиваются в читаемые под-вызовы.

Стек

  • Next.js App Router
  • TypeScript strict
  • Tailwind + shadcn/ui
  • viem
  • wagmi + WalletConnect
  • Hono RPC proxy
  • vitest + Playwright + Foundry Anvil

Протестировано с vitest для ядра, Playwright для интерфейса и тестами на форке Anvil, чтобы логика симуляции проверялась против реального состояния сети, а не заглушек.

Что это показывает

Почему это важно для ролей, которые я ищу.

Глубина в блокчейне, а не разговоры о нём

Селекторы откатов, подмена состояния, трассировки вызовов и учёт активов, это те части отладки EVM, которые имеют смысл, только если ты реально делал эту работу. Инструмент автоматизирует ровно тот паттерн декодирования и прощупывания, который я применял на инцидентах клиентов в Fireblocks.

Продуктовое чутьё с переднего края

Поле ввода принимает всё, что вставит туда уставший интегратор: хеш, calldata, подписанный блоб или JSON-вызов. Автоопределение, безопасная симуляция до любой отправки и пермалинк для шаринга, это всё решения про человека на другом конце, а не про технологию.

Дисциплина продакшн-инженерии

Строгий TypeScript, никаких ключей на сервере, подпись только на стороне клиента, тесты против локального форка Anvil с vitest и Playwright. Открытый код под MIT, чтобы работу можно было прочитать, а не просто ей поверить.