Resumen
Una API de explorador de Solana te permite consultar programáticamente datos en cadena como transacciones, cuentas y bloques, impulsando exploradores personalizados y paneles de análisis. Este artículo explica los métodos RPC principales, cómo elegir entre endpoints públicos y gestionados, y cómo construir un flujo de trabajo simple de consulta para exploradores.
Guía rápida de decisión: endpoint público vs RPC gestionado
Antes de escribir cualquier código, decide qué endpoint RPC de Solana vas a consultar. El endpoint público api.mainnet-beta.solana.com tiene límites de tasa y no tiene SLA, por lo que es adecuado para comprobaciones manuales ocasionales, pero no para funciones de explorador en producción. Si estás construyendo un panel, un indexador o cualquier herramienta que haga muchas solicitudes, necesitas un proveedor de RPC gestionado que ofrezca mayor rendimiento, soporte WebSocket y capacidad dedicada.
Para cargas de trabajo de producción, OnFinality proporciona un endpoint RPC gestionado de Solana en https://solana.api.onfinality.io/public con soporte WebSocket en wss://solana.api.onfinality.io/public-ws. También puedes aprovisionar un nodo dedicado para capacidad exclusiva. Consulta la página de precios de RPC para detalles de planes y la página de redes compatibles para la lista completa.
Si solo estás explorando la cadena manualmente, el Explorador de Solana es la forma más fácil de inspeccionar transacciones y cuentas sin escribir código. Pero si quieres construir tu propio explorador o integrar datos en cadena en tu aplicación, necesitas la API RPC.
¿Qué es una API de explorador de Solana?
Una API de explorador de Solana es un conjunto de métodos JSON-RPC que te permiten recuperar datos en cadena programáticamente. En lugar de hacer clic en un explorador web, puedes consultar los mismos datos (transacciones, cuentas, bloques, saldos de tokens) usando solicitudes HTTP o WebSocket. Esta es la base para exploradores personalizados, paneles de análisis, rastreadores de carteras y servicios backend.
La API RPC de Solana expone métodos para leer el estado de la red, enviar transacciones, simular ejecución y suscribirse a actualizaciones en vivo. Los métodos más comunes para funcionalidad tipo explorador son:
getBlock– recupera un bloque por número de slot, incluyendo transacciones y recompensas.getTransaction– obtiene una transacción por firma, con JSON analizado o crudo.getAccountInfo– obtiene los datos, lamports y propietario de una cuenta.getBalance– obtiene el saldo de SOL de una dirección.getTokenAccountsByOwner– lista las cuentas de token propiedad de una dirección.getSignaturesForAddress– obtiene las firmas de transacciones recientes para una dirección.getLatestBlockhash– obtiene el blockhash actual para la construcción de transacciones.
Estos métodos se corresponden directamente con lo que ves en un explorador de bloques. Por ejemplo, cuando abres una transacción en Solscan, el explorador está llamando a getTransaction entre bastidores.
Métodos RPC clave para construir un explorador
Veamos los métodos más útiles con ejemplos concretos. Puedes probarlos con curl o cualquier cliente HTTP.
Obtener información de cuenta
Para obtener los datos de una cuenta (por ejemplo, una cartera o un programa), usa getAccountInfo. La respuesta incluye el saldo de lamports de la cuenta, el programa propietario y los datos crudos.
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getAccountInfo",
"params": [
"GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
{"encoding": "jsonParsed"}
]
}'
Obtener transacciones recientes para una dirección
Para listar las firmas de transacciones recientes de una dirección, usa getSignaturesForAddress. Esto es lo que usan las páginas de historial de transacciones de los exploradores.
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignaturesForAddress",
"params": [
"GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
{"limit": 5}
]
}'
Obtener detalles de transacción
Una vez que tengas una firma, obtén los detalles completos de la transacción con getTransaction. Usa "encoding": "jsonParsed" para obtener datos de instrucciones legibles.
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getTransaction",
"params": [
"5Uu3mQyUH...",
{"encoding": "jsonParsed"}
]
}'
Obtener saldos de tokens
Para tenencias de tokens, usa getTokenAccountsByOwner. Esto devuelve todas las cuentas de token propiedad de una dirección, incluyendo el mint y el saldo.
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getTokenAccountsByOwner",
"params": [
"GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
{"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},
{"encoding": "jsonParsed"}
]
}'
Usando WebSocket para actualizaciones en vivo
Si quieres actualizaciones en tiempo real (por ejemplo, para monitorear nuevas transacciones o cambios de cuentas), usa el endpoint WebSocket. El método accountSubscribe de Solana te permite escuchar cambios en una cuenta.
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "accountSubscribe",
params: [
"GgPpTKg78vmzgvPpNsKKBf5WJyNTfXCyhLNQ4TfFhNiT",
{"encoding": "base64", "commitment": "finalized"}
]
}));
};
ws.onmessage = (event) => {
console.log(JSON.parse(event.data));
};
Las conexiones WebSocket son ideales para paneles en vivo, pero requieren un proveedor que soporte conexiones persistentes. Los endpoints públicos a menudo limitan el uso de WebSocket, por lo que se recomienda un proveedor gestionado para producción.
Comparando fuentes de datos de explorador
Al construir un explorador, tienes varias opciones para obtener datos en cadena. La tabla siguiente compara los principales enfoques.
| Fuente de datos | Mejor para | Limitaciones |
|---|---|---|
| Endpoint RPC público | Comprobaciones manuales, prototipos | Limitado en tasa, sin SLA, sin garantía de WebSocket |
| Proveedor de RPC gestionado | Aplicaciones de producción, tráfico moderado | Requiere clave API o suscripción |
| Nodo dedicado | Alto rendimiento, necesidades personalizadas | Mayor costo, sobrecarga operativa |
| Interfaz de explorador web | Navegación humana | No programable |
Para la mayoría de las funciones de explorador en producción, un proveedor de RPC gestionado ofrece el mejor equilibrio entre fiabilidad y costo. Si necesitas control total sobre la configuración del nodo o tienes volúmenes de consulta muy altos, un nodo dedicado puede valer la pena.
Errores comunes y cómo evitarlos
Integrar una API de explorador puede encontrar algunos problemas comunes. Esto es lo que debes tener en cuenta:
Límites de tasa
Los endpoints públicos limitan las solicitudes de forma agresiva. Si envías demasiadas solicitudes, recibirás errores 429 Too Many Requests. Usa un proveedor gestionado con límites más altos e implementa retroceso (backoff) en tu cliente.
Niveles de compromiso (commitment)
Las transacciones de Solana se procesan en etapas: processed, confirmed y finalized. Si consultas una transacción antes de que esté finalizada, podrías obtener null o datos incompletos. Siempre especifica un nivel de compromiso en tus solicitudes y, para visualizaciones de explorador, usa finalized para evitar mostrar datos no confirmados.
Respuestas grandes
getTransaction con jsonParsed puede devolver cargas útiles grandes, especialmente para transacciones complejas. Considera usar codificación base64 para datos crudos y analizarlos en el cliente para reducir el ancho de banda.
Reconexión WebSocket
Las conexiones WebSocket pueden caerse. Implementa lógica de reconexión con retroceso exponencial para mantener una transmisión en vivo fiable.
Lista de verificación para producción
Antes de lanzar un explorador o herramienta de análisis, revisa esta lista:
- Usa un proveedor de RPC gestionado con un endpoint dedicado para producción.
- Establece niveles de compromiso apropiados (
confirmedofinalized) en todas las consultas. - Implementa límites de tasa y lógica de reintento en tu cliente.
- Usa suscripciones WebSocket para actualizaciones en tiempo real, con manejo de reconexión.
- Almacena en caché los datos de acceso frecuente (por ejemplo, información de cuentas, datos de bloques) para reducir la carga RPC.
- Monitorea tu uso de RPC y configura alertas para errores o latencia.
Conclusiones clave
- Una API de explorador de Solana es la interfaz programática a los datos en cadena, usando métodos JSON-RPC como
getTransactionygetAccountInfo. - Los endpoints públicos son adecuados para pruebas, pero no para producción; usa un proveedor de RPC gestionado como OnFinality para acceso fiable.
- Las suscripciones WebSocket permiten actualizaciones en tiempo real, pero requieren un proveedor que soporte conexiones persistentes.
- Siempre especifica niveles de compromiso y maneja los límites de tasa para construir un explorador robusto.
Preguntas frecuentes
¿Cuál es la diferencia entre un explorador de bloques y una API de explorador?
Un explorador de bloques es una aplicación web que muestra datos en cadena en un formato legible para humanos. Una API de explorador es la interfaz RPC subyacente que te permite consultar los mismos datos programáticamente. Puedes construir tu propia interfaz de explorador sobre la API.
¿Puedo usar el endpoint RPC público de Solana para producción?
El endpoint público tiene límites de tasa y no tiene SLA, por lo que no se recomienda para producción. Usa un proveedor de RPC gestionado o un nodo dedicado para acceso fiable.
¿Cómo obtengo el historial de transacciones de una dirección?
Usa el método getSignaturesForAddress para obtener firmas de transacciones recientes y luego getTransaction para obtener detalles de cada firma. Ten en cuenta que este método solo devuelve historial reciente (hasta ~10 minutos o unos pocos miles de transacciones), por lo que para historial completo necesitas un indexador o un nodo de archivo.
¿Qué es un nivel de compromiso en RPC de Solana?
El nivel de compromiso determina cuán confirmada debe estar una transacción o estado de cuenta antes de que el RPC lo devuelva. processed significa que la transacción fue recibida, confirmed significa que fue incluida en un bloque, y finalized significa que el bloque está confirmado por el clúster. Para visualizaciones de explorador, usa finalized para evitar mostrar datos no confirmados.
¿OnFinality soporta WebSocket para Solana?
Sí, OnFinality proporciona un endpoint WebSocket para Solana en wss://solana.api.onfinality.io/public-ws. Consulta la página de red de Solana para más detalles.