Un nodo de blockchain almacena datos en un formato optimizado para el consenso y la verificación, no para la consulta. Si quiere conocer el saldo actual de una dirección de Ethereum, un nodo puede decírselo. Pero si quiere conocer todas las transacciones que ha realizado esa dirección, o todos los tokens que posee, o su historial de interacciones con un contrato inteligente específico, necesita un indexador.
Los indexadores funcionan leyendo cada bloque de una blockchain, decodificando las transacciones y los eventos, y almacenando los datos procesados en una base de datos optimizada para los tipos de consultas que los usuarios realmente quieren ejecutar. Esto es conceptualmente similar a cómo un motor de búsqueda rastrea la web y construye un índice. El HTML sin procesar de cada página web existe, pero los motores de búsqueda lo hacen útil al indexarlo y organizarlo.
The Graph es el protocolo de indexación descentralizado más conocido. Permite a los desarrolladores definir subgrafos que especifican exactamente qué datos extraer de una blockchain y cómo almacenarlos. Cuando ocurre un evento relevante on-chain, las funciones de mapeo del subgrafo procesan el evento y actualizan los datos almacenados. Las aplicaciones luego consultan el subgrafo usando GraphQL en lugar de interactuar directamente con la blockchain.
El proceso de indexación es computacionalmente intensivo. Para Ethereum, un indexador necesita procesar cada transacción en cada bloque desde el génesis, decodificar los datos de entrada y los registros de eventos, y mantener un estado actualizado de todos los datos relevantes. Un nodo de archivo completo de Ethereum almacena más de 15 terabytes de datos. Procesar esto en formatos indexados útiles requiere recursos computacionales significativos y puede tomar días o semanas para una sincronización histórica completa.
Los registros de eventos son la principal fuente de datos para la mayoría de los indexadores. Cuando un contrato inteligente emite un evento, como un evento Transfer para tokens ERC-20, crea una entrada de registro que los indexadores pueden filtrar y procesar de manera eficiente. Los contratos bien diseñados emiten eventos para cada cambio significativo de estado, lo que facilita la indexación. Los contratos que modifican el estado sin emitir eventos son más difíciles de indexar porque el indexador necesita rastrear la ejecución de la transacción para detectar cambios.
Diferentes servicios de indexación se optimizan para diferentes casos de uso. Dune Analytics proporciona una interfaz SQL a datos indexados de blockchain, haciéndolos accesibles para analistas que saben SQL pero no Solidity. Nansen combina indexación on-chain con etiquetado de carteras, conectando direcciones con entidades conocidas. Flipside proporciona conjuntos de datos curados para protocolos específicos. Cada uno toma decisiones diferentes sobre qué indexar y cómo presentarlo.
La indexación en tiempo real presenta desafíos adicionales. La producción de bloques en Ethereum ocurre cada 12 segundos, y un indexador necesita procesar los datos de cada bloque nuevo y actualizar su base de datos antes de que llegue el siguiente bloque. Durante períodos de alta actividad, un solo bloque puede contener miles de eventos relevantes. El indexador necesita manejar esta carga mientras también atiende el tráfico de consultas de las aplicaciones.
El manejo de reorganizaciones es un aspecto sutil pero crítico de la indexación. Las blockchains ocasionalmente se reorganizan, lo que significa que un bloque previamente procesado es reemplazado por un bloque diferente en la misma altura. Un indexador necesita detectar estas reorganizaciones y revertir cualquier cambio de datos del bloque reemplazado. No manejar las reorganizaciones correctamente puede llevar a datos inconsistentes que muestran transacciones o cambios de estado que nunca ocurrieron realmente.
Para traders y analistas, los indexadores son lo que hace práctico el análisis on-chain. Sin ellos, monitorear carteras de ballenas, rastrear flujos de tokens, analizar el uso de protocolos DeFi o construir señales de trading a partir de datos on-chain requeriría ejecutar su propia infraestructura a un costo significativo. La calidad y cobertura del indexador del que depende afecta directamente la calidad de su análisis.