Resumen
La API JSON-RPC de Solana es la forma estándar para que las aplicaciones interactúen con la red: consultar cuentas, enviar transacciones y suscribirse a actualizaciones en tiempo real. Este artículo explica los métodos principales, cómo conectarse a un endpoint y los errores comunes que se deben evitar al desarrollar en Solana.
Respuesta rápida: ¿Qué es Solana JSON-RPC?
Solana JSON-RPC es una API HTTP y WebSocket que permite a tu aplicación leer y escribir datos en la blockchain de Solana. Sigue la especificación JSON-RPC 2.0, lo que significa que envías un objeto JSON con un method y params, y el nodo responde con un resultado JSON o un error.
La mayoría de los desarrolladores lo usan para tres cosas:
- Consultar el estado – saldos de cuentas, tenencias de tokens, detalles de transacciones y datos de bloques.
- Enviar transacciones – serializar y enviar instrucciones firmadas.
- Suscribirse a actualizaciones – notificaciones en tiempo real de cambios de cuentas, registros y actualizaciones de slots.
Si estás creando una wallet, un explorador, un bot de trading o cualquier dApp que necesite datos en vivo de Solana, JSON-RPC es la interfaz que usarás.
Guía de decisión: Endpoint público vs. Nodo dedicado
Antes de escribir tu primera solicitud, decide qué tipo de endpoint se adapta a tu carga de trabajo. La elección afecta la fiabilidad, los límites de velocidad y la cantidad de infraestructura que gestionas.
| Carga de trabajo | Endpoint público | Nodo dedicado |
|---|---|---|
| Prototipos, hackathon | ✅ Bueno | Excesivo |
| dApp de producción con tráfico moderado | ⚠️ Posible pero arriesgado | ✅ Recomendado |
| Trading de alta frecuencia, indexador | ❌ No adecuado | ✅ Requerido |
Llamadas intensivas a getProgramAccounts | ❌ A menudo limitado | ✅ Mejor aislamiento |
| Suscripciones WebSocket a escala | ⚠️ Conexiones limitadas | ✅ Conexiones dedicadas |
Los endpoints públicos son gratuitos y convenientes para pruebas. OnFinality ofrece un endpoint público de Solana en https://solana.api.onfinality.io/public y un WebSocket en wss://solana.api.onfinality.io/public-ws. Sin embargo, los endpoints públicos son compartidos, por lo que pueden limitar o bloquear el uso intensivo.
Los nodos dedicados te brindan un endpoint RPC privado con tus propios límites de velocidad y recursos. Son la opción correcta cuando necesitas rendimiento constante, datos de archivo o configuraciones personalizadas. OnFinality proporciona nodos dedicados de Solana que puedes configurar en minutos. Consulta Precios de RPC y Redes compatibles para más detalles.
Si no estás seguro, comienza con el endpoint público para desarrollo y luego muévete a un nodo dedicado antes del lanzamiento en mainnet.
Métodos JSON-RPC de Solana que realmente usarás
La RPC de Solana tiene docenas de métodos, pero probablemente usarás un pequeño subconjunto. Aquí están los más comunes agrupados por propósito.
Consultas de cuentas y estado
getBalance– devuelve el saldo de SOL de una clave pública.getAccountInfo– devuelve los datos de la cuenta, lamports, propietario y el indicador de ejecutable.getTokenAccountsByOwner– lista las cuentas de tokens propiedad de una wallet.getProgramAccounts– obtiene todas las cuentas propiedad de un programa (se usa mucho para indexación).
Datos de transacciones y bloques
getTransaction– recupera una transacción por firma, con JSON parseado opcional.getBlock– devuelve las transacciones y metadatos de un bloque.getLatestBlockhash– obtiene el blockhash actual, que necesitas para firmar transacciones.sendTransaction– envía una transacción firmada al clúster.
Información de red y clúster
getVersion– devuelve la versión del software del nodo.getSlot– obtiene el número de slot actual.getEpochInfo– devuelve detalles de época y slot.
Suscripciones WebSocket
accountSubscribe– notifica cuando cambian los datos de una cuenta.logsSubscribe– transmite registros de un programa o transacción.slotSubscribe– notifica sobre nuevos slots.
Conexión a un endpoint RPC de Solana
Puedes llamar a Solana JSON-RPC con cualquier cliente HTTP. Aquí tienes un ejemplo básico de curl que obtiene el último blockhash:
curl https://solana.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getLatestBlockhash",
"params": []
}'
Respuesta:
{
"jsonrpc": "2.0",
"result": {
"context": {
"slot": 123456789
},
"value": {
"blockhash": "5xYk...",
"lastValidBlockHeight": 123456789
}
},
"id": 1
}
Para JavaScript, puedes usar la biblioteca oficial @solana/web3.js, que envuelve las llamadas RPC. Aquí te mostramos cómo conectarte y obtener un saldo:
import { Connection, PublicKey } from '@solana/web3.js';
const connection = new Connection('https://solana.api.onfinality.io/public');
const publicKey = new PublicKey('YourPublicKeyHere');
const balance = await connection.getBalance(publicKey);
console.log('Balance in lamports:', balance);
Para suscripciones WebSocket, puedes usar los métodos de suscripción del objeto Connection:
const subscriptionId = connection.onAccountChange(publicKey, (accountInfo) => {
console.log('Account updated:', accountInfo);
});
Errores comunes de JSON-RPC y cómo solucionarlos
Los errores de RPC de Solana pueden ser crípticos. Aquí están los más frecuentes y su significado.
| Error | Causa | Solución |
|---|---|---|
-32002: Transaction simulation failed | La transacción fallaría si se ejecutara | Revisa los registros, simula con preflightCommitment |
-32003: Transaction precompile verification failure | Programa o instrucción inválidos | Verifica los IDs de programa y los datos de instrucción |
-32004: Transaction signature verification failure | La firma es inválida | Asegúrate de haber firmado con el par de claves correcto |
-32005: Blockhash not found | Blockhash expirado o inválido | Obtén un blockhash nuevo y reintenta |
-32007: Transaction expired | La transacción no se confirmó a tiempo | Aumenta maxRetries o usa un blockhash más reciente |
-32602: Invalid params | Los parámetros están mal formados | Verifica los tipos de parámetros esperados por el método |
Consejos de depuración
- Simula siempre primero: Usa
simulateTransactionantes de enviar para detectar errores sin gastar comisiones. - Verifica los niveles de compromiso: Usa
confirmedofinalizedpara operaciones críticas. - Usa el explorador: Pega la firma de la transacción en Solana Explorer para ver registros detallados.
- Habilita registros: Para errores de programa, suscríbete a los registros o usa
getTransactionconencoding: "jsonParsed".
Lista de verificación para producción de RPC de Solana
Cuando pases a producción, verifica estos puntos para evitar tiempos de inactividad.
- Usa un endpoint dedicado – los endpoints públicos no son fiables para producción.
- Configura conmutación por error – ten un endpoint de respaldo en caso de que el principal falle.
- Monitorea los límites de velocidad – rastrea tu uso y planifica picos.
- Maneja reconexiones WebSocket – implementa lógica de reconexión automática.
- Usa
getLatestBlockhashcon reintentos – el blockhash expira rápidamente. - Elige el compromiso correcto –
confirmedes un buen valor predeterminado para la mayoría de las aplicaciones. - ¿Datos de archivo? – si necesitas estado histórico, asegúrate de que tu proveedor admita nodos de archivo.
Conclusiones clave
- Solana JSON-RPC es la API estándar para leer y escribir datos en Solana.
- Los endpoints públicos son adecuados para desarrollo, pero las aplicaciones de producción deben usar nodos dedicados.
- Aprende los métodos principales:
getBalance,getAccountInfo,sendTransactionygetLatestBlockhash. - Usa suscripciones WebSocket para actualizaciones en tiempo real.
- Depura errores comunes simulando transacciones y verificando los niveles de compromiso.
Preguntas frecuentes
¿Cuál es la diferencia entre JSON-RPC y gRPC en Solana?
JSON-RPC es la API HTTP/WebSocket estándar, mientras que gRPC es un protocolo más nuevo y eficiente utilizado para transmitir datos. La mayoría de las aplicaciones usan JSON-RPC; gRPC es para indexadores de alto rendimiento.
¿Cómo obtengo un endpoint RPC de Solana?
Puedes usar un endpoint público como https://solana.api.onfinality.io/public o crear un nodo dedicado a través de un proveedor como OnFinality. Consulta la página de red de Solana para opciones.
¿Cuál es el mejor nivel de compromiso a usar?
Para la mayoría de los casos de uso, confirmed es un buen equilibrio entre velocidad y fiabilidad. Usa finalized solo cuando necesites certeza absoluta.
¿Puedo usar WebSocket con RPC de Solana?
Sí, Solana admite suscripciones WebSocket para actualizaciones en tiempo real. Usa el endpoint wss:// y métodos como accountSubscribe.
¿Cómo manejo los límites de velocidad en endpoints públicos?
Los endpoints públicos tienen límites. Para producción, usa un nodo dedicado o un proveedor que ofrezca límites más altos. La página de Precios de RPC de OnFinality tiene detalles.
¿Qué es un blockhash y por qué expira?
Un blockhash es un hash reciente que evita ataques de repetición. Expira después de unos pocos slots, por lo que debes obtener uno nuevo antes de cada transacción.
¿Cómo depuro una transacción fallida?
Usa simulateTransaction para ver errores sin enviar. También revisa los registros de la transacción a través del explorador o getTransaction con encoding: "jsonParsed".
¿Qué es getProgramAccounts y por qué es lento?
getProgramAccounts devuelve todas las cuentas propiedad de un programa. Puede ser lento y consumir muchos recursos, así que úsalo con moderación y considera alternativas de indexación.
¿Cómo elijo entre un nodo compartido y uno dedicado?
Los nodos compartidos son más baratos pero tienen límites de velocidad. Los nodos dedicados ofrecen mejor rendimiento y aislamiento. Evalúa tus necesidades de tráfico y fiabilidad.
¿Dónde puedo encontrar documentación de RPC de Solana?
La documentación oficial de Solana es un buen comienzo. Para detalles específicos del proveedor, consulta la página de red de Solana de OnFinality.