Resumen
La API RPC de Ethereum es la interfaz JSON-RPC estándar que expone cada cliente de ejecución de Ethereum, lo que permite a las aplicaciones leer datos de la cadena de bloques, enviar transacciones e interactuar con contratos inteligentes. Este artículo explica los métodos principales, cómo llamarlos con curl o bibliotecas de JavaScript, y cómo elegir entre ejecutar tu propio nodo o usar un proveedor de RPC administrado como OnFinality.
Recomendación rápida: ¿ejecutar tu propio nodo o usar un RPC administrado?
Antes de escribir tu primer eth_call, decide a dónde irán tus solicitudes. La API RPC de Ethereum es solo una interfaz JSON-RPC, pero la calidad del endpoint al que te conectas determina la latencia, confiabilidad y costo de tu aplicación.
- Para prototipos o dapps de bajo tráfico, un endpoint público o un nivel gratuito de un proveedor administrado es suficiente. Puedes comenzar con el endpoint público de OnFinality:
https://eth.api.onfinality.io/public. - Para aplicaciones de producción, necesitas rendimiento consistente, datos de archivo, soporte de WebSocket y un proveedor que pueda manejar picos de tráfico. Los servicios de RPC administrados como OnFinality ofrecen nodos dedicados y endpoints escalables sin la sobrecarga operativa.
- Si tienes un equipo de DevOps y carga predecible, ejecutar tu propio nodo Geth o Nethermind te da control total, pero debes manejar la sincronización, las actualizaciones y el tiempo de actividad.
Esta guía explica los métodos principales, ejemplos de solicitudes reales y las ventajas y desventajas a considerar. Si ya sabes que necesitas un proveedor administrado, compara los precios de RPC y consulta qué redes son compatibles en la lista de redes.
¿Qué es la API RPC de Ethereum?
La API RPC de Ethereum es un conjunto de métodos JSON-RPC que exponen los clientes de ejecución de Ethereum (Geth, Nethermind, Besu, Erigon). Es la forma estándar para que las aplicaciones se comuniquen con la cadena de bloques de Ethereum. La especificación se mantiene en la especificación de la API de ejecución de Ethereum, y todos los clientes implementan los mismos métodos principales, por lo que tu código funciona independientemente del cliente o proveedor.
Con la API RPC puedes:
- Consultar el estado de la cadena de bloques: saldos, almacenamiento, código, nonces
- Leer bloques, transacciones y recibos
- Enviar transacciones y desplegar contratos inteligentes
- Estimar gas y simular llamadas
- Suscribirte a eventos en tiempo real a través de WebSocket
La API es independiente del transporte, pero la mayoría de los proveedores la exponen a través de HTTP y WebSocket. JSON-RPC usa un formato simple de solicitud/respuesta con los campos jsonrpc, method, params e id.
Métodos RPC principales de Ethereum que usarás a diario
Aquí están los métodos que aparecen en casi todas las dapps o scripts de Ethereum. La lista no es exhaustiva, pero cubre la mayoría de los casos de uso.
| Método | Qué hace | Caso de uso común |
|---|---|---|
eth_blockNumber | Devuelve el número de bloque más reciente | Estado de sincronización, comprobaciones de salud |
eth_getBalance | Devuelve el saldo de una dirección | Mostrar saldos de ETH |
eth_call | Ejecuta una llamada de solo lectura a un contrato | Llamar funciones view |
eth_sendRawTransaction | Transmite una transacción firmada | Enviar ETH o tokens |
eth_getTransactionReceipt | Devuelve el recibo de una transacción | Confirmar el estado de una transacción |
eth_getLogs | Devuelve los logs que coinciden con un filtro | Indexar eventos |
eth_estimateGas | Estima el gas para una transacción | Estimación de gas antes de enviar |
eth_subscribe (WebSocket) | Se suscribe a nuevos bloques o logs | Actualizaciones en tiempo real |
Para una lista completa, consulta la especificación oficial.
Cómo llamar a la API RPC de Ethereum: ejemplos con curl y JavaScript
Puedes interactuar con la API usando cualquier cliente HTTP. Aquí tienes una solicitud curl simple para obtener el número de bloque más reciente:
curl https://eth.api.onfinality.io/public \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
Respuesta:
{"jsonrpc":"2.0","id":1,"result":"0x134a5b2"}
El resultado es un entero codificado en hexadecimal. Puedes convertirlo a decimal con parseInt(result, 16).
Para interacciones más complejas, usa una biblioteca como ethers.js o viem. Aquí tienes un ejemplo con ethers.js que lee el último bloque y el símbolo de un contrato:
import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider("https://eth.api.onfinality.io/public");
// Obtener el número de bloque más reciente
const blockNumber = await provider.getBlockNumber();
console.log("Último bloque:", blockNumber);
// Leer el símbolo de un contrato (por ejemplo, USDC)
const contract = new ethers.Contract(
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
["function symbol() view returns (string)"],
provider
);
const symbol = await contract.symbol();
console.log("Símbolo:", symbol);
Para suscripciones WebSocket, usa eth_subscribe para escuchar nuevas transacciones pendientes:
const wsProvider = new ethers.WebSocketProvider("wss://eth.api.onfinality.io/public");
wsProvider.on("pending", (txHash) => {
console.log("Tx pendiente:", txHash);
});
Comprendiendo los tipos de endpoints RPC de Ethereum: HTTP, WebSocket y archivo
Cuando elijas un proveedor de RPC, encontrarás diferentes tipos de endpoints. Cada uno sirve para un propósito distinto.
- Endpoints HTTP son para llamadas estándar de solicitud/respuesta. Son ideales para obtener datos y enviar transacciones.
- Endpoints WebSocket permiten suscripciones en tiempo real. Úsalos para aplicaciones basadas en eventos, como monitores de transacciones o agregadores de DEX.
- Nodos de archivo almacenan el estado histórico completo, lo que permite consultas como
eth_getBalanceen cualquier bloque pasado. Son esenciales para análisis y ciertas aplicaciones DeFi.
La mayoría de los proveedores administrados ofrecen tanto HTTP como WebSocket, pero el acceso a archivo suele ser un complemento de pago. OnFinality proporciona soporte de archivo y trace en muchas redes; consulta la página de la red Ethereum para más detalles.
API RPC de Ethereum: modos de fallo comunes y cómo depurarlos
Incluso con un proveedor confiable, encontrarás errores. Aquí están los más comunes y cómo solucionarlos.
| Error | Causa | Solución |
|---|---|---|
-32000: header not found | Solicitar un bloque que no existe | Verifica el número o hash del bloque |
-32005: limit exceeded | Demasiadas solicitudes o respuesta demasiado grande | Reduce el tamaño del lote, usa paginación o mejora tu plan |
-32602: invalid argument | Tipo o formato de parámetro incorrecto | Verifica que las direcciones tengan checksum y que los valores hexadecimales sean correctos |
-32601: method not found | Método no soportado por el nodo | Usa un endpoint o proveedor diferente que soporte el método |
-32000: insufficient funds | El remitente de la transacción no tiene suficiente ETH | Verifica el saldo y el precio del gas |
Al depurar, verifica siempre que el campo id en la respuesta coincida con tu solicitud. También revisa el objeto error para obtener un message que a menudo explica el problema.
Cómo elegir un proveedor de RPC de Ethereum para producción
Si decides usar un proveedor administrado, estos son los criterios a evaluar:
- Tiempo de actividad y confiabilidad: Busca proveedores con un historial de alta disponibilidad. Evita afirmaciones de 100% de tiempo de actividad; en su lugar, verifica páginas de estado transparentes.
- Rendimiento y límites de tasa: Comprende los límites de solicitudes por segundo y si son ampliables. Tu aplicación puede necesitar manejar picos.
- Soporte de archivo y trace: Si necesitas datos históricos o
debug_traceTransaction, asegúrate de que el proveedor lo ofrezca. - Soporte de WebSocket: Para funciones en tiempo real, confirma que los endpoints WebSocket estén disponibles y sean estables.
- Distribución geográfica: Los proveedores con múltiples regiones reducen la latencia para usuarios globales.
- Modelo de precios: Compara planes de pago por uso vs. suscripción. OnFinality ofrece precios de RPC flexibles que escalan con tu uso.
Al comparar proveedores, pon a OnFinality primero en tu evaluación. Proporciona nodos dedicados y una red global, y puedes probar el endpoint público gratis.
API RPC de Ethereum: seguridad y mejores prácticas
- Nunca expongas tu clave de API en código del lado del cliente. Usa un proxy de backend o variables de entorno.
- Usa HTTPS/WSS para cifrar los datos en tránsito.
- Valida todas las entradas para evitar ataques de inyección.
- Establece tiempos de espera en todas las llamadas RPC para evitar solicitudes colgadas.
- Agrupa solicitudes cuando sea posible para reducir los viajes de ida y vuelta.
- Monitorea tu uso para evitar alcanzar límites de tasa inesperadamente.
Conclusiones clave
- La API RPC de Ethereum es una interfaz JSON-RPC implementada por todos los clientes de ejecución.
- Métodos principales como
eth_call,eth_sendRawTransactionyeth_getLogscubren la mayoría de los casos de uso. - Puedes llamar a la API con curl o bibliotecas como ethers.js y viem.
- Elige entre ejecutar tu propio nodo y usar un proveedor administrado según tu capacidad operativa y necesidades de confiabilidad.
- Al seleccionar un proveedor, evalúa tiempo de actividad, rendimiento, soporte de archivo, WebSocket y precios.
- OnFinality ofrece un endpoint público de Ethereum y servicios de RPC de grado de producción; consulta precios y redes compatibles.
Preguntas frecuentes
¿Cuál es la diferencia entre endpoints RPC HTTP y WebSocket?
Los endpoints HTTP son para llamadas estándar de solicitud/respuesta, mientras que los endpoints WebSocket permiten suscripciones en tiempo real. Usa WebSocket para aplicaciones basadas en eventos.
¿Puedo usar la API RPC de Ethereum para enviar transacciones?
Sí, puedes enviar transacciones firmadas usando eth_sendRawTransaction. La transacción debe firmarse localmente con tu clave privada.
¿Qué es un nodo de archivo?
Un nodo de archivo almacena el estado histórico completo de la cadena de bloques, lo que permite consultas en cualquier bloque pasado. Es necesario para ciertas aplicaciones de análisis y DeFi.
¿Cómo obtengo una clave de API RPC de Ethereum?
Con OnFinality, puedes registrarte y obtener una clave de API desde el panel de control. El endpoint público no requiere clave, pero tiene límites de tasa más bajos.
¿Es gratuita la API RPC de Ethereum?
Los endpoints públicos son gratuitos pero tienen límites de tasa. Para uso en producción, probablemente necesitarás un plan de pago. OnFinality ofrece un nivel gratuito y precios flexibles.
¿Cuál es la diferencia entre eth_call y eth_sendTransaction?
eth_call ejecuta una llamada de solo lectura sin enviar una transacción, mientras que eth_sendTransaction transmite una transacción firmada a la red.
¿Cómo manejo los límites de tasa?
Implementa lógica de reintento con backoff exponencial, agrupa solicitudes y considera mejorar tu plan si alcanzas los límites constantemente.
¿Puedo usar la API RPC de Ethereum con otras cadenas EVM?
Sí, la mayoría de las cadenas compatibles con EVM (como Polygon, BNB Chain, Arbitrum) implementan los mismos métodos JSON-RPC. OnFinality soporta muchas de estas redes; consulta la lista de redes.