Core RPC Methods
Os métodos de leitura essenciais que todo cliente Solana usa: informações de conta, saldos, scans de programa e buscas em lote.
Receita
Cartão de receita para referência rápida - pronto para copiar e colar.
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
await rpc.getAccountInfo(pubkey, { encoding: "base64" }).send();
await rpc.getBalance(pubkey).send();
await rpc.getMultipleAccounts([pk1, pk2]).send();
await rpc.getProgramAccounts(programId, { encoding: "base64" }).send();Quando usar:
- Hidratar UI com saldos de carteira e token.
- Buscar uma conta de config única do seu programa.
- Carregar em lote contas NFT/token para galeria.
- Escanear contas owned por programa (com filtros - veja página GPA).
Exemplo Prático
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const SYSTEM_PROGRAM = address("11111111111111111111111111111111");
const wallet = address("YOUR_WALLET_PUBKEY");
const [balance, accountInfo, multi] = await Promise.all([
rpc.getBalance(wallet, { commitment: "confirmed" }).send(),
rpc.getAccountInfo(SYSTEM_PROGRAM, { encoding: "base64" }).send(),
rpc.getMultipleAccounts([wallet, SYSTEM_PROGRAM], {
commitment: "confirmed",
encoding: "base64",
}).send(),
]);
console.log({
lamports: balance.value,
systemExecutable: accountInfo.value?.executable,
multiCount: multi.value?.length,
});O que isso demonstra:
getBalanceretorna lamports para carteiras system-owned.getAccountInforetorna owner, lamports, dados, flag executable.getMultipleAccountsagrupa até limites do provedor em um round trip RPC.
Aprofundamento
Como funciona
- Todos os métodos são POSTs JSON-RPC com opções
commitmenteencoding. - Encoding
base64é padrão para dados binários de programa;jsonParsedfunciona para alguns programas SPL em nós que suportam. getProgramAccountssem filtros escaneia todo o espaço do programa - caro na mainnet.valuenull significa que a conta não existe no commitment escolhido.
Resumo de métodos
| Método | Retorna | Custo |
|---|---|---|
getAccountInfo | Conta única | Baixo |
getBalance | Só lamports | Baixo |
getMultipleAccounts | Até N contas | Médio |
getProgramAccounts | Todas contas correspondentes | Alto sem filtros |
Notas TypeScript
// Prefer address() helper for base58 pubkeys
import { address, assertIsAddress } from "@solana/kit";
const mint = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
assertIsAddress(mint);Erros comuns
- GPA sem filtro na mainnet - timeouts e 429s. Correção: filtros memcmp/dataSize ou indexer (getProgramAccounts & Filters).
- Assumir que conta existe -
value: nullquebra parsers ingênuos. Correção: verifique null antes de decodificar. - jsonParsed em todo lugar - nem todos os programas suportados. Correção: decodifique com seu IDL a partir de
base64. - Arrays de lote enormes - provedores limitam comprimento de
getMultipleAccounts. Correção: divida em lotes de 100 ou conforme docs do provedor. - Commitment obsoleto após envio - UI mostra saldo antigo até refresh
confirmed. Correção: polling ou assinatura após transações.
Alternativas
| Alternativa | Use quando | Não use quando |
|---|---|---|
DAS getAsset | Metadados NFT/comprimidos | Contas de programa customizadas |
| Geyser/Yellowstone | Streaming em escala de indexer | Saldo simples de carteira |
solana account CLI | Depuração pontual | Leituras de app em produção |
| APIs enhanced Helius | Saldos de token parseados | Lock-in de provedor inaceitável |
FAQs
Qual encoding devo usar?
base64 para dados genéricos de programa; jsonParsed quando o provedor documenta suporte SPL para seu tipo de conta.
Quantas contas em getMultipleAccounts?
Depende do provedor - divida 50-100 pubkeys por chamada como padrão seguro.
getBalance inclui rent?
Sim - lamports totais na conta; contas de token mantêm saldos separados por mint.
Por que getProgramAccounts é lento?
Escaneia todas as contas owned pelo programa - sempre adicione filtros na mainnet.
Posso usar isso em localnet?
Sim - aponte URL RPC para http://127.0.0.1:8899.
Como decodificar dados base64?
Use clientes Anchor/codama ou layouts Borsh correspondentes às structs on-chain.
Qual commitment para saldo na UI?
confirmed após transações do usuário; processed apenas para contadores ao vivo de baixo risco.
getAccountInfo é cacheado?
Sem garantias de cache server-side - trate como leitura ao vivo; adicione cache TTL próprio com cuidado.
Como GPA e GMA diferem?
getProgramAccounts escaneia por programa owner; getMultipleAccounts busca pubkeys explícitas que você já conhece.
Tipos kit 7.0.0 incluem enums de encoding?
Sim - passe encoding: "base64" em objetos params com checagem TypeScript completa.
Relacionados
- RPC Basics - commitment e transporte
- getProgramAccounts & Filters - scans filtrados
- Pagination & Efficiency - padrões de lote
- The DAS API - leituras específicas de ativos
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.