Indexing Basics
8 examples to get you started with Solana indexing - 5 basic and 3 intermediate.
Search across all documentation pages
8 examples to get you started with Solana indexing - 5 basic and 3 intermediate.
Wallet history via getSignaturesForAddress paginates thousands of HTTP calls.
# Slow for whales - each page is one RPC round trip
solana confirm -v $(solana transaction-history <PUBKEY> 2>/dev/null | head -1) 2>/dev/null || trueRelated: Pagination & Efficiency - RPC limits
Ingest, parse, store, serve.
Validator → Geyser/Yellowstone/Webhook → Parser → Postgres → APIRelated: Building an Indexer - implementation
Historical catch-up then tail new slots.
# Conceptual: replay slots 250000000..latest from archived ledger or RPCgetBlock / getTransaction or provider archives.Use natural keys so replays do not duplicate rows.
INSERT INTO transfers (signature, idx, amount)
VALUES ($1, $2, $3)
ON CONFLICT (signature, idx) DO NOTHING;confirmed but design for slot rollback flags on critical finance.Decode instruction data deterministically.
// Concept: use generated client or anchor discriminator match
// if data[..8] == DEPOSIT_DISCRIMINATOR { ... }Related: Parsing Program Data - decode detail
Validator streams account/tx updates to your sink.
# Validator flag (operator setup)
agave-validator --geyser-plugin-config geyser.jsonHigh-throughput Rust/Go consumers subscribe to filtered streams.
# Consumer connects to provider Yellowstone endpoint
# Filter by owner program id and account memcmpProvider pushes events to your HTTPS endpoint.
# Helius webhook -> POST https://api.yourapp.com/heliusStack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 19, 2026