Live tool · Open source

The EVM Transaction Troubleshooter.

A chain-agnostic EVM debugger I built and shipped. Paste a failing transaction and it tells you why it failed, proves the fix without touching the chain, and can broadcast the corrected call through your own wallet. Live, public, MIT.

The problem

Debugging a failed EVM transaction is slow and opaque.

When a transaction reverts, the chain gives you almost nothing: a status flag and, if you're lucky, a few bytes of error data. The engineer on the other end is usually mid-incident, guessing between a wrong address, a missing approval, a bad amount, or a contract that changed. I spent four years doing this decode work by hand on customer incidents at Fireblocks: pulling calldata apart, checking allowances, and re-simulating until the story held up.

The troubleshooter automates that exact workflow. Not a block explorer, not a wallet: a debugger built around the question "why did this fail, and what is the smallest change that makes it succeed?"

The approach

Simulate. Decode. Probe. Trace. Fix.

  1. 01
    Simulate

    Runs the call on-chain with eth_call, no gas spent and nothing broadcast, to reproduce the failure exactly as the chain sees it.

  2. 02
    Decode

    Resolves the ABI, decodes calldata and the revert reason, and turns raw bytes into a named function call with typed arguments.

  3. 03
    Probe

    Re-simulates with targeted state overrides (balances, allowances, storage slots) to prove which missing condition causes the revert.

  4. 04
    Trace

    Renders the full call trace tree with asset diffs, so the failure point and its side effects are visible at a glance.

  5. 05
    Fix

    Can broadcast a corrected transaction client-side through a connected wallet, with shareable permalinks and a markdown report export.

Input is auto-detected: transaction hash, raw calldata, signed raw transaction, json call request. Ethereum by default, the top 10 EVM chains built in, or bring your own RPC.

Proof, not promises

A real failing transferFrom, debugged end to end.

These are unedited captures from the live tool, and each one links to a permalink that reruns the exact simulation. A USDC transferFrom with no allowance: the tool decodes the revert, names the missing condition, then proves the fix by overriding the allowance storage slot and re-simulating. Same call, no allowance, then allowance granted. Reverted becomes Success without spending a wei of gas.

Step 1 · decoded revertREVERTED
The troubleshooter showing a reverted simulation: error-string 'ERC20: transfer amount exceeds allowance', the decoded transferFrom call with from, to, and amount arguments, and the 'Isolate the cause' probe panel
Step 2 · fix proved via state overrideSUCCESS
The same simulation after overriding the allowance storage slot: status Success, same decoded transferFrom call
Input · auto-detection
The troubleshooter home screen: paste a tx hash, calldata, signed raw tx, or JSON call request; chain switcher and ABI field visible

Click a capture to rerun that exact simulation in the live tool. The override slot was verified against Ethereum mainnet before publishing.

How it's built

Small core, strict types, tested against a real fork.

Architecture

All simulation, decoding, and override logic lives in a framework-agnostic core package over a viem client, so the UI is a thin layer and the logic is unit-testable in isolation. A small Hono proxy fronts the RPC endpoints with an allowlist, rate limiting, and caching. Signing never leaves the browser: there are no server-side keys anywhere in the system.

ABI resolution falls back gracefully: your pasted ABI, then Sourcify and Etherscan, then a public signature database. Container calls like multicalls and Safe transactions expand into readable sub-calls.

Stack

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

Tested with vitest for the core, Playwright for the UI, and forked-Anvil tests so the simulation logic is exercised against real chain state, not mocks.

What it demonstrates

Why this matters for the roles I'm after.

Blockchain depth, not blockchain talk

Revert selectors, state overrides, call traces, and asset accounting are the parts of EVM debugging that only make sense if you have actually done the work. The tool automates the exact decode-and-probe pattern I used on customer incidents at Fireblocks.

Customer-edge product instincts

The input box accepts whatever a stressed integrator pastes into it: a hash, calldata, a signed blob, or a JSON call. Auto-detection, safe simulation before any broadcast, and a shareable permalink are all decisions about the person on the other end, not the technology.

Production engineering discipline

Strict TypeScript, no server-side keys, client-side signing only, tested against a local Anvil fork with vitest and Playwright. Open source under MIT so the work can be read, not just believed.