Resumen
La API de nodo de Solana es una interfaz JSON-RPC que permite a las aplicaciones leer el estado de la red, enviar transacciones y suscribirse a actualizaciones en vivo. Esta guía cubre endpoints de clúster, formatos de solicitud, niveles de compromiso y modos de fallo comunes para que puedas conectarte de manera confiable a mainnet o devnet de Solana.
Guía rápida de decisión: ¿qué endpoint de Solana deberías usar?
Antes de escribir cualquier código, decide qué clúster de Solana y modelo de acceso se adaptan a tu carga de trabajo. La respuesta depende de si estás construyendo una aplicación de producción, ejecutando un pipeline de QA o simplemente prototipando localmente.
| Carga de trabajo | Endpoint recomendado | Por qué |
|---|---|---|
| Desarrollo local | http://localhost:8899 (solana-test-validator) | Iteración rápida, límites de tasa claros, control total |
| Prototipado en devnet | Endpoint público de devnet o RPC de devnet gestionado | SOL gratis del faucet, la infraestructura compartida es suficiente para bajo tráfico |
| Aplicación de producción en mainnet | Proveedor de RPC gestionado o nodo dedicado | Los endpoints públicos tienen límites de tasa y no son confiables para producción |
| Alto rendimiento o métodos pesados (getProgramAccounts) | Nodo dedicado o proveedor gestionado con capacidad dedicada | Evita errores 429 y proporciona rendimiento consistente |
Si estás comenzando, usa un proveedor de RPC gestionado como la API de Solana de OnFinality para obtener un endpoint estable sin operar tu propio nodo. Para producción, evalúa opciones de nodos dedicados para evitar límites de tasa compartidos.
¿Qué es la API de nodo de Solana?
La API de nodo de Solana es una interfaz JSON-RPC 2.0 que envuelve los internals del validador. Te permite leer el estado de cuentas, enviar transacciones, simular ejecución y suscribirte a actualizaciones en vivo a través de WebSocket. La mayoría de las solicitudes son POST HTTP con un cuerpo JSON, y las respuestas son objetos JSON.
A diferencia de otras cadenas, la API de Solana no es compatible con Ethereum. Usas métodos como getAccountInfo, getBalance, sendTransaction y getLatestBlockhash en lugar de eth_getBalance o eth_sendRawTransaction. Esto significa que tus herramientas y SDKs deben ser conscientes de Solana.
Clústeres de Solana y endpoints públicos
Solana tiene tres clústeres públicos: mainnet, devnet y testnet. Cada uno tiene un endpoint público, pero estos son infraestructura compartida y no están destinados al tráfico de producción. Los documentos oficiales advierten que los endpoints públicos pueden devolver 429 (límite de tasa) o 403 (bloqueado) cuando se usan en exceso.
| Clúster | Endpoint público | Caso de uso |
|---|---|---|
| Mainnet | https://api.mainnet.solana.com | Red de producción con SOL real |
| Devnet | https://api.devnet.solana.com | Pruebas de desarrollador, SOL gratis del faucet |
| Testnet | https://api.testnet.solana.com | Pruebas de validador |
Para producción, debes usar un proveedor de RPC gestionado o ejecutar tu propio nodo. OnFinality proporciona un endpoint público de Solana en https://solana.api.onfinality.io/public y un endpoint WebSocket en wss://solana.api.onfinality.io/public-ws. Estos son adecuados para desarrollo y uso ligero en producción, pero para cargas de trabajo pesadas considera un nodo dedicado.
Haciendo tu primera llamada RPC de Solana
El RPC de Solana usa JSON-RPC 2.0. Aquí tienes un ejemplo básico de curl para obtener el slot actual:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
La respuesta se ve así:
{"jsonrpc":"2.0","result":123456789,"id":1}
La mayoría de los métodos requieren parámetros. Por ejemplo, para obtener el saldo de una cuenta:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX"]}'
Reemplaza la dirección con una clave pública real de Solana.
Entendiendo los niveles de compromiso
Los métodos RPC de Solana aceptan un parámetro commitment que controla cuán finalizado debe estar un bloque antes de que el nodo devuelva datos. Esto es crítico para la consistencia en tu aplicación.
| Compromiso | Descripción | Caso de uso |
|---|---|---|
processed | El bloque procesado más reciente del nodo. Puede revertirse. | Monitoreo en tiempo real, pero no seguro para transacciones financieras |
confirmed | Un bloque votado por una supermayoría de stake. | La mayoría de las aplicaciones usan esto como equilibrio entre velocidad y seguridad |
finalized | El bloque está finalizado con bloqueo máximo. | Transacciones de alto valor donde la reversibilidad es inaceptable |
Por ejemplo, para obtener un saldo con compromiso confirmed:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX",{"commitment":"confirmed"}]}'
Usando suscripciones WebSocket
Para actualizaciones en vivo, Solana ofrece suscripciones WebSocket. Puedes suscribirte a cambios de cuentas, actualizaciones de programas, cambios de slot y más. Aquí tienes un ejemplo usando wscat:
wscat -c wss://solana.api.onfinality.io/public-ws
Luego envía una solicitud de suscripción:
{"jsonrpc":"2.0","id":1,"method":"accountSubscribe","params":["GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX",{"commitment":"confirmed"}]}
Recibirás un ID de suscripción y luego notificaciones a medida que la cuenta cambie.
Métodos RPC de Solana comunes que usarás
Aquí están los métodos HTTP más utilizados:
| Categoría | Métodos |
|---|---|
| Cuentas | getAccountInfo, getBalance, getMultipleAccounts |
| Transacciones | sendTransaction, simulateTransaction, getTransaction, getSignatureStatuses |
| Bloques | getBlock, getBlocks, getBlockHeight |
| Programa | getProgramAccounts |
| Clúster | getSlot, getEpochInfo, getHealth, getVersion |
| Tokens | getTokenAccountBalance, getTokenSupply |
Para una lista completa, consulta la referencia de Métodos HTTP RPC de Solana.
Depurando errores comunes de RPC de Solana
Cuando tus llamadas fallan, el mensaje de error generalmente te dice qué corregir. Aquí hay problemas comunes:
| Error | Causa probable | Solución |
|---|---|---|
429 Too Many Requests | Excediste el límite de tasa en un endpoint compartido | Usa un proveedor gestionado con límites más altos o un nodo dedicado |
403 Forbidden | El endpoint bloqueó tu IP o patrón de tráfico | Verifica tu volumen de solicitudes y considera un endpoint privado |
-32602 Invalid params | Parámetros faltantes o mal formados | Verifica la firma del método y el orden de los parámetros |
-32005 Node is unhealthy | El nodo está atrasado o sincronizando | Espera y reintenta, o cambia a un endpoint saludable |
Transaction simulation failed | La transacción fallaría en la cadena | Usa simulateTransaction para depurar antes de enviar |
Para fallos de transacción, siempre simula primero:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"simulateTransaction","params":["base58-encoded-tx"]}'
Construyendo con JavaScript: usando @solana/web3.js
La forma más común de interactuar con Solana es la librería @solana/web3.js. Aquí tienes un ejemplo mínimo:
import { Connection, PublicKey } from '@solana/web3.js';
const connection = new Connection('https://solana.api.onfinality.io/public', 'confirmed');
const address = new PublicKey('GgPpTKg78vmzgvPmNsDnN7hKs4q5WzJfPmZ3gY7hKJpX');
const balance = await connection.getBalance(address);
console.log('Balance:', balance / 1e9, 'SOL');
Para suscripciones WebSocket en JS, usa connection.onAccountChange:
connection.onAccountChange(address, (accountInfo) => {
console.log('Account changed:', accountInfo);
});
Cuándo usar un nodo dedicado de Solana
Si tu aplicación depende de métodos pesados como getProgramAccounts (que pueden ser costosos) o necesita baja latencia consistente, un endpoint público compartido puede no ser suficiente. Los nodos dedicados te dan:
- Límites de tasa claros de otros usuarios
- Rendimiento consistente para consultas pesadas
- Control total sobre la configuración del nodo
- Acceso a datos de archivo si es necesario
OnFinality ofrece nodos dedicados de Solana que puedes desplegar en minutos. También puedes comparar proveedores de RPC de Solana para entender las compensaciones.
Conclusiones clave
- La API de nodo de Solana es JSON-RPC 2.0 sobre HTTP y WebSocket, con métodos específicos de Solana.
- Los endpoints públicos son adecuados para desarrollo pero no para tráfico de producción.
- Los niveles de compromiso (
processed,confirmed,finalized) controlan la consistencia de los datos. - Usa
simulateTransactionpara depurar fallos de transacción antes de enviar. - Para producción, considera un proveedor de RPC gestionado o un nodo dedicado para evitar límites de tasa y asegurar confiabilidad.
Preguntas frecuentes
¿Cuál es la diferencia entre RPC de Solana y API de nodo de Solana?
Se refieren a lo mismo: la interfaz JSON-RPC que te permite interactuar con un nodo de Solana. Los términos se usan indistintamente.
¿Puedo usar métodos RPC de Ethereum en Solana?
No. Solana usa su propio conjunto de métodos. Necesitas SDKs y herramientas específicos de Solana.
¿Cómo obtengo SOL gratis para devnet?
Usa el faucet de Solana en https://faucet.solana.com para solicitar SOL de devnet.
¿Cuál es la mejor manera de evitar errores 429?
Usa un proveedor de RPC gestionado con límites de tasa más altos o un nodo dedicado. Los endpoints públicos son compartidos y fácilmente limitados.
¿OnFinality soporta WebSocket de Solana?
Sí, OnFinality proporciona un endpoint WebSocket en wss://solana.api.onfinality.io/public-ws para suscripciones.
Para más detalles sobre redes compatibles y precios, consulta redes RPC compatibles y precios de RPC.