RPC y Suscripciones
RPC JSON HTTP tipado y suscripciones WebSocket con @solana/kit 7.0.0.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
import { createSolanaRpc, createSolanaRpcSubscriptions, address } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const balance = await rpc.getBalance(address("PUBKEY")).send();
const ws = createSolanaRpcSubscriptions(process.env.RPC_WSS_URL!);Cuándo usar esto:
- Cualquier lectura on-chain desde TypeScript (saldos, cuentas, bloques).
- Actualizaciones de UI en vivo a través de suscripciones de cuentas o firmas.
- Lecturas del lado del servidor en manejadores de rutas de Next.js.
- Reemplazo de llamadas
fetchsin tipar a JSON-RPC.
Ejemplo Funcional
import { createSolanaRpc, createSolanaRpcSubscriptions, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const rpcSubscriptions = createSolanaRpcSubscriptions("wss://api.devnet.solana.com");
async function watchBalance(owner: string) {
const acct = address(owner);
const { value } = await rpc.getBalance(acct).send();
console.log("initial", value);
const abort = new AbortController();
const stream = await rpcSubscriptions
.accountNotifications(acct, { commitment: "confirmed" })
.subscribe({ abortSignal: abort.signal });
for await (const n of stream) {
console.log("update", n.value.lamports);
}
}Lo que esto demuestra:
- RPC HTTP para lecturas puntuales con
.send(). - URL WSS coincidente para notificaciones push.
AbortControllerpara limpieza.
Análisis Profundo
Cómo Funciona
createSolanaRpcenvuelve JSON-RPC 2.0 con métodos y respuestas tipados.createSolanaRpcSubscriptionsabre un WebSocket y expone notificaciones como iterables asíncronos.- El
commitmenten las llamadas controla la latencia frente a la finalidad. - Las URLs del proveedor a menudo incrustan claves API como parámetros de consulta.
Métodos RPC Comunes
| Método | Uso |
|---|---|
getBalance | Saldo de SOL |
getAccountInfo | Datos brutos de la cuenta |
getLatestBlockhash | Vida útil de la transacción |
simulateTransaction | Errores de pre-vuelo |
sendTransaction | Enviar tx firmada |
Notas de TypeScript
// Pasar commitment en lecturas que potencian la UI de tesorería
await rpc.getBalance(owner, { commitment: "finalized" }).send();Trampas
- URL HTTP en cliente WebSocket - la conexión falla silenciosamente o lanza un error. Solución: usar
wss://de la documentación del proveedor. - Límites de tasa de RPC públicos - 429s bajo carga. Solución: endpoint dedicado de devnet/mainnet.
- Fugas de suscripción - pestañas dejadas abiertas agotan los límites del proveedor. Solución: abortar al desmontar.
- Asumir DAS en cada RPC -
getAssetnecesita hosts habilitados para DAS. Solución: matriz de capacidades por proveedor. - Omitir
.send()- los constructores RPC son perezosos hasta que se envían. Solución: encadenar siempre.send().
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Yellowstone gRPC | Ingesta a escala de indexador | UI de billetera simple |
| Webhooks de Helius | Push de eventos del lado del servidor | Cliente de navegador puro |
| Sondeo HTTP | Actualizaciones raras | UI de saldo sub-segundo |
| Conexión web3.js | Mantenimiento heredado | Aplicaciones Greenfield |
Preguntas Frecuentes
¿Funciona esto en devnet?
Sí - apunta RPC y billetera al mismo cluster.
¿Puedo mezclar kit y web3.js?
Evitar en un mismo módulo - migrar completamente por ruta.
¿Qué pasa con los adaptadores de billetera?
Las billeteras proporcionan firmantes; kit construye mensajes.
¿Cómo fijo @solana/kit?
Bloquear 7.0.0 en package.json y CI.
¿Dónde están las tarifas de prioridad?
Instrucciones de presupuesto de cómputo antes de enviar.
¿Cómo probar?
Surfpool 0.12.0 o validador local con clones de devnet.
¿Lamports o SOL?
Siempre lamports bigint en el código de kit.
¿Qué commitment?
confirmed para UI; finalized para tesorería.
Componentes de servidor Next.js?
Lecturas en el servidor; firma en componentes cliente.
¿Depurar transacciones fallidas?
Simular, leer logs, verificar propietarios de cuentas.
Relacionado
- Fundamentos de RPC - commitment y clusters
- Fundamentos de @solana/kit - introducción a kit
- Firma y Envío - ruta de envío
Versiones de Stack: 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.