Logo
Nuevos usuarios de RPC: 35% de descuento el primer mesVer oferta
RPC Assistant

Problemas con el endpoint de Solana: cómo diagnosticar y corregir fallos de RPC

Resumen

Los problemas con el endpoint de Solana pueden detener dApps y bots de trading. Este artículo repasa los modos de fallo más comunes (timeouts, errores 429, caídas de WebSocket y retraso de slots) y muestra cómo diagnosticarlos con curl y monitoreo. También explica cuándo un endpoint público es el cuello de botella y cómo un nodo RPC dedicado puede estabilizar tu carga de trabajo.

Ruta de diagnóstico rápido

Cuando tu dApp o bot de Solana empieza a fallar, el primer paso es identificar si el problema está en tu lado, en el lado del proveedor del endpoint, o en la propia red. Un diagnóstico estructurado ahorra horas de conjeturas.

Empieza comprobando los síntomas más comunes:

  • Respuestas HTTP 429 o 403 – estás alcanzando los límites de tasa en un endpoint compartido.
  • Timeouts en getLatestBlockhash o sendTransaction – el endpoint está sobrecargado o tu carga útil de solicitud es demasiado grande.
  • Desconexiones de WebSocket – las suscripciones se están cayendo, a menudo debido a timeouts de inactividad o límites del proveedor.
  • Retraso de slots o getBlockHeight quedándose atrás – el nodo detrás del endpoint no está siguiendo el ritmo de la cadena.
  • Errores de Transaction simulation failed – a menudo es un problema del lado del cliente, pero a veces lo causa un blockhash desactualizado de un endpoint con retraso.

Si estás en un endpoint público y ves alguno de estos, la solución más rápida es cambiar a un nodo RPC dedicado o a un servicio compartido de nivel superior. Por ejemplo, OnFinality proporciona nodos dedicados de Solana que te dan rendimiento constante y recursos dedicados. También puedes comparar precios de RPC para ver qué se adapta a tu carga de trabajo.

Pero antes de cambiar, ejecuta las comprobaciones siguientes para confirmar la causa raíz. No querrás migrar la infraestructura solo para descubrir que el error está en tu propio código.

Modos de fallo comunes en endpoints de Solana

La interfaz RPC de Solana es JSON-RPC sobre HTTP y WebSocket. Los problemas de endpoint suelen caer en una de estas categorías:

1. Límite de tasa (HTTP 429)

Los endpoints públicos e incluso algunos servicios comerciales compartidos imponen límites de tasa para proteger su infraestructura. Cuando superas las solicitudes permitidas por segundo, obtienes una respuesta 429 Too Many Requests. Esta es la causa más común de los informes de "problema de endpoint" de desarrolladores que ejecutan bots de trading de alta frecuencia o trabajos de indexación.

2. Timeouts y reinicios de conexión

Los nodos de Solana pueden tardar en responder cuando están sincronizando o bajo carga pesada. Si tu cliente establece un timeout corto, puedes ver ETIMEDOUT o ECONNRESET. Esto es especialmente común con sendTransaction porque el nodo necesita procesar y reenviar la transacción.

3. Caídas de suscripciones WebSocket

Muchas dApps de Solana usan suscripciones WebSocket para actualizaciones de cuentas o registros de transacciones en tiempo real. Los proveedores a menudo desconectan conexiones inactivas o limitan el número de suscripciones activas. Si tu aplicación no maneja la lógica de reconexión, dejará de recibir actualizaciones silenciosamente.

4. Retraso de slots y datos obsoletos

La red de Solana produce bloques aproximadamente cada 400 ms. Si el nodo detrás de tu endpoint no sigue el ritmo, reportará un getSlot que está muy por detrás del slot actual. Esto puede hacer que tu aplicación lea estado obsoleto o falle al enviar transacciones porque el blockhash es demasiado antiguo.

5. Errores JSON-RPC por solicitudes mal formadas

A veces el problema no es el endpoint sino la propia solicitud. El RPC de Solana es estricto con los tipos de parámetros. Por ejemplo, getTokenAccountsByOwner requiere una estructura JSON específica. Una solicitud mal formada devuelve un error de parámetros inválidos -32602, que puede confundirse con un problema del endpoint.

Diagnosticar con curl y JSON-RPC

Puedes probar rápidamente la salud de un endpoint usando curl. Aquí tienes una comprobación básica que obtiene el slot actual y la altura de bloque:

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'

Una respuesta saludable se ve así:

{"jsonrpc":"2.0","result":123456789,"id":1}

Si obtienes un timeout o un error, prueba la misma solicitud contra un endpoint diferente para aislar el problema. También puedes comprobar la altura de bloque para ver si el nodo está retrasado:

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getBlockHeight"}'

Compara el resultado con el slot actual de un explorador de bloques como Solana Explorer. Si la diferencia es de más de unos pocos slots, el nodo está retrasado.

Depurar desconexiones de WebSocket

Los problemas de WebSocket son más difíciles de depurar porque ocurren de forma asíncrona. Usa un script simple de Node.js para probar la estabilidad de la suscripción:

const WebSocket = require('ws');

const ws = new WebSocket('wss://solana.api.onfinality.io/public-ws');

ws.on('open', () => {
  console.log('Connected');
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'slotSubscribe'
  }));
});

ws.on('message', (data) => {
  console.log('Message:', data.toString());
});

ws.on('close', (code, reason) => {
  console.log('Disconnected:', code, reason.toString());
});

ws.on('error', (err) => {
  console.error('Error:', err.message);
});

Si la conexión se cae después de unos minutos, podría ser un timeout de inactividad. Muchos proveedores cierran conexiones WebSocket que no tienen actividad durante 30–60 segundos. Si necesitas suscripciones de larga duración, considera un nodo dedicado donde controles la configuración de la conexión.

Cuándo pasar a un nodo dedicado de Solana

No toda carga de trabajo necesita un nodo dedicado, pero muchas sí. Aquí tienes una guía rápida para ayudarte a decidir:

Patrón de carga de trabajoEndpoint públicoRPC comercial compartidoNodo dedicado
dApp ligera con lecturas ocasionalesOKOKExcesivo
dApp de producción con tráfico constanteRiesgosoBuenoRecomendado
Bot de trading de alta frecuenciaNo adecuadoA menudo limitado por tasaMejor opción
Uso intensivo de getProgramAccounts o getSignaturesForAddressNo adecuadoPuede estar limitadoMejor opción
Suscripciones WebSocket de larga duraciónNo fiablePosible pero limitadoMejor opción
Trabajos de indexación o rellenoNo adecuadoNo adecuadoMejor opción

Si ves errores 429, timeouts o caídas de WebSocket de forma regular, es hora de pasar a un nodo dedicado. Los nodos dedicados de Solana de OnFinality te dan un endpoint RPC privado con recursos dedicados, para que no compitas con otros usuarios. También puedes empezar con un RPC comercial compartido y mejorar a medida que crezca tu tráfico.

Monitoreo de la salud de tu endpoint de Solana

El monitoreo proactivo evita que los problemas de endpoint se conviertan en interrupciones. Configura comprobaciones de salud que te alerten cuando algo salga mal. Aquí tienes un script de monitoreo simple que comprueba el endpoint cada minuto:

#!/bin/bash

ENDPOINT="https://solana.api.onfinality.io/public"

while true; do
  RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 5 \
    -X POST "$ENDPOINT" \
    -H "Content-Type: application/json" \
    -d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}')
  if [ "$RESPONSE" != "200" ]; then
    echo "Endpoint no saludable: HTTP $RESPONSE a las $(date)"
    # Enviar alerta (p. ej., Slack, PagerDuty)
  fi
  sleep 60
done

Rastrea estas métricas a lo largo del tiempo:

  • Tiempo de respuesta – latencia media y p95 para getSlot.
  • Tasa de error – porcentaje de respuestas no-2xx.
  • Uptime de WebSocket – con qué frecuencia se caen las conexiones.
  • Retraso de slots – diferencia entre el slot de tu nodo y el último slot de la red.

Si alguna de estas se degrada, tendrás datos para mostrar a tu proveedor o para justificar el cambio a un nodo dedicado.

Mejores prácticas de configuración de endpoints de Solana

Una vez que tengas un endpoint estable, configura tu cliente correctamente para evitar problemas comunes:

  • Establece un timeout razonable – las llamadas RPC de Solana pueden tardar más que las típicas de Ethereum. Usa un timeout de al menos 10 segundos para sendTransaction.
  • Reintenta con backoff exponencial – los errores transitorios ocurren. Implementa reintentos con jitter para evitar golpear el endpoint.
  • Maneja la reconexión de WebSocket – implementa siempre un mecanismo de reconexión con backoff.
  • Usa el nivel de compromiso correctoconfirmed o finalized para transacciones críticas, processed para retroalimentación más rápida pero menos certeza.
  • Solicitudes por lotes – si necesitas obtener múltiples cuentas, usa getMultipleAccounts en lugar de muchas llamadas getAccountInfo.

Aquí tienes un ejemplo de cómo establecer un timeout y lógica de reintento en JavaScript usando @solana/web3.js:

const { Connection } = require('@solana/web3.js');

const connection = new Connection('https://solana.api.onfinality.io/public', {
  commitment: 'confirmed',
  confirmTransactionInitialTimeout: 60000,
  httpHeaders: { 'Content-Type': 'application/json' }
});

async function getSlotWithRetry(retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      return await connection.getSlot();
    } catch (err) {
      if (i === retries - 1) throw err;
      await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, i)));
    }
  }
}

getSlotWithRetry().then(console.log).catch(console.error);

Conclusiones clave

  • Los problemas de endpoint de Solana suelen deberse a límites de tasa, timeouts, caídas de WebSocket o retraso del nodo.
  • Diagnostica con llamadas simples de curl y compara con un explorador de bloques para aislar el problema.
  • Los endpoints públicos son suficientes para uso ligero, pero las cargas de trabajo de producción a menudo necesitan un nodo dedicado.
  • Monitorea el tiempo de respuesta, la tasa de error, el uptime de WebSocket y el retraso de slots para detectar problemas a tiempo.
  • Configura tu cliente con timeouts, reintentos y lógica de reconexión adecuados para reducir fallos.
  • OnFinality ofrece endpoints RPC de Solana y nodos dedicados para manejar cargas de trabajo exigentes.

Preguntas frecuentes

¿Por qué mi endpoint RPC de Solana devuelve errores 429?

Los errores 429 significan que estás superando el límite de tasa del endpoint. Los endpoints públicos y los servicios comerciales compartidos imponen límites. Si alcanzas errores 429 de forma constante, necesitas un plan de nivel superior o un nodo dedicado.

¿Cómo soluciono las desconexiones de WebSocket en Solana?

Implementa la reconexión automática con backoff exponencial en tu cliente. Además, verifica si el proveedor tiene timeouts de inactividad o límites de suscripción. Un nodo dedicado te da más control sobre las conexiones WebSocket.

¿Qué es el retraso de slots y por qué importa?

El retraso de slots es la diferencia entre el slot actual en la red y el slot que tu nodo ha procesado. Si tu endpoint se retrasa, puedes leer datos obsoletos o fallar al enviar transacciones. Monitorea getBlockHeight contra el explorador.

¿Debería usar un endpoint RPC público o dedicado de Solana?

Para desarrollo y uso ligero, un endpoint público es suficiente. Para dApps de producción, bots de trading o indexación pesada, un nodo dedicado proporciona rendimiento constante y evita límites de tasa. Compara opciones en precios de RPC.

¿Cómo puedo probar si mi endpoint de Solana está saludable?

Usa curl para llamar a getHealth o getSlot. Un endpoint saludable devuelve una respuesta 200 con un resultado válido. Monitorea los tiempos de respuesta y las tasas de error a lo largo del tiempo para detectar tendencias.

Base de conocimiento RPC

Detalles RPC relacionados

Nunca te preocupes por la infraestructura nuevamente

OnFinality elimina la carga pesada de DevOps para que puedas construir de forma más inteligente y rápida.

Comenzar