Resumen
Un indexador de Sui convierte los datos brutos de checkpoints y transacciones de Sui en un estado consultable para paneles, análisis y backends de aplicaciones. La parte difícil rara vez es la capa de consulta, sino mantener un flujo confiable y de baja latencia de datos de Sui hacia ella. Este artículo cubre las arquitecturas de indexación que los desarrolladores realmente usan en Sui, los patrones de acceso RPC y gRPC que las alimentan, y cómo decidir entre infraestructura autoalojada y gestionada. También explica dónde encaja un RPC de Sui confiable y una configuración de nodo dedicado de OnFinality en ese pipeline.
Un indexador de Sui es el componente que convierte la salida bruta on-chain de Sui en algo que tu aplicación puede consultar rápidamente: saldos, historiales de objetos, flujos de eventos y métricas agregadas. Si estás construyendo una billetera, un explorador, un panel DeFi o un backend que necesita más que una simple búsqueda de objeto, eventualmente necesitarás uno.
El problema es que la indexación es un problema de ingeniería de datos, no solo un problema de RPC. Necesitas una fuente confiable de datos de Sui, una forma de procesarlos sin quedarte atrás y una capa de almacenamiento que responda consultas rápidamente. Este artículo explica cómo se construye ese pipeline, dónde suele fallar y cómo decidir si ejecutarlo tú mismo o apoyarte en infraestructura gestionada.
Qué hace realmente un indexador de Sui
Sui produce datos en algunas formas distintas, y un buen indexador entiende la diferencia:
- Checkpoints — lotes ordenados de transacciones. Los checkpoints son la columna vertebral de cualquier indexador de Sui porque te dan una secuencia determinista y sin huecos para procesar.
- Transacciones y efectos — las entradas y los cambios de estado resultantes (mutaciones de objetos, objetos creados y eliminados, cambios de saldo).
- Eventos — mensajes estructurados emitidos por paquetes Move. Los eventos son el gancho más fácil para la indexación específica de la aplicación porque puedes filtrar por paquete y tipo de evento.
- Objetos — el estado actual de objetos propios y compartidos. El estado de los objetos es lo que realmente necesitan la mayoría de las rutas de lectura.
Un indexador de Sui típico lee checkpoints en orden, extrae las transacciones y eventos que le interesan, los transforma en un esquema que se adapta a tus consultas y escribe el resultado en una base de datos. La capa de consulta (REST, GraphQL o SQL) luego sirve a tu aplicación.
La decisión de diseño importante es si indexas todo o solo lo que necesitas. La indexación de historial completo es costosa y lenta de rellenar. La indexación dirigida — un paquete específico, un conjunto de tipos de eventos o un subconjunto de objetos — suele ser lo que realmente necesitan las aplicaciones en producción.
Construir vs comprar: dónde está el costo real
Antes de escribir cualquier código de indexación, decide quién ejecuta el pipeline. La disyuntiva rara vez se trata de la capa de consulta; se trata de la fuente de datos y la carga operativa.
| Enfoque | Qué posees | Dónde duele | Buena opción cuando |
|---|---|---|---|
| Totalmente autoalojado | Fuente de datos, procesamiento, almacenamiento, API de consulta | Tiempo de relleno, manejo de reorganizaciones/huecos, guardia para un pipeline retrasado | Necesitas un esquema personalizado y tienes ingenieros de plataforma disponibles |
| RPC gestionado + tu propio indexador | Solo procesamiento y almacenamiento | Aún ajustas el rendimiento y el almacenamiento, pero no el tiempo de actividad del nodo | Quieres control sobre el esquema sin ejecutar nodos |
| Indexador gestionado / API de datos | Solo capa de consulta | Menos control sobre el esquema y la retención | Necesitas datos estándar rápidamente y la flexibilidad del esquema es secundaria |
La mayoría de los equipos terminan en el medio: ejecutan su propia transformación y almacenamiento, pero dependen de un proveedor gestionado para la fuente de datos de Sui. Ahí es donde importa un RPC confiable y una configuración de nodo dedicado, porque una fuente retrasada o limitada en tasa detendrá todo el pipeline sin importar cuán bueno sea tu código de procesamiento.
Elegir tu fuente de datos de Sui
Tu indexador es tan fresco como el endpoint que lo alimenta. Hay tres patrones de acceso comunes en Sui, y se adaptan a diferentes etapas de un pipeline.
JSON-RPC para lecturas de objetos y transacciones. Bueno para búsquedas dirigidas, envío de transacciones y sondeo ligero. Es la integración más simple y funciona bien para indexación de bajo volumen o basada en solicitudes.
Streaming gRPC para ingesta continua. Cuando necesitas seguir checkpoints o suscribirte a un flujo de actualizaciones, una interfaz de streaming es mucho más eficiente que el sondeo. Este es el patrón al que convergen la mayoría de los indexadores en producción, porque te mantiene cerca de la cabeza de la cadena sin saturar un endpoint de solicitud/respuesta.
Acceso histórico masivo para relleno. Rellenar meses de historial a través de un endpoint de solicitud/respuesta es lento. Si tu proveedor ofrece acceso masivo o de archivo, úsalo para la carga inicial y reserva el streaming para mantenerte actualizado.
Una división práctica se ve así: rellena desde una fuente con capacidad de archivo, luego cambia a streaming para la cola en vivo y usa JSON-RPC para lecturas ad-hoc que tu aplicación realiza en el momento de la solicitud.
Un bucle de ingesta mínimo
La forma de un indexador de Sui suele ser un cursor de checkpoint más un paso de transformación. El ejemplo a continuación usa una llamada JSON-RPC para obtener un checkpoint y avanzar un cursor. Trátalo como un boceto, no como un indexador completo — el punto es el flujo de control.
curl -s https://sui.api.onfinality.io/public \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_getCheckpoint",
"params": ["1000000"]
}'
En un pipeline real, envolverías esto en un bucle que persiste el último checkpoint procesado, maneja huecos y escribe filas transformadas en lotes. Dos detalles importan más que la solicitud en sí:
- Persiste el cursor después de la escritura, no antes. Si avanzas el cursor y luego fallas antes de escribir, omites datos silenciosamente.
- Haz la transformación idempotente. Reprocesar un checkpoint debe sobrescribir las mismas filas, no duplicarlas. Una clave única en
(checkpoint, tx_digest, event_index)es la solución habitual.
Para ingesta continua, reemplaza el bucle de sondeo con una suscripción de streaming y mantén las mismas reglas de cursor e idempotencia.
Lista de verificación para producción
Una vez que el pipeline se ejecuta localmente, las preguntas cambian a la confiabilidad. Revisa estos puntos antes de dirigir tráfico real:
- Monitoreo de retraso. Rastrea la brecha entre la cabeza de la cadena y tu último checkpoint procesado. Alerta sobre retraso sostenido, no sobre un pico único.
- Manejo de huecos y reorganizaciones. Decide cómo detectas un checkpoint perdido y cómo lo vuelves a obtener. El modelo de checkpoints de Sui está ordenado, lo que hace que la detección de huecos sea manejable — úsalo.
- Estrategia de relleno. Conoce cuánto tarda un relleno completo y si puedes ejecutarlo en paralelo con la ingesta en vivo.
- Conmutación por error de endpoint. Un solo endpoint es un único punto de falla. Ten un respaldo y una forma de detectar una fuente degradada.
- Crecimiento del almacenamiento. Las tablas de eventos y transacciones crecen rápido. Planifica la retención y particionamiento antes de que la base de datos se convierta en el cuello de botella.
- Presupuesto de latencia de consulta. Separa las rutas optimizadas para escritura y lectura si las consultas de tu aplicación necesitan respuestas en menos de un segundo.
Si alguno de estos no tiene responsable, esa es la brecha que debes cerrar primero.
Dónde encaja la infraestructura RPC
El indexador es tu código; la fuente de datos es infraestructura. Mantenerlos separados es lo que te permite escalar uno sin reescribir el otro.
Un endpoint RPC de Sui gestionado se encarga del lado del nodo — sincronización, actualizaciones y disponibilidad — para que tu pipeline solo tenga que lidiar con datos. Para ingesta de mayor volumen, un nodo dedicado de Sui te da capacidad aislada en lugar de compartir un grupo público, lo cual importa cuando tu bucle de ingesta es constante en lugar de en ráfagas. Puedes revisar la página de la red Sui para transportes soportados y detalles de conexión, y comparar precios de RPC si estás dimensionando para un rendimiento sostenido.
La regla práctica: si tu indexador se ejecuta continuamente y una fuente estancada significa datos obsoletos para los usuarios, trata la fuente de datos como infraestructura de producción, no como un endpoint gratuito.
Modos de falla comunes
La mayoría de los incidentes de indexadores de Sui caen en un pequeño conjunto de patrones. Reconocerlos acorta considerablemente la depuración.
| Síntoma | Causa probable | Primera cosa a verificar |
|---|---|---|
| El indexador se retrasa constantemente | Rendimiento de la fuente o límites de tasa | Tasa de solicitudes vs. límites del proveedor; cambiar a streaming |
| Filas duplicadas después de un reinicio | Transformación no idempotente | Claves únicas en identificadores de checkpoint/tx/evento |
| Checkpoints faltantes | Cursor avanzado antes de la escritura | Orden de persistencia del cursor |
| Consultas lentas a medida que crecen los datos | Tablas no particionadas | Índices y particionamiento en columnas calientes |
| Pausas intermitentes en la ingesta | Endpoint único, sin conmutación por error | Agregar una fuente de respaldo y verificaciones de estado |
Ninguno de estos es exótico. Son los costos normales de ejecutar un pipeline de datos, y todos son más fáciles de manejar cuando la fuente de datos es estable.
Puntos clave
- Un indexador de Sui lee checkpoints, transacciones, eventos y objetos, y luego los reforma en un esquema consultable.
- La indexación dirigida (paquetes o tipos de eventos específicos) suele ser más barata y rápida que la indexación de historial completo.
- El streaming es el patrón correcto para la cola en vivo; el acceso masivo o de archivo es el patrón correcto para el relleno.
- Persiste tu cursor después de la escritura y haz las transformaciones idempotentes — estas dos reglas previenen la mayoría de los errores de integridad de datos.
- La fuente de datos es infraestructura de producción. Un RPC de Sui gestionado o un nodo dedicado elimina las operaciones de nodo de tu ruta crítica.
- Monitorea el retraso, planifica la retención y siempre ten un endpoint de conmutación por error.
Preguntas frecuentes
¿Necesito un indexador separado si ya tengo un endpoint RPC?
Generalmente sí, para cualquier cosa más allá de búsquedas de un solo objeto. RPC responde bien a consultas puntuales, pero no mantiene los agregados, historiales o vistas de eventos filtrados que necesitan los paneles y análisis. El indexador los construye y almacena; el RPC es de donde obtiene sus datos.
¿Debería indexar cada checkpoint o solo lo que necesito?
Comienza con lo que necesitas. Filtrar por paquete y tipo de evento mantiene el almacenamiento y el tiempo de relleno manejables. Siempre puedes ampliar el alcance más adelante, pero reducir un índice de historial completo después es doloroso.
¿Cómo evito que un indexador de Sui se retrase?
Usa una interfaz de streaming para la cola en vivo en lugar de sondeo, monitorea la brecha entre la cabeza de la cadena y tu cursor, y asegúrate de que tu fuente de datos tenga suficiente capacidad para la ingesta sostenida. Si el retraso crece constantemente en lugar de picos, la fuente suele ser la restricción.
¿Puedo ejecutar un indexador contra un endpoint público?
Para desarrollo y pruebas de bajo volumen, sí. Para ingesta continua en producción, un endpoint público suele ser la herramienta incorrecta porque la capacidad compartida y los límites de tasa eventualmente te limitarán. Un nodo dedicado le da a tu pipeline capacidad predecible.
¿Cuál es la diferencia entre un indexador y un proveedor de RPC?
Un proveedor de RPC ejecuta nodos y expone el acceso a la cadena. Un indexador es lógica de aplicación que consume ese acceso y produce un conjunto de datos consultable. Son complementarios: el proveedor suministra datos, el indexador los da forma y los almacena.
Próximos pasos
Si estás comenzando un indexador de Sui, empieza con un alcance estrecho — un paquete o un pequeño conjunto de tipos de eventos — y asegúrate de que las reglas de cursor e idempotencia sean correctas antes de escalar. Luego decide si tu fuente de datos puede sostener la ingesta continua. Si no puede, considera un RPC de Sui gestionado o un nodo dedicado para que tu pipeline no compita por capacidad compartida. Puedes revisar redes RPC soportadas para ver dónde se ubica Sui junto al resto de la infraestructura que ejecuta OnFinality, y comenzar desde la página de la red Sui cuando estés listo para conectarte.