Noções Básicas de Indexação
8 exemplos para começar com indexação Solana - 5 básicos e 3 intermediários.
Pré-requisitos
- Provedor RPC ou nó auto-hospedado para backfill
- Banco de dados (Postgres é comum) para estado indexado persistente
- Entendimento de Métodos RPC Principais
Exemplos Básicos
1. Por Que o RPC Sozinho Quebra em Escala
O histórico da carteira via getSignaturesForAddress pagina milhares de chamadas HTTP.
# Lento para whales - cada página é uma ida e volta RPC
solana confirm -v $(solana transaction-history <PUBKEY> 2>/dev/null | head -1) 2>/dev/null || true- RPC é request/response - sem camada de consulta durável para análises SQL.
- Limites de taxa impedem backfills históricos durante o lançamento do produto.
- Indexadores escrevem uma vez e consultam muitas vezes no seu banco de dados.
Relacionado: Paginação e Eficiência - limites RPC
2. Fluxo de Dados do Indexador
Ingerir, analisar, armazenar, servir.
Validator → Geyser/Yellowstone/Webhook → Parser → Postgres → API
- A ingestão são eventos append-only ordenados por slot.
- O parser mapeia instruções para linhas de domínio (swaps, votos, mints).
- A API serve consultas paginadas para aplicativos.
Relacionado: Construindo um Indexador - implementação
3. Backfill vs Stream ao Vivo
Recuperação histórica e depois acompanhar novos slots.
# Conceitual: reproduzir slots 250000000..latest de ledger arquivado ou RPC- Backfill usa
getBlock/getTransactionou arquivos do provedor. - Stream ao vivo usa Geyser ou WebSocket depois que o cursor alcança a ponta.
- Armazene o último slot processado para recuperação após falha.
4. Escritas Idempotentes
Use chaves naturais para que replays não dupliquem linhas.
INSERT INTO transfers (signature, idx, amount)
VALUES ($1, $2, $3)
ON CONFLICT (signature, idx) DO NOTHING;- Transações têm assinaturas únicas; o índice da instrução desambigua inner ix.
- Reorgs são raros em
confirmed, mas projete flags de rollback de slot para finanças críticas. - Replay a partir do slot N após queda deve ser seguro.
5. Analisar com IDL
Decodifique dados de instrução de forma determinística.
// Conceito: use cliente gerado ou match de discriminador anchor
// if data[..8] == DEPOSIT_DISCRIMINATOR { ... }- Discriminadores do IDL Anchor identificam variantes de instrução.
- Parsers gerados por Codama mantêm o schema sincronizado com releases do programa.
- Nunca baseie lógica de negócio apenas em parsing de strings de log.
Relacionado: Analisando Dados de Programa - detalhes de decodificação
Exemplos Intermediários
6. Hook de Plugin Geyser
O validator transmite atualizações de conta/tx para o seu sink.
# Flag do validator (configuração do operador)
agave-validator --geyser-plugin-config geyser.json- Plugins recebem o firehose na velocidade do validator.
- Você filtra cedo para os programas que importam e economiza CPU.
- Veja Plugins Geyser.
7. Consumidor Yellowstone gRPC
Consumidores Rust/Go de alto throughput assinam streams filtrados.
# Consumidor conecta ao endpoint Yellowstone do provedor
# Filtra por program id owner e memcmp de conta- Menor latência que polling RPC para indexadores.
- Requer provedor gerenciado ou stack auto-hospedada.
- Veja Yellowstone gRPC.
8. Ingestão por Webhook
O provedor envia eventos para o seu endpoint HTTPS.
# Webhook Helius -> POST https://api.yourapp.com/helius- Não exige servidor WebSocket de longa duração do seu lado.
- Verifique assinaturas nos payloads de webhook conforme docs do provedor.
- Veja Webhooks.
Versões da stack: Esta página foi escrita para 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 e LiteSVM 0.6.x.