Métodos RPC Principales
Los métodos de lectura esenciales que usa todo cliente de Solana: información de cuenta, saldos, escaneos de programas y búsquedas por lotes.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
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();Cuándo usar esto:
- Para poblar la interfaz de usuario con saldos de billetera y tokens.
- Para obtener una única cuenta de configuración para tu programa.
- Para cargar por lotes cuentas de NFT/tokens para una vista de galería.
- Para escanear cuentas propiedad del programa (con filtros - ver página de GPA).
Ejemplo de Trabajo
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,
});Lo que esto demuestra:
getBalancedevuelve lamports para billeteras propiedad del sistema.getAccountInfodevuelve propietario, lamports, datos, indicador de ejecutable.getMultipleAccountsagrupa hasta los límites del proveedor en un solo viaje de ida y vuelta de RPC.
Análisis Profundo
Cómo Funciona
- Todos los métodos son POSTs JSON-RPC con opciones de
commitmentyencoding. - La codificación
base64es estándar para datos binarios de programas;jsonParsedfunciona para algunos programas SPL en nodos compatibles. getProgramAccountssin filtros escanea todo el espacio del programa - costoso en mainnet.- Un
valuenulo significa que la cuenta no existe con el compromiso elegido.
Resumen de Métodos
| Método | Devuelve | Costo |
|---|---|---|
getAccountInfo | Cuenta única | Bajo |
getBalance | Solo Lamports | Bajo |
getMultipleAccounts | Hasta N cuentas | Medio |
getProgramAccounts | Todas las cuentas coincidentes | Alto sin filtros |
Notas de TypeScript
// Prefiere el ayudante address() para claves base58
import { address, assertIsAddress } from "@solana/kit";
const mint = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
assertIsAddress(mint);Trampas
- GPA sin filtrar en mainnet - tiempos de espera y 429s. Solución: filtros
memcmp/dataSize(getProgramAccounts y Filtros). - Asumir que la cuenta existe -
value: nullbloquea analizadores ingenuos. Solución: verifica si es nulo antes de decodificar. jsonParseden todas partes - no todos los programas son compatibles. Solución: decodifica con tu IDL desdebase64.- Matrices de lotes enormes - los proveedores limitan la longitud de
getMultipleAccounts. Solución: divide en lotes de 100 o según la documentación del proveedor. - Compromiso obsoleto después de enviar - la interfaz de usuario muestra el saldo antiguo hasta la actualización de
confirmed. Solución: sondea o suscríbete después de las transacciones.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
DAS getAsset | Metadatos de NFT/comprimidos | Cuentas de programas personalizadas |
| Geyser/Yellowstone | Streaming a escala de indexador | Saldo simple de billetera |
solana account CLI | Depuración única | Lecturas de aplicaciones de producción |
| APIs mejoradas de Helius | Saldos de tokens analizados | Bloqueo del proveedor inaceptable |
Preguntas Frecuentes
¿Qué codificación debo usar?
base64 para datos genéricos de programas; jsonParsed cuando el proveedor documenta el soporte SPL para tu tipo de cuenta.
¿Cuántas cuentas en getMultipleAccounts?
Depende del proveedor - agrupa 50-100 claves públicas por llamada como valor predeterminado seguro.
¿getBalance incluye el alquiler?
Sí - lamports totales en la cuenta; las cuentas de tokens tienen saldos separados por mint.
¿Por qué es lento getProgramAccounts?
Escanea todas las cuentas propiedad del programa - siempre agrega filtros en mainnet.
¿Puedo usarlos en localnet?
Sí - apunta la URL de RPC a http://127.0.0.1:8899.
¿Cómo decodifico datos base64?
Usa clientes Anchor/codama o diseños Borsh que coincidan con las estructuras en cadena.
¿Qué compromiso para el saldo de la interfaz de usuario?
confirmed después de las transacciones del usuario; processed solo para contadores en vivo de bajo riesgo.
¿Está en caché getAccountInfo?
No hay garantía de caché en el lado del servidor - trátalo como una lectura en vivo; agrega tu propia caché TTL con cuidado.
¿Cómo difieren GPA y GMA?
getProgramAccounts escanea por programa propietario; getMultipleAccounts recupera claves públicas explícitas que ya conoces.
¿Los tipos de kit 7.0.0 incluyen enumeraciones de codificación?
Sí - pasa encoding: "base64" en objetos de parámetros con verificación completa de TypeScript.
Relacionado
- Conceptos Básicos de RPC - compromiso y transporte
- getProgramAccounts y Filtros - escaneos filtrados
- Paginación y Eficiencia - patrones de agrupación
- La API DAS - lecturas específicas de activos
Versiones de la pila: Esta página fue 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, y LiteSVM 0.6.x.