Logo
Nuevos usuarios de RPC: 35% de descuento el primer mesVer oferta
OnFinality Learn
Guías de redes y protocolos12 min de lectura

Conexiones WebSocket RPC de Base: Endpoints, Flashblocks y Fiabilidad

Aprende a conectarte a la red principal de Base y a Sepolia mediante WebSocket RPC, utiliza Flashblocks para eventos de bloque en menos de un segundo y construye suscripciones fiables con ethers.js y viem.

TL;DR

Esta guía explica cómo utilizar los endpoints WebSocket RPC de Base para datos en tiempo real, incluyendo la superficie de suscripción de OP-stack y Flashblocks. Proporciona ejemplos ejecutables con ethers.js y viem, discute estrategias de reconexión y ofrece una lista de verificación de fiabilidad.

Respuesta directa: Endpoints WebSocket RPC de Base y Flashblocks

Las conexiones WebSocket RPC de Base te permiten suscribirte a eventos de blockchain en tiempo real, como nuevos bloques, transacciones pendientes y logs. Los endpoints WSS principales son wss://base-rpc.publicnode.com para la red principal de Base y wss://base-sepolia-rpc.publicnode.com para Base Sepolia, aunque también puedes utilizar proveedores dedicados como la página de red de Base de OnFinality para endpoints gestionados. Una característica clave son los Flashblocks, que transmiten eventos de bloque en intervalos de menos de un segundo, permitiendo una mayor capacidad de respuesta de las dApps. Esta guía cubre los mecanismos, proporciona ejemplos de código ejecutables y describe las mejores prácticas para la fiabilidad.

Los Flashblocks son una característica documentada de la implementación OP-Stack de Base, pero su cadencia exacta (por ejemplo, 200ms o 250ms) debe verificarse contra la documentación de referencia RPC de Base o la documentación de tu proveedor, ya que puede variar según la red y la configuración.

  • WSS de red principal: wss://base-rpc.publicnode.com
  • WSS de Sepolia: wss://base-sepolia-rpc.publicnode.com
  • Los Flashblocks proporcionan una transmisión de eventos de bloque más rápida que los bloques tradicionales de 2 segundos.

Entendiendo la arquitectura WebSocket RPC de Base

Base es un rollup de OP-Stack, lo que significa que hereda la interfaz JSON-RPC de Ethereum, incluyendo las suscripciones WebSocket. Los métodos de suscripción estándar son eth_subscribe y eth_unsubscribe, que te permiten escuchar eventos de newHeads, logs, newPendingTransactions y syncing. Cuando te conectas vía WSS, estableces un canal persistente y bidireccional que envía actualizaciones a medida que ocurren, a diferencia de HTTP que requiere sondeo.

Los Flashblocks son una extensión personalizada que emite cabeceras de bloque con más frecuencia que el tiempo de bloque canónico. En lugar de esperar un bloque completo (típicamente 2 segundos en Base), los Flashblocks transmiten cabeceras de bloque tan pronto como se producen, a menudo en intervalos de menos de un segundo. Esto se logra mediante el secuenciador publicando raíces de estado intermedias. Para usar Flashblocks, es posible que necesites especificar un tipo de suscripción personalizado o usar un proveedor que los soporte, como los listados en el Asistente RPC de OnFinality.

  • Suscripciones estándar: newHeads, logs, newPendingTransactions, syncing.
  • Los Flashblocks son una característica específica de Base; no todos los proveedores los soportan.
  • Las conexiones WebSocket son stateful; debes manejar las reconexiones.

Conectándose al WebSocket RPC de Base con ethers.js

ethers.js proporciona una clase WebSocketProvider que simplifica la conexión a endpoints WSS. A continuación se muestra un ejemplo completo que se suscribe a newHeads en la red principal de Base y registra los números de bloque. Asegúrate de tener ethers instalado (npm install ethers).

El ejemplo utiliza el endpoint público, pero para producción, considera usar un proveedor gestionado como el servicio API de OnFinality para mayor fiabilidad y límites de tasa.

// npm install ethers
const { WebSocketProvider } = require("ethers");

const wsUrl = "wss://base-rpc.publicnode.com";
const provider = new WebSocketProvider(wsUrl);

async function subscribe() {
  provider.on("block", (blockNumber) => {
    console.log("Nuevo bloque:", blockNumber);
  });
}

subscribe().catch(console.error);

// Para cancelar la suscripción después de 10 segundos:
setTimeout(() => {
  provider.off("block");
  provider.destroy();
  console.log("Suscripción cancelada y cerrada.");
}, 10000);

Conectándose al WebSocket RPC de Base con viem

viem es una biblioteca moderna de TypeScript que ofrece soporte WebSocket de primera clase. Usa createPublicClient con un transporte webSocket. El siguiente ejemplo se suscribe a nuevas cabeceras de bloque y las registra. Instala viem con npm install viem.

El watchBlockNumber de viem es un envoltorio de alto nivel que maneja la reconexión automáticamente, pero también puedes usar watchBlocks para más control.

// npm install viem
import { createPublicClient, webSocket } from 'viem';
import { base } from 'viem/chains';

const client = createPublicClient({
  chain: base,
  transport: webSocket('wss://base-rpc.publicnode.com')
});

const unwatch = client.watchBlockNumber({
  onBlockNumber: (blockNumber) => {
    console.log('Nuevo bloque:', blockNumber);
  },
});

// Para dejar de observar después de 10 segundos:
setTimeout(() => unwatch(), 10000);

Usando Flashblocks para eventos de bloque en menos de un segundo

Los Flashblocks te permiten recibir eventos de bloque más rápido que el tiempo de bloque estándar de 2 segundos. Para usarlos, necesitas un proveedor que soporte el tipo de suscripción flashblocks. Por ejemplo, algunos proveedores exponen un método personalizado como eth_subscribe con el parámetro flashblocks o un endpoint dedicado. Consulta la documentación de tu proveedor; la referencia RPC de Base de OnFinality puede listar los métodos soportados.

La cadencia exacta de los Flashblocks no está estandarizada; es un comportamiento documentado que debes verificar con tu proveedor. Por ejemplo, los documentos oficiales de Base indican que los Flashblocks se emiten cada 200ms en la red principal, pero esto está sujeto a cambios. Siempre prueba en un entorno de desarrollo.

  • Los Flashblocks no están disponibles en todos los endpoints; verifica el soporte.
  • Son útiles para interfaces de usuario en tiempo real, pero pueden aumentar la carga en tu cliente.
  • Úsalos solo cuando necesites actualizaciones en menos de un segundo; de lo contrario, los bloques estándar son suficientes.
// Ejemplo usando viem con un transporte hipotético de flashblocks
// Esto es ilustrativo; consulta la API de tu proveedor para el uso exacto.
import { createPublicClient, webSocket } from 'viem';
import { base } from 'viem/chains';

const client = createPublicClient({
  chain: base,
  transport: webSocket('wss://tu-proveedor-endpoint-flashblocks')
});

// Suponiendo que el proveedor emite eventos 'block' en la cadencia de flashblock
const unwatch = client.watchBlocks({
  onBlock: (block) => {
    console.log('Flashblock:', block.number);
  },
});

Resultados esperados y cómo verificar

Cuando ejecutes el ejemplo de ethers.js, deberías ver un nuevo número de bloque registrado cada 2 segundos (o más rápido si los Flashblocks están habilitados). Los números de bloque deben ser secuenciales y crecientes. Para verificar que la conexión funciona, también puedes llamar a provider.getBlockNumber() y compararlo con la salida de la suscripción.

Para viem, el callback de watchBlockNumber se activará con el último número de bloque. Puedes verificar cruzadamente con un explorador público como Basescan. Si no ves actualizaciones, revisa tu conexión de red, firewall o disponibilidad del endpoint.

  • Salida esperada: números de bloque secuenciales que aumentan con el tiempo.
  • Usa provider.getBlockNumber() para confirmar el último bloque.
  • Si no hay eventos, prueba con una llamada simple eth_blockNumber vía WebSocket.

Fallos comunes y soluciones para conexiones WebSocket

Las conexiones WebSocket pueden caerse debido a inestabilidad de la red, tiempos de espera del servidor o limitación de tasa. Errores comunes incluyen 'Connection closed', 'ETIMEDOUT' o 'Unexpected server response'. Para manejarlos, implementa reconexión automática con backoff exponencial. Tanto ethers.js como viem tienen opciones de reconexión integradas, pero es posible que necesites personalizarlas.

Para ethers.js, puedes escuchar los eventos 'error' y 'close' y recrear el proveedor. Para viem, el transporte webSocket tiene una opción reconnect. Además, considera usar un proveedor dedicado como la guía de soluciones de desconexión WebSocket RPC de OnFinality para estrategias avanzadas.

  • Implementa reconexión con backoff para manejar caídas.
  • Monitorea la salud de la conexión con pings de heartbeat.
  • Usa múltiples endpoints para failover.
  • Revisa los límites de tasa; los endpoints públicos pueden limitar.
// Ejemplo de lógica de reconexión para ethers.js
let provider;
let reconnectAttempts = 0;

function connect() {
  provider = new WebSocketProvider(wsUrl);
  provider.on('block', (blockNumber) => console.log('Bloque:', blockNumber));
  provider.on('error', (err) => {
    console.error('Error:', err);
    provider.destroy();
    reconnect();
  });
  provider.on('close', () => {
    console.log('Conexión cerrada');
    reconnect();
  });
}

function reconnect() {
  const delay = Math.min(1000 * 2 ** reconnectAttempts, 30000);
  reconnectAttempts++;
  setTimeout(connect, delay);
}

connect();

Compensaciones y limitaciones de los WebSockets RPC de Base

Las conexiones WebSocket son más complejas que HTTP y requieren una gestión cuidadosa de recursos. Mantienen una conexión persistente abierta, lo que puede consumir memoria y ancho de banda, especialmente con muchas suscripciones. Los Flashblocks aumentan la frecuencia de los eventos, lo que puede abrumar a los clientes que no están optimizados para datos de alto rendimiento.

Los endpoints públicos a menudo tienen límites de tasa y pueden no soportar Flashblocks. Para producción, considera un proveedor comercial como los planes de precios de OnFinality que ofrecen límites más altos y soporte dedicado. Además, ten en cuenta que las suscripciones WebSocket no garantizan la entrega en orden; es posible que necesites manejar reorganizaciones verificando los hashes de los bloques.

  • Las conexiones persistentes requieren más recursos que el sondeo HTTP.
  • Los Flashblocks pueden causar alta frecuencia de eventos; diseña tu cliente en consecuencia.
  • Los endpoints públicos pueden tener límites de uso; usa un proveedor gestionado para escalar.
  • Maneja las reorganizaciones de la cadena verificando los hashes de los bloques.

Próximos pasos y recursos adicionales

Ahora que entiendes las conexiones WebSocket RPC de Base, puedes construir dApps en tiempo real, monitores o herramientas de análisis. Para una inmersión más profunda, explora la documentación de referencia RPC de Base para todos los métodos disponibles. Si necesitas un endpoint fiable, consulta la página de red de Base de OnFinality para servicios gestionados.

También puedes usar el Asistente RPC de OnFinality para generar URLs de endpoint y probarlas. Para más recursos de aprendizaje, visita el centro de aprendizaje de OnFinality para guías sobre mejores prácticas de RPC y solución de problemas.

Límites de tarifa base de RPC, infraestructura y cuándo pasar a un endpoint dedicado

Los endpoints públicos de Base RPC, incluidos WebSocket y Flashblocks, son infraestructura compartida. Imponen límites de tarifa para garantizar un uso justo, lo que puede provocar limitación o desconexiones durante solicitudes de alta frecuencia o cargas de suscripción pesadas. Flashblocks, que emite eventos cada 200 ms, y las suscripciones WebSocket (por ejemplo, newHeads, logs) aumentan significativamente el recuento de solicitudes y pueden alcanzar rápidamente estos límites.

Para aplicaciones de producción, depender de endpoints públicos es arriesgado debido a la latencia variable, la limitación de tarifa y el posible tiempo de inactividad. Si su aplicación requiere un rendimiento constante, alto rendimiento o tiempo de actividad garantizado, considere pasar a un endpoint dedicado. Los endpoints dedicados ofrecen límites de tarifa más altos, recursos dedicados y mejor fiabilidad. Evalúe sus patrones de uso: si supera los límites públicos típicos o necesita estabilidad 24/7, una solución dedicada es recomendable. Para más detalles, consulte la guía de endpoints RPC de Base.

  • Los endpoints públicos son compartidos y tienen límites de tarifa; puede ocurrir limitación bajo carga.
  • Flashblocks y las suscripciones WebSocket aumentan la frecuencia de solicitudes, agravando los límites.
  • Para producción, evalúe sus necesidades; los endpoints dedicados proporcionan límites más altos y fiabilidad.

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