INTERFACES — /docs/indexer-explorer
Indexer & explorer
The node answers point queries; it does not answer "show me everything, newest first." That is the indexer's job: a TypeScript worker that walks the chain into PostgreSQL, which the explorer reads through Prisma.
Indexer
SLOT WALK
subscribe to WS slot notifications
→ getBlock(slot) for each new slot
→ upsert: block, transactions (logs, CU, programs,
fee payer, account keys), address↔signature index,
shielded-pool public stats
→ cursor row records last indexed slot
backfill: idempotent from slot 0 — restarting or
re-running over the same range converges to the same rows- Idempotent by construction — every write is keyed on (slot) or (signature), so crash-and-restart needs no special recovery.
- One writer — the indexer owns the database; the explorer only reads. Schema lives with the web workspace and migrates with standard Prisma tooling.
- Pool stats are counters — commitments, nullifiers, the current root. Nothing private exists to index; see Shielded pool.
What the explorer shows
| VIEW | CONTENT |
|---|---|
| Overview | Live slot height, totals, latest blocks and transactions. |
| Blocks / Transactions | Paged history with status, fees, programs. |
| Block / transaction / address detail | Spec-sheet views: hashes, state roots, account lists, program logs, account activity. |
| Shielded | Pool counters, tree fill, per-transaction note deltas — with amounts rendered as sealed, because they are. |
THIS SITE
The explorer you are browsing runs in design-review mode against a deterministic mock chain (wall-clock slots, seeded data) so every page renders without a live node. Wiring it to the real indexer swaps one data module — the views don't change.