Respuestas>Más información sobre la indexación y los datos de blockchain>¿Qué es la indexación de blockchain?
¿Qué es la indexación de blockchain?
// Tags
Indexación de cadenas de bloquesindexador de blockchain
En resumen: La indexación de blockchains es el proceso de extraer datos sin procesar de una cadena de bloques, transformarlos en un formato estructurado y almacenarlos en una base de datos optimizada para consultas rápidas. Las cadenas de bloques están diseñadas para garantizar la seguridad y la inmutabilidad, no para realizar búsquedas. Sin indexación, responder incluso a preguntas sencillas como «muéstrame todas las transferencias de este monedero» requiere escanear todos los bloques desde el bloque génesis, lo cual resulta poco práctico a gran escala. Los indexadores resuelven este problema creando bases de datos consultables que permiten a las aplicaciones acceder a los datos de la cadena de bloques en tiempo real.
La explicación sencilla
Las cadenas de bloques son libros de contabilidad en los que solo se pueden añadir datos. Son excelentes para registrar transacciones en una secuencia a prueba de manipulaciones, pero son pésimas a la hora de responder preguntas sobre dichas transacciones. No hay ninguna función de «búsqueda» integrada. No hay consultas SQL. No hay forma de decir «busca todas las transferencias ERC-20 en las que haya participado esta dirección en los últimos 30 días» utilizando únicamente métodos RPC estándar.
Las herramientas básicas disponibles a través de los puntos finales RPC son primitivas por diseño. Puedes recuperar un bloque específico por su número. Puedes recuperar una transacción específica por su hash. Puedes obtener el saldo de una cuenta en un bloque específico. Pero no puedes realizar búsquedas a través de los bloques, filtrar por criterios, agregar datos ni combinar información de diferentes partes de la cadena. Para encontrar todas las transacciones de un monedero concreto, habría que recuperar todos los bloques generados hasta la fecha, extraer cada transacción de cada bloque, comprobar si el remitente o el destinatario coinciden con la dirección de interés y recopilar las coincidencias. En Ethereum, eso supone analizar más de 20 millones de bloques. En Solana, significa analizar miles de millones de ranuras. Sin indexación, esto no es solo lento: es imposible de realizar en un plazo de tiempo razonable.
La indexación de blockchain resuelve este problema mediante un proceso que lee continuamente los nuevos bloques desde un nodo, descodifica los datos sin procesar (transacciones, registros de eventos, cambios de estado, trazas), los transforma en registros estructurados y los escribe en una base de datos con los índices adecuados. Una vez que los datos se encuentran en la base de datos, tu aplicación puede consultarlos utilizando herramientas habituales como SQL o GraphQL, con tiempos de respuesta inferiores a un segundo.
Cómo funciona la indexación
El proceso de indexación sigue un modelo de extracción, transformación y carga (ETL). En la fase de extracción, el indexador se conecta a un nodo de la cadena de bloques y lee los datos sin procesar de los bloques. Esto incluye las cabeceras de los bloques, las transacciones, los recibos de transacción (que contienen registros de eventos) y, opcionalmente, los datos de rastreo (que recogen las llamadas internas entre contratos). El indexador procesa los bloques de forma secuencial, comenzando por un bloque inicial configurado y avanzando a lo largo del historial de la cadena.
En la fase de transformación, el indexador decodifica los datos sin procesar en estructuras con sentido. Los registros de eventos sin procesar, por ejemplo, están codificados como cadenas hexadecimales con hash de tema y campos de datos. El indexador utiliza la ABI (Interfaz Binaria de Aplicación) del contrato inteligente para decodificarlos y convertirlos en eventos legibles para los humanos, con parámetros con nombre y tipos de datos adecuados. Un registro de eventos de transferencia sin procesar se convierte en un registro estructurado con una dirección «de», una dirección «a», una cantidad de tokens y una dirección de contrato. La fase de transformación también puede calcular datos derivados, como el valor en dólares estadounidenses en el momento de la transferencia, la agregación del volumen por token o el seguimiento de los saldos actuales.
En la fase de carga, los registros estructurados se escriben en una base de datos, ya sea PostgreSQL, MongoDB, Snowflake, Elasticsearch u otro sistema de almacenamiento. La base de datos crea índices en los campos que las aplicaciones consultarán (como direcciones de monedero, contratos de tokens, marcas de tiempo y números de bloque), lo que permite búsquedas rápidas y consultas complejas en todo el conjunto de datos.
Una vez que el indexador se ha puesto al día con la punta de la cadena, pasa al mode en tiempo real, procesando cada nuevo bloque a medida que se genera e insertando los registros resultantes de forma inmediata. De este modo, la base de datos se mantiene actualizada con el estado en tiempo real de la cadena.
El problema de la reorganización
Uno de los aspectos más complejos de la indexación de cadenas de bloques es la gestión de las reorganizaciones de la cadena. Una reorganización se produce cuando cambia la cadena canónica de la cadena de bloques, normalmente porque se han generado bloques rivales en la misma altura y la red acaba convergiendo en una bifurcación diferente a la que tu indexador procesó inicialmente. Cuando esto ocurre, los bloques que tu indexador ya había procesado dejan de ser canónicos, y cualquier registro derivado de esos bloques resulta incorrecto.
Un indexador robusto debe detectar las reorganizaciones, revertir los registros afectados y volver a procesar los bloques correctos. Si no se gestionan adecuadamente las reorganizaciones, aparecerán transacciones fantasma en la base de datos (transacciones que estaban en la rama antigua pero no en la nueva), transacciones perdidas (transacciones en la rama nueva que la rama antigua no incluía) y un estado incorrecto. En el caso de las aplicaciones financieras, este tipo de corrupción de datos es inaceptable.
La gestión de las reorganizaciones añade una complejidad considerable al proceso de indexación. El indexador debe realizar un seguimiento de los bloques que se han procesado, comparar la cadena que detecta con la que ya tiene almacenada, detectar divergencias y ejecutar las reversiones de forma correcta. Esta es una de las principales razones por las que los equipos optan por soluciones de indexación gestionadas en lugar de crear indexadores personalizados desde cero.
Enfoques de indexación
The Graph es el protocolo de indexación descentralizado más utilizado. Los desarrolladores crean «subgrafos», que son archivos de configuración que definen qué contratos inteligentes se deben supervisar, a qué eventos se debe estar atento y cómo asignar los datos de los eventos a un esquema consultable. Los operadores de nodos independientes, denominados «indexadores», gestionan la infraestructura de procesamiento y atienden las consultas a través de puntos finales de GraphQL. The Graph funciona bien para casos de uso estándar, como consultar datos de protocolos DeFi, el historial de propiedad de NFT y la actividad de gobernanza de las DAO. Entre sus limitaciones se encuentran la latencia (las actualizaciones de los subgráficos no siempre son en tiempo real), la rigidez del esquema (cambiar el esquema suele requerir una nueva implementación y resincronización) y la dependencia de la disponibilidad de la red descentralizada.
Los indexadores personalizados ofrecen a los equipos un control total sobre su flujo de datos, pero requieren una inversión significativa en ingeniería. Crear un indexador personalizado apto para producción implica desarrollar la lógica de ingesta de bloques, la decodificación de eventos, el diseño del esquema de la base de datos, la gestión de reorganizaciones, la recuperación ante errores, la supervisión y el escalado de la infraestructura. Para aplicaciones a gran escala con requisitos de datos específicos, esta inversión puede merecer la pena, pero para la mayoría de los equipos supone meses de trabajo de ingeniería que podrían dedicarse a su producto principal.
La transmisión basada en «push» representa un enfoque más novedoso que simplifica la indexación al enviar datos filtrados de la cadena de bloques directamente a tu sistema de almacenamiento, lo que elimina la necesidad de crear y mantener tú mismo la capa de extracción. En lugar de que tu indexador extraiga los datos de un nodo, un servicio de transmisión envía exactamente los datos que necesitas a tu base de datos, webhook o almacén de datos.
Cómo Quicknode la indexación de cadenas de bloques
Quicknode Streams está diseñado específicamente para la indexación de datos de blockchain. Streams un canal de datos basado en notificaciones push que envía datos de blockchain sin procesar o filtrados directamente a tu destino preferido, incluyendo PostgreSQL, Snowflake, Amazon S3, Azure Storage y webhooks. En lugar de crear y mantener una infraestructura de sondeo RPC para extraer datos de la cadena, solo tienes que configurar un Stream con la red que desees, el conjunto de datos (bloques, transacciones, recibos, trazas) y filtros JavaScript opcionales, y Quicknode del resto.
Streams los datos en orden de finalidad con garantías de entrega «exactamente una vez», lo que significa que tu base de datos se mantiene coherente con la cadena canónica sin que tu código tenga que gestionar el orden de los bloques ni la deduplicación. La gestión integrada de reorganizaciones detecta automáticamente las reorganizaciones de la cadena y envía cargas útiles de corrección, de modo que tus datos indexados reflejen siempre el estado real de la cadena. En cuanto a los datos históricos, la función de rellenado Streams te permite rellenar tu base de datos con cualquier rango de bloques anteriores, sincronizándose hasta siete veces más rápido que los procesos de indexación tradicionales basados en RPC, con las mismas garantías de filtrado y entrega que la transmisión en tiempo real.
Quicknode publica una guía paso a paso para crear un indexador de blockchain con Streams, en la que se muestra cómo crear un indexador completo de transferencias ERC-20 respaldado por PostgreSQL con una API REST, desde la configuración hasta la consulta. Para los equipos que necesitan un procesamiento de datos aún más sofisticado, Streams con Quicknode para permitir transformaciones, enriquecimiento y automatización sin servidor sobre el canal de datos en tiempo real.
¿Cuál es la diferencia entre la indexación y el RPC sin procesar?
El RPC sin procesar y la indexación responden a distintos tipos de preguntas. El RPC está diseñado para consultas puntuales y operaciones de escritura: recuperar este bloque, leer este saldo, enviar esta transacción. La indexación está pensada para búsquedas y análisis: todas las transferencias de un monedero, el volumen total por token, el historial de propiedad de una colección. La tabla siguiente compara ambas opciones para que puedas elegir la herramienta adecuada para cada tarea.
Dimensión
RPC sin procesar
Base de datos indexada
Lo mejor en
Lectura de puntos y envío de transacciones
Búsqueda, filtrado y agregación
Lenguaje de consulta
Métodos JSON-RPC
SQL o GraphQL
Escaneos históricos
Poco a poco, bloque a bloque
Rápido, preprocesado e indexado
Esfuerzo de configuración
Conectarse a un endpoint
Crear o configurar un proceso de trabajo
Latencia típica
Ida y vuelta por llamada
Menos de un segundo con grandes conjuntos de datos
¿Qué tipo de consultas permite realizar la indexación?
Una vez que los datos se han indexado en una base de datos estructurada, las consultas que resultan imposibles con el RPC sin procesar se convierten en algo sencillo. Se puede obtener una lista de todas las transacciones de una dirección, rastrear el historial completo de propiedad de un NFT, agregar el volumen de operaciones por token y por día, clasificar las carteras según sus saldos o cruzar eventos de varios contratos. Estas son precisamente las consultas que alimentan los paneles de control, los exploradores y los productos de análisis. Para saber por qué estas consultas resultan tan difíciles sin indexación, consulta la sección «Consultas de datos de la cadena de bloques».
¿Cómo funcionan conjuntamente la indexación y la transmisión en continuo?
El streaming y la indexación son capas complementarias. El streaming es el mecanismo de entrega que envía nuevos bloques y eventos a tu infraestructura a medida que se producen, mientras que la indexación es lo que organiza esos datos entrantes en un almacén en el que se pueden realizar consultas. Una arquitectura moderna habitual utiliza un canal de streaming para introducir registros en una base de datos indexada, eliminando por completo la frágil capa de sondeo. Consulta «¿Qué es el streaming de datos de blockchain? » y «Sondeo frente a streaming» para saber cómo llegan los datos al indexador en primer lugar.
¿Cómo completan los indexadores los datos históricos?
El «backfilling» es el proceso de rellenar la base de datos con bloques históricos antes de pasar a los datos en tiempo real. Un buen proceso comienza en un bloque histórico elegido, avanza a lo largo de la cadena y, una vez llega a la punta, realiza una transición fluida a tiempo real, de modo que los registros históricos y en tiempo real comparten un mismo esquema. Si se hace correctamente, el rellenado es mucho más rápido que volver a escanear la cadena a través de RPC sin procesar. Consulta cómo acceder a los datos históricosde la cadena de bloques y la comparación entre los datos en tiempo real y los históricos para conocer las ventajas e inconvenientes que conlleva.
Preguntas frecuentes
¿Por qué no puedo utilizar simplemente RPC en lugar de la indexación?
El RPC es excelente para recuperar un bloque, una transacción o un saldo concretos, pero no ofrece ninguna forma de buscar, filtrar o agregar datos en toda la cadena. Responder a una pregunta como «todas las transferencias de este monedero» a través del RPC implica escanear millones de bloques uno por uno, lo cual resulta poco práctico. La indexación procesa previamente esos datos en una base de datos, de modo que la misma pregunta se resuelve con una sola consulta.
¿Qué es un subgrafo?
Un subgrafo es una configuración utilizada por The Graph que define qué contratos y eventos se deben indexar y cómo asignarlos a un esquema GraphQL consultable. Se trata de una forma habitual de crear un índice, muy adecuada para datos estándar de DeFi, NFT y gobernanza, aunque puede suponer una compensación entre la latencia en tiempo real y la flexibilidad del esquema en comparación con los flujos de trabajo personalizados o basados en streaming.
¿Cómo gestionan los indexadores las reorganizaciones de la cadena?
Un indexador robusto detecta cuándo cambia la cadena canónica, revierte los registros derivados de los bloques huérfanos y vuelve a procesar los correctos. Sin esto, tu base de datos acumula transacciones fantasma o perdidas. Los flujos gestionados gestionan las reorganizaciones automáticamente enviando cargas útiles de corrección. Para más información, consulta «¿Qué es una reorganización de la cadena de bloques?».
¿Debería crear mi propio indexador o utilizar un servicio gestionado?
Crear un indexador personalizado ofrece un control total, pero requiere desarrollar procesos de ingesta, decodificación, diseño de esquemas, gestión de reorganizaciones, supervisión y escalabilidad, lo que a menudo supone meses de trabajo. Un proceso gestionado se encarga por ti de la extracción, la ordenación, las reorganizaciones y la entrega, por lo que la mayoría de los equipos llegan antes a la fase de producción al configurar un servicio y centrar sus esfuerzos de ingeniería en su producto principal.
¿En qué bases de datos se pueden almacenar los datos indexados de la cadena de bloques?
Los datos indexados suelen almacenarse en PostgreSQL, MongoDB, Snowflake, Elasticsearch o en sistemas de almacenamiento de objetos como Amazon S3, dependiendo de si se necesitan consultas transaccionales, búsquedas de texto completo o análisis a gran escala. Un canal de transmisión puede enviar registros directamente a estos destinos. Si buscas tutoriales completos, la Guía para desarrolladores explica paso a paso los patrones de indexación más habituales.