Resumen
Solana RPC es la interfaz JSON-RPC que utiliza tu aplicación para leer cuentas, enviar transacciones y suscribirse a eventos en la cadena. Esta descripción general cubre la forma del endpoint, los métodos que llamarás con más frecuencia y la configuración que suele fallar primero cuando pasas de una demo a una aplicación en vivo. También explica cuándo un endpoint compartido es suficiente y cuándo un nodo dedicado de Solana es la mejor opción.
Solana RPC es la interfaz JSON-RPC que tu aplicación utiliza para comunicarse con un nodo de Solana. Cada saldo de billetera, cuenta de token, envío de transacción y suscripción a registros en una aplicación de Solana eventualmente se convierte en una llamada RPC. Esta descripción general explica cómo se ve el endpoint, qué métodos llamarás realmente y cómo decidir entre un endpoint compartido y un nodo dedicado antes de lanzar.
Si estás aquí porque buscaste la documentación de Solana RPC, la versión corta es: Solana expone una API JSON-RPC sobre HTTP para llamadas de solicitud/respuesta y sobre WebSocket para suscripciones. Apuntas tu cliente a una URL de endpoint, envías solicitudes JSON-RPC y recibes JSON de vuelta. Las decisiones interesantes son sobre qué endpoint usas, cómo manejas los niveles de compromiso y cómo mantienes la conexión saludable bajo carga.
Cuándo un endpoint compartido de Solana es suficiente (y cuándo no)
La mayoría de los equipos deberían comenzar con un endpoint compartido o público y pasar a infraestructura dedicada solo cuando aparezca una señal específica. Usa esto como un triaje rápido antes de dedicar tiempo a operaciones de nodos.
| Señal que ves | El endpoint compartido suele ser suficiente | Momento de considerar un nodo dedicado de Solana |
|---|---|---|
| Perfil de tráfico | Volumen de solicitudes bajo a moderado, principalmente lecturas | Volumen de solicitudes alto sostenido, ráfagas o muchas suscripciones WebSocket concurrentes |
| Tipo de carga de trabajo | Saldos de billeteras, transferencias simples, paneles | Indexadores, sistemas de trading, backends que llaman mucho a getProgramAccounts o getSignaturesForAddress |
| Sensibilidad a la latencia | Tolerante a la cola compartida | Rutas sensibles a la latencia donde deseas una ubicación predecible |
| Necesidades de datos | Solo estado reciente | Consultas históricas tipo archivo, escaneos grandes de registros o uso intensivo de getBlock |
| Control operativo | No quieres ejecutar nodos | Necesitas aislamiento, límites personalizados o un endpoint privado |
Si todavía estás en la primera columna, un endpoint compartido gestionado es el camino más rápido. OnFinality proporciona Solana RPC como una API gestionada, y puedes revisar detalles de la red Solana para el endpoint actual y el soporte de transporte. Si estás en la segunda o tercera columna, lee la sección de nodo dedicado a continuación antes de asumir que necesitas ejecutar hardware tú mismo.
La forma del endpoint: HTTP y WebSocket
Un endpoint de Solana RPC es una URL. Los endpoints HTTP manejan llamadas de solicitud/respuesta. Los endpoints WebSocket manejan suscripciones como accountSubscribe, logsSubscribe y slotSubscribe. El endpoint público de Solana de OnFinality sigue este patrón:
- HTTP:
https://solana.api.onfinality.io/public - WebSocket:
wss://solana.api.onfinality.io/public-ws
Para aplicaciones en producción, normalmente usarás una clave API o un endpoint dedicado en lugar de la URL pública. El endpoint público es útil para pruebas rápidas, prototipos y verificar que la forma de tu solicitud sea correcta antes de integrarla en una aplicación.
Una configuración mínima se ve así:
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{ commitment: "confirmed" }
);
const balance = await connection.getBalance(
new PublicKey("11111111111111111111111111111111")
);
console.log(balance);
La opción commitment es una de las fuentes más comunes de confusión, por lo que vale la pena establecerla deliberadamente en lugar de aceptar un valor predeterminado.
Niveles de compromiso y por qué cambian tus resultados
Solana no finaliza bloques instantáneamente. Una transacción pasa por los estados processed, confirmed y finalized. El nivel de compromiso que pasas a una llamada RPC le indica al nodo cuánta certeza deseas antes de devolver datos.
| Compromiso | Qué significa en la práctica | Uso típico |
|---|---|---|
processed | Más rápido, menos seguro; el nodo ha visto el bloque pero aún puede ser omitido | UI que necesita el estado más reciente posible y puede tolerar reversión |
confirmed | Una supermayoría de stake ha votado; poco probable que se revierta | La mayoría de las lecturas de aplicaciones y confirmaciones de transacciones |
finalized | Máxima certeza; el bloque está enraizado | Contabilidad, liquidación y cualquier cosa que no deba revertirse |
Un patrón práctico es leer con confirmed para saldos orientados al usuario y usar finalized cuando registras un valor que no debe cambiar. Mezclar niveles de compromiso en un solo flujo de trabajo es una fuente común de errores: una lectura de saldo en processed y una transacción confirmada en finalized pueden discrepar durante una ventana corta.
Métodos JSON-RPC principales de Solana que llamarás con más frecuencia
No necesitas memorizar la lista completa de métodos. La mayoría de las aplicaciones de Solana usan un subconjunto pequeño repetidamente, y el resto aparece solo para características específicas.
| Método | Qué devuelve | A tener en cuenta |
|---|---|---|
getBalance | Saldo en lamports de una cuenta | El nivel de compromiso cambia el valor cerca de un límite de slot |
getAccountInfo | Datos de la cuenta, propietario, lamports | Las cuentas grandes aumentan el tamaño de la respuesta |
getTokenAccountsByOwner | Cuentas de token SPL de una billetera | Puede ser pesado para billeteras con muchas cuentas de token |
getTransaction | Una sola transacción por firma | Devuelve null si el nodo no la ha visto o la ha podado |
getSignaturesForAddress | Firmas recientes de una dirección | La paginación importa; no solicites rangos ilimitados |
getLatestBlockhash | Un blockhash reciente para construir transacciones | Los blockhashes expiran; obtén uno cerca del momento de envío |
sendTransaction | Envía una transacción firmada | Maneja errores de preflight y reintentos explícitamente |
simulateTransaction | Simula una transacción | Útil antes de enviar cualquier cosa que mueva fondos |
getProgramAccounts | Cuentas propiedad de un programa | Costoso; filtra agresivamente o espera tiempos de espera |
Una llamada JSON-RPC directa se ve así:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getBalance",
"params": [
"11111111111111111111111111111111",
{"commitment": "confirmed"}
]
}'
Si estás depurando una biblioteca cliente, enviar la solicitud JSON-RPC sin procesar primero es una forma rápida de separar un problema de la biblioteca de un problema del endpoint.
Suscripciones WebSocket: qué cambia cuando dejas de hacer polling
Hacer polling de getSlot o getBalance en un bucle es simple pero derrochador. Las suscripciones WebSocket permiten que el nodo te envíe actualizaciones. La contrapartida es la gestión de conexiones: las suscripciones pueden caerse y necesitas lógica de reconexión.
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "logsSubscribe",
params: [
{ mentions: ["YourProgramPublicKeyHere"] },
{ commitment: "confirmed" }
]
}));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
// Handle notification payloads here
};
Dos notas operativas. Primero, las suscripciones tienen estado: si el socket se cierra, tu suscripción desaparece y debe restablecerse. Segundo, una suscripción que nunca se limpia seguirá consumiendo recursos, así que cancela la suscripción cuando un componente se desmonte o un trabajo termine.
Modos de fallo comunes y cómo leerlos
La mayoría de los problemas de Solana RPC caen en unos pocos patrones. Reconocer el síntoma ahorra tiempo.
| Síntoma | Causa probable | Lo primero que hay que revisar |
|---|---|---|
Respuestas 429 o limitación | La tasa de solicitudes excede la asignación del endpoint | Tamaño del lote, frecuencia de polling y si estás reintentando con demasiada agresividad |
getProgramAccounts agota el tiempo | La consulta es demasiado amplia para el endpoint | Agrega filtros, reduce el tamaño de los datos o pasa a un nodo dedicado |
La transacción devuelve Blockhash not found | El blockhash expiró antes del envío | Obtén un blockhash fresco inmediatamente antes de enviar |
| La simulación de la transacción falla | El estado de la cuenta cambió o la instrucción no es válida | Vuelve a ejecutar simulateTransaction e inspecciona los registros |
| WebSocket deja de entregar | El socket se cayó o la suscripción expiró | Agrega lógica de reconexión y resuscripción |
| Saldos inconsistentes | Los niveles de compromiso difieren entre llamadas | Estandariza el compromiso por flujo de trabajo |
Un hábito útil es registrar el código y mensaje de error JSON-RPC sin procesar, no solo un genérico "request failed". Los códigos de error de Solana son lo suficientemente específicos como para indicarte la solución.
Endpoint compartido vs nodo dedicado de Solana
Una vez que conoces tu carga de trabajo, la cuestión de construir versus comprar se vuelve concreta. Ejecutar tu propio nodo de Solana significa aprovisionar hardware, mantenerte al día con las versiones del cliente y gestionar el crecimiento del almacenamiento. Un nodo dedicado gestionado te da un endpoint aislado sin esa carga operativa. Un endpoint compartido gestionado te da una API RPC funcional sin ninguna de las dos.
| Enfoque | Tú gestionas | Adecuado para |
|---|---|---|
| Endpoint público | Nada, pero espera límites compartidos | Prototipos, pruebas, scripts de bajo volumen |
| RPC compartido gestionado (OnFinality) | Nada; obtienes un endpoint API | Aplicaciones en producción con tráfico moderado, principalmente de lectura |
| Nodo dedicado gestionado (OnFinality) | Decisiones de configuración, no hardware | Lecturas de alto volumen, suscripciones pesadas, necesidades de aislamiento |
| Nodo autoalojado | Hardware, actualizaciones, monitoreo, almacenamiento | Equipos con requisitos específicos de cumplimiento o control |
OnFinality ofrece Solana RPC como una API gestionada y nodos dedicados cuando necesitas aislamiento. Puedes comparar opciones en la página de precios de RPC y revisar redes RPC compatibles si también ejecutas en otras cadenas. Si aún estás decidiendo entre proveedores, la guía de selección de proveedor de RPC repasa los criterios de evaluación.
Una lista de verificación práctica para el despliegue
Antes de dirigir tráfico de producción a cualquier endpoint de Solana, confirma estos puntos:
- Los niveles de compromiso se establecen explícitamente por llamada, no se dejan en los valores predeterminados.
- Tienes una estrategia para
getProgramAccountsy otras lecturas pesadas, como filtros o un nodo dedicado. - El envío de transacciones obtiene un blockhash fresco y maneja errores de preflight.
- Los clientes WebSocket se reconectan y se vuelven a suscribir después de una caída.
- Registras los códigos de error JSON-RPC sin procesar para depuración.
- Conoces tu volumen de solicitudes esperado y lo has emparejado con un nivel de endpoint.
- Tienes un endpoint de respaldo o un plan de conmutación por error para rutas críticas.
Si no puedes responder al punto seis, comienza con un endpoint compartido y mide antes de comprometerte con infraestructura dedicada.
Puntos clave
- Solana RPC es una API JSON-RPC disponible sobre HTTP para llamadas y WebSocket para suscripciones.
- Los niveles de compromiso (
processed,confirmed,finalized) cambian directamente los datos que recibes; establécelos deliberadamente. - Un conjunto pequeño de métodos cubre la mayoría de las aplicaciones, pero las lecturas pesadas como
getProgramAccountsnecesitan filtros o capacidad dedicada. - Las suscripciones WebSocket reducen el polling pero requieren lógica de reconexión y limpieza.
- Elige un endpoint gestionado compartido para tráfico moderado y un nodo dedicado de Solana cuando necesites aislamiento o manejes lecturas pesadas.
- OnFinality proporciona Solana RPC como una API gestionada; consulta detalles de la red Solana para endpoints actuales y soporte de transporte.
Preguntas frecuentes
¿Cuál es el formato del endpoint de Solana RPC?
Un endpoint de Solana RPC es una URL que acepta solicitudes JSON-RPC sobre HTTP, con una URL WebSocket separada para suscripciones. Los endpoints públicos de Solana de OnFinality son https://solana.api.onfinality.io/public para HTTP y wss://solana.api.onfinality.io/public-ws para WebSocket. Las aplicaciones en producción normalmente usan una clave API o un endpoint dedicado en lugar de la URL pública.
¿Qué nivel de compromiso debo usar?
Usa confirmed para la mayoría de las lecturas orientadas al usuario y confirmaciones de transacciones, y finalized para valores que no deben revertirse, como asientos contables. Usa processed solo cuando necesites el estado más reciente posible y puedas tolerar la posibilidad de un bloque omitido.
¿Por qué getProgramAccounts agota el tiempo de espera?
Escanea cuentas propiedad de un programa, y sin filtros el conjunto de resultados puede ser muy grande. Agrega filtros como tamaño de datos o restricciones memcmp, solicita solo los campos que necesitas o mueve esta carga de trabajo a un nodo dedicado con más margen.
¿Necesito un nodo dedicado de Solana?
No siempre. Comienza con un endpoint gestionado compartido y mide tu volumen de solicitudes, recuento de suscripciones y frecuencia de lecturas pesadas. Pasa a un nodo dedicado cuando necesites aislamiento, capacidad predecible o estés alcanzando repetidamente los límites en infraestructura compartida.
¿Cómo manejo las desconexiones de WebSocket?
Trata las suscripciones como con estado y desechables. Agrega lógica de reconexión, vuelve a suscribirte al reconectar y cancela la suscripción cuando el consumidor se apague. Registra los motivos de desconexión para poder distinguir problemas de red de límites del lado del endpoint.
¿Puedo usar OnFinality para Solana y otras cadenas?
Sí. OnFinality proporciona acceso a la API RPC en múltiples redes. Consulta redes RPC compatibles para la lista actual y precios de RPC para detalles del plan. Si necesitas capacidad aislada, revisa nodos dedicados.