revert.wtf
EVM errors should not be this vague.
Paste a revert, RPC error, ethers/viem exception, simulation/debug trace, or ERC-4337 failure. revert.wtf explains what it likely means, why it happened, and what to check next.
The project includes a reusable error catalog for protocols and products, a CLI, a website, an MCP server for agents, and repo-local OpenClaw skill files for agents working on the catalog or integration code.
Monorepo
apps/web Next.js website (paste-box, encyclopedia, tools, docs)
packages/core Shared types and result models
packages/catalog Curated error catalog (JSON)
packages/parser Normalizer, revert-data extractor, decoder, explain()
packages/selectors Built-in selector / signature lookup
packages/aa ERC-4337 AA code + EntryPoint FailedOp decoder
packages/client Tiny fetch SDK for browser-safe hosted API calls
packages/search SQLite FTS catalog index for server-side search
packages/cli Local command-line decoder
packages/mcp Read-only MCP server for agents
skills/* OpenClaw workspace skills for repo-specific agents
Every package can be imported standalone. The website is just one consumer.
Quickstart
Requires Node.js 20.10+ and pnpm 9.
pnpm install
pnpm build
pnpm dev # apps/web on http://localhost:3000
pnpm test
pnpm validate:catalog
pnpm catalog:duplicates
Use the packages directly
import { explain } from "@revertwtf/parser/explain";
const result = explain({
code: -32603,
message: "Internal JSON-RPC error",
data: { code: 3, data: "0x08c379a0..." }
});
explain() also accepts structured simulator/debugger payloads. If the object
contains a failed call frame under paths like trace, calls, or stack, the
parser surfaces the failing frame before the generic wrapper error.
Browser bundle note
The full catalog-backed explainer intentionally ships a large dataset. In
browser apps, call @revertwtf/parser/explain from your server/API layer rather
than importing it into client bundles. For smaller browser-safe helpers, use
subpath imports such as:
import { describePanic } from "@revertwtf/catalog/panic";
import { decodeRevertData } from "@revertwtf/parser/decode";
import { listKnownAACodes } from "@revertwtf/aa/parse";
import { createRevertClient } from "@revertwtf/client";
@revertwtf/catalog and @revertwtf/parser/explain are the full-data surfaces;
the subpaths above are meant to keep accidental client payloads small.
See docs/package-imports.md for the package import guide.
CLI
revertwtf decode 0x4e487b71...
revertwtf explain ./error.json
revertwtf aa "AA23 reverted or OOG"
MCP Server
pnpm --filter @revertwtf/mcp build
pnpm --filter @revertwtf/mcp start
The MCP server gives agents a focused place to look up EVM, RPC, provider, wallet, ERC-4337, Blockscout, and x402 payment/facilitator errors instead of doing a broad web search.
OpenClaw Skills
Repo-local OpenClaw skills live under skills/<skill>/SKILL.md. They cover
catalog work, ecosystem research, parser/decoder changes, MCP maintenance,
frontend product UI, and release-readiness checks.
The skills are instruction-only and can be submitted to OpenClaw/ClawHub once the GitHub repository is public.
Deploy via Coolify
The repository ships a multi-stage Dockerfile that builds every package and
the standalone Next.js output. Point a Coolify Dockerfile resource at this
repo. Default port: 3000. The image includes the generated SQLite catalog
search DB and uses /data/revertwtf/ratelimit.sqlite for hosted API rate
limits.
License
MIT. Contribute catalog entries via PR.
No comments yet
Be the first to share your take.