Resumen
Un RPC URL de Solana es el endpoint HTTP o WebSocket al que tu aplicación envía llamadas JSON-RPC para leer cuentas, enviar transacciones y suscribirse a eventos on-chain. OnFinality expone un endpoint público de Solana en https://solana.api.onfinality.io/public y un WebSocket correspondiente en wss://solana.api.onfinality.io/public-ws, que puedes usar directamente en wallets, SDKs y scripts para pruebas.
Los endpoints públicos son cómodos para desarrollo, pero las aplicaciones en producción normalmente necesitan capacidad dedicada, throughput predecible y failover. Este artículo cubre dónde va el RPC URL de Solana en las herramientas comunes, cómo verificar que funciona y cuándo pasar de un endpoint público compartido a infraestructura dedicada de nodos Solana.
Un RPC URL de Solana es la dirección que usa tu aplicación para comunicarse con un nodo de Solana mediante JSON-RPC. En lugar de ejecutar un validador o un nodo RPC tú mismo, apuntas tu wallet, backend o script a un endpoint y dejas que gestione getAccountInfo, sendTransaction, getLatestBlockhash y el resto de la superficie JSON-RPC de Solana. Esta página responde a la pregunta inmediata — qué URL uso — y luego te ayuda a decidir si un endpoint público compartido es suficiente o si tu carga de trabajo necesita capacidad dedicada.
Qué RPC URL de Solana usar ahora mismo
La respuesta más rápida: OnFinality publica un endpoint público de Solana mainnet que puedes usar de inmediato.
| Configuración | Valor |
|---|---|
| Red | Solana Mainnet |
| HTTP RPC URL | https://solana.api.onfinality.io/public |
| WebSocket RPC URL | wss://solana.api.onfinality.io/public-ws |
| Moneda nativa | SOL (9 decimales) |
| Explorador de bloques | https://explorer.solana.com |
| Chain ID | No aplica — Solana no usa chain IDs numéricos estilo EVM |
Esa última fila importa. Si vienes de herramientas de Ethereum, puede que esperes un chain ID numérico para la configuración de red de la wallet. Solana identifica su clúster por nombre (mainnet-beta, devnet, testnet) y por genesis hash, no por un chain ID. Por lo tanto, la configuración de wallets y SDKs toma un RPC URL más un nombre de clúster, no un entero de chain ID.
Si estás construyendo o probando en lugar de lanzar a producción, usa el endpoint de RPC de Solana Devnet para no gastar SOL real. Para ver la lista completa de cadenas que OnFinality sirve, consulta redes RPC compatibles.
Conecta el endpoint en tu stack
Prueba rápida con curl
Antes de conectar nada a una app, confirma que el endpoint responde. Solana usa JSON-RPC sobre HTTP POST, así que una sola llamada curl es suficiente:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getHealth"
}'
Un nodo saludable devuelve {"jsonrpc":"2.0","result":"ok","id":1}. Si obtienes un timeout o un estado distinto de 200, el endpoint no es accesible desde tu red — revisa reglas de egreso, proxies o prueba otra región.
JavaScript con @solana/web3.js
La mayoría de las apps de Solana usan @solana/web3.js. El objeto de conexión toma el HTTP URL y, opcionalmente, un WebSocket URL para suscripciones:
import { Connection, PublicKey, clusterApiUrl } from "@solana/web3.js";
const connection = new Connection(
"https://solana.api.onfinality.io/public",
{
wsEndpoint: "wss://solana.api.onfinality.io/public-ws",
commitment: "confirmed",
}
);
const balance = await connection.getBalance(
new PublicKey("11111111111111111111111111111111")
);
console.log("lamports:", balance);
Cambia la cadena de URL por tu endpoint de devnet al probar. El resto del código es idéntico, que es una razón por la que los desarrolladores de Solana mantienen una única fábrica de conexión y cambian endpoints mediante variables de entorno.
Configuración de red en wallets
Wallets como Phantom y Solflare permiten a los usuarios añadir un endpoint RPC personalizado en los ajustes. Proporciona el HTTP URL y, donde la wallet lo admita, el WebSocket URL. Los usuarios que alcanzan límites de tasa en un endpoint público predeterminado pueden pegar tu URL dedicada en su lugar. Si publicas una dApp, exponer un endpoint configurable es una pequeña función que compensa cuando un endpoint compartido está congestionado.
Endpoint público vs nodos Solana dedicados
El endpoint público está bien para desarrollo, demos y scripts de bajo volumen. No está diseñado para tasas de solicitud altas sostenidas, escaneos pesados de getProgramAccounts o trading sensible a la latencia. Así difieren las dos opciones en la práctica:
| Señal de carga de trabajo | Endpoint público | Nodo Solana dedicado |
|---|---|---|
| Prototipado, scripts puntuales | Buena opción | Excesivo |
| Wallet o dApp con tráfico constante de usuarios | Puede alcanzar límites compartidos | Capacidad predecible |
sendTransaction de alta frecuencia | Riesgo de contención | Throughput aislado |
Escaneos grandes de getProgramAccounts / getSignaturesForAddress | A menudo limitados | Mejor adaptado |
| Suscripciones WebSocket a escala | Compartidas | Conexiones dedicadas |
| Necesidades de cumplimiento o residencia de datos | Infraestructura compartida | Configurable |
Si tu app ha superado la etapa de prototipo y ves 429 intermitentes, getProgramAccounts lento o suscripciones WebSocket caídas, esa es la señal para migrar. OnFinality ofrece tanto acceso gestionado a la API RPC como nodos dedicados donde obtienes capacidad aislada. El precio escala con el plan que elijas — consulta precios de RPC para ver los niveles actuales en lugar de adivinarlos a partir de un artículo de blog.
Métodos JSON-RPC de Solana que realmente llamarás
La superficie JSON-RPC de Solana es amplia. En producción, unos pocos métodos dominan:
getLatestBlockhash— requerido antes de construir cualquier transacción; los blockhashes expiran, así que obtén nuevos.sendTransaction— envía una transacción firmada. Devuelve una firma, no una confirmación.getSignatureStatuses— consulta esto para confirmar que una transacción se registró.getAccountInfo— lee los datos y lamports de una sola cuenta.getProgramAccounts— escanea todas las cuentas propiedad de un programa. Potente y costoso; usa filtros.getTokenAccountsByOwner— lista las cuentas de tokens SPL de una wallet.getSlotygetBlockHeight— comprobaciones de liveness baratas.accountSubscribe/logsSubscribe(WebSocket) — actualizaciones push en lugar de polling.
Un error común es tratar sendTransaction como síncrono. No lo es. Envías y luego confirmas mediante getSignatureStatuses o una suscripción WebSocket. Construir correctamente ese bucle de confirmación es la diferencia entre una app fiable y una que muestra saldos obsoletos.
Depurar un RPC URL de Solana que no funciona
Cuando las llamadas fallan, el error suele apuntar a una de unas pocas causas. Relaciona el síntoma con la solución probable:
| Síntoma | Causa probable | Qué probar |
|---|---|---|
Connection refused o timeout | URL incorrecta, egreso bloqueado o proxy | Vuelve a ejecutar la prueba curl desde el mismo host |
| HTTP 429 | Límite de tasa del endpoint compartido | Retrocede, agrupa llamadas o pasa a capacidad dedicada |
Blockhash not found | Blockhash obsoleto | Obtén un getLatestBlockhash nuevo justo antes de firmar |
| La transacción nunca confirma | Descartada o con precio insuficiente | Revisa getSignatureStatuses, reenvía con un blockhash nuevo |
| WebSocket se desconecta | Timeout por inactividad o fallo de red | Implementa reconexión con backoff; vuelve a suscribirte |
getProgramAccounts da timeout | Escaneo sin filtros | Añade filtros dataSize y memcmp |
| Funciona localmente, falla en CI | Variable de entorno no definida | Registra el endpoint resuelto al arrancar |
Dos hábitos previenen la mayoría de estos problemas. Primero, registra el endpoint que tu app resolvió realmente — un número sorprendente de informes de "el RPC está caído" resultan ser una variable de entorno obsoleta. Segundo, envuelve las llamadas RPC en lógica de reintento con backoff exponencial y trata los 429 y 5xx de forma distinta a los errores de cliente 4xx.
Lista de verificación para producción
Antes de apuntar usuarios reales a un RPC URL de Solana, confirma lo siguiente:
- El endpoint es configurable, no está hardcodeado. Léelo desde una variable de entorno para poder cambiar de proveedor sin volver a desplegar.
- Tienes un fallback. Un segundo endpoint — incluso de otro proveedor — te mantiene online si el primario se degrada. Consulta cómo elegir un proveedor de RPC para criterios de evaluación.
- La lógica de confirmación es correcta. No asumas que el éxito de
sendTransactionsignifica finalidad. Consulta o suscríbete. - La reconexión de WebSocket está gestionada. Las suscripciones se caen; tu cliente debe restablecerlas.
- Monitorizas las tasas de error. Sigue los 429, timeouts y latencia de confirmación como métricas de primer nivel.
- Conoces tu tasa de solicitudes máxima. Compárala con la capacidad de tu plan antes del lanzamiento, no después.
Si falta alguno de estos puntos, soluciónalos antes de escalar el tráfico. Es más barato abordarlos ahora que durante un incidente.
Cuándo pasar a infraestructura Solana dedicada
Los endpoints públicos compartidos son un punto de partida, no un destino. Pasa a infraestructura dedicada cuando:
- Tu volumen de solicitudes es constante y lo bastante alto como para que los límites compartidos se conviertan en el cuello de botella.
- Dependes de
getProgramAccountso consultas tipo archivo que son costosas en nodos compartidos. - Necesitas latencia predecible para trading, liquidaciones o dashboards en tiempo real.
- Quieres capacidad WebSocket aislada para muchos suscriptores concurrentes.
- Necesitas un canal de soporte y un SLA en lugar de acceso público best-effort.
OnFinality proporciona Solana RPC como API gestionada y como infraestructura de nodos dedicados, para que puedas empezar en el endpoint público y escalar sin cambiar el código de tu aplicación — solo la URL. Explora la página de la red Solana para detalles del endpoint, o revisa precios de RPC cuando estés listo para dimensionar un plan.
Puntos clave
- El RPC URL público de Solana mainnet de OnFinality es
https://solana.api.onfinality.io/public, con WebSocket enwss://solana.api.onfinality.io/public-ws. - Solana no usa chain IDs numéricos estilo EVM; configura por nombre de clúster y RPC URL.
- Haz siempre una prueba rápida del endpoint con una llamada curl a
getHealthantes de conectarlo a una app. sendTransactiones asíncrono — confirma mediantegetSignatureStatuseso una suscripción WebSocket.- Los endpoints públicos sirven para desarrollo; los nodos dedicados sirven para cargas sostenidas, sensibles a la latencia o con muchos escaneos.
- Mantén el endpoint en una variable de entorno y configura un fallback para poder cambiar sin volver a desplegar.
Preguntas frecuentes
¿Existe un chain ID para Solana?
No. Solana no usa chain IDs numéricos estilo EVM. Las herramientas identifican el clúster por nombre (mainnet-beta, devnet, testnet) y por genesis hash. Cuando una wallet pide un chain ID, normalmente es un campo orientado a EVM que no aplica.
¿Puedo usar el mismo RPC URL para devnet y mainnet? No. Mainnet y devnet son clústeres separados con endpoints separados. Usa el endpoint de RPC de Solana Devnet para pruebas y el URL de mainnet para producción, y mantenlos en variables de entorno separadas.
¿Por qué mi transacción dice "blockhash not found"?
El blockhash con el que firmaste ha expirado. Los blockhashes de Solana son de corta vida. Obtén un getLatestBlockhash nuevo inmediatamente antes de firmar y reenviar.
¿Necesito un WebSocket URL?
Solo si usas suscripciones como accountSubscribe o logsSubscribe. Si haces polling con llamadas HTTP, el HTTP URL por sí solo es suficiente. Para apps en tiempo real, los WebSockets reducen la carga de polling.
¿Cuándo debería dejar de usar un endpoint público?
Cuando veas 429 recurrentes, timeouts en getProgramAccounts, suscripciones caídas, o cuando necesites latencia predecible y soporte. En ese momento, pasa a capacidad dedicada — consulta precios de RPC y nodos dedicados.
¿Puedo cambiar de proveedor sin cambiar mi código? Normalmente sí, si mantienes el endpoint en configuración en lugar de hardcodeado. JSON-RPC de Solana está estandarizado, así que la mayoría de las llamadas a métodos funcionan entre proveedores. Prueba el comportamiento de WebSocket y cualquier extensión específica del proveedor antes de cambiar en producción.