ChainLens reads public on-chain data. It does not place trades, hold funds, or require a wallet connection. You point it at a pool address and it streams the activity for that pair.
What ChainLens does
Get started
Install dependencies, start the API and web app, and open your first pair.
Understand the concepts
Learn how chains, providers, the live tape, and leaderboards fit together.
Configure providers
Set optional API keys and public RPC overrides through environment variables.
Call the API
Resolve pair metadata and fetch filtered events over HTTP.
Supported chains
ChainLens resolves pools and decodes activity across five chains:Highlights
- Live tape: a chronological feed of swaps and liquidity events, filterable by side, time window, and minimum USD value, with adaptive auto-refresh.
- Leaderboards: Top Buyers, Top Sellers, and Top LP, each ranking up to 10 wallets. Rankings are computed across the entire window, not just the visible slice.
- Click to filter: select a leaderboard row to narrow the tape to that wallet, then clear the filter to return to the full feed.
- Whale highlighting: events at or above $50,000 are visually accented so large moves stand out.
- Custom time windows: preset windows from 5 minutes to 7 days, plus a custom date range with second-level precision and a 7-day maximum.
- Shareable URL state: the selected chain, pool, and filters sync to query parameters so a view can be shared by link.
- Runs without API keys: with no keys set, ChainLens uses free public RPC endpoints for real events, and falls back to a deterministic mock provider when needed so the UI always renders.
Architecture at a glance
ChainLens is a monorepo with two workspaces:- API (
apps/api): a Fastify service in TypeScript that resolves pool addresses, fetches and decodes events, prices tokens, and computes summaries and leaderboards. - Web (
apps/web): a Vite plus React single-page app that renders the tape, leaderboards, summary cards, and filters.