Tiempo estimado: 5 minutos de lectura

El indexado de datos de la blockchain organiza y estructura información para consultas eficientes en las DApps. Este artículo explica cómo usar The Graph para crear, probar y publicar subgrafos que mejoran el acceso a eventos y datos on-chain.

¿Qué es el Indexado de datos de la blockchain?

El Indexado de datos de la blockchain es el proceso mediante el cual se extraen, organizan y almacenan datos de la blockchain para facilitar su consulta eficiente y rápida. Un indexador de blockchain monitorea bloques, transacciones y eventos de contratos inteligentes, los descodifica y los estructura en bases de datos optimizadas para responder consultas complejas.

El proceso de indexado suele incluir la extracción de datos nuevos desde nodos blockchain, su procesamiento y transformación a formatos estructurados con metadatos adicionales, almacenamiento en bases de datos, creación de índices para búsquedas eficientes y finalmente la exposición de esos datos a través de APIs para su consulta desde aplicaciones descentralizadas (DApps).

Un caso de uso típico podría ser la consulta sistemática de los eventos emitidos por un determinado smart contract. En mi artículo sobre eventos en Solidity se exploran los usos habituales de este potente recurso de la blockchain para registrar información.

Puesto que el acceso al histórico de eventos a través de llamada RPC está habitualmente muy restringido a tan solo unos pocos bloques (se trata de una llamada que puede consumir muchos recursos del nodo), el indexado se presenta como una alternativa eficiente y práctica a la consulta en crudo de los datos disponibles en la blockchain.

¿Cómo indexar datos con The Graph?

The Graph es uno de los primeros protocolos de indexación, surgido hacia 2018 como solución a la dificultad que experimentaban los desarrolladores para acceder y consultar datos de forma eficiente en la blockchain, especialmente en Ethereum.

Dada su amplia trayectoria en el ecosistema Web3, es una de las opciones más interesantes a la hora de escoger un proveedor de datos indexados. Destaca especialmente por su versatilidad, ya que permite a cualquier desarrollador configurar y desplegar su propio indexador (llamado subgrafo), amoldado a sus necesidades específicas, en una red descentralizada.

El proceso básico para indexar datos con The Graph consiste en:

  • Inicializar y construir el subgrafo en el entorno local de desarrollo.
  • Desplegar el subgrafo en Graph Studio, el entorno de pruebas de The Graph.
  • Probar y depurar el subgrafo.
  • Integrar el subgrafo en la DApp.
  • Publicar el subgrafo en la red descentralizada de The Graph.

Inicialización del subgrafo

Como primer requisito es necesario instalar el entorno de línea de comandos, el Graph CLI. La recomendación es hacerlo de manera global:


npm install -g @graphprotocol/graph-cli@latest

A continuación se debe inicializar el subgrafo. Recomiendo ejecutar la siguiente instrucción:


graph init $subgraph-package-name --skip-git

Donde "subgraph-package-name" representa el nombre que daremos en nuestro repositorio de fuentes de código al paquete específico que modelará el subgrafo.

La opción "--skip-git" es útil para prevenir que el CLI interactúe con nuestro repositorio Github para añadir de forma automática las fuentes.

A continuación por línea de comandos habrá que introducir datos relevantes para la inicialización del subgrafo: la blockchain donde está el smart contract a indexar, el "slug" del subgrafo, el address del smart contract y algunas otras opciones.

A partir de ese momento se generan los archivos de código fuente que nos servirán para modelar el subgrafo con todas sus características.

Construcción del subgrafo

Habitualmente los archivos fuente generados después de inicializar el subgrafo sirven de plantilla para ajustar a las necesidades de cada caso.

Hay tres archivos de particular importancia que conviene parametrizar:

  • subgraph.yaml: archivo de manifiesto del subgrafo donde figura su descripción formal. Entre otras cosas para cada fuente de datos (address de un smart contract) se describen las entidades a indexar, los eventos origen de los datos y sus manejadores en el archivo de mapeos.
  • schema.graphql: esquema de las entidades del subgrafo. Se declaran los elementos y sus tipos de datos.
  • Archivo de mapeos en AssemblyScript: contiene los manejadores de los eventos con la lógica para indexar las entidades definidas en el subgrafo.

Una vez estén los dos primeros archivos preparados se debe ejecutar la siguiente instrucción:


graph codegen

Después de este paso, cuando además esté listo el archivo de mapeos, se construye el subgrafo


graph build

Con esa instrucción se compilan las fuentes del subgrafo en el directorio "build".

Despliegue del subgrafo

Este paso no es imprescindible aunque sí muy recomendable para validar el subgrafo antes de su publicación en la red descentralizada.

Consiste en instalar una versión operativa del subgrafo en Subgraph Studio, el entorno de desarrollo de la plataforma The Graph. La ventaja principal es que se trata de una operación completamente libre, sin necesidad de definir ningún API-KEY ni de suscribirse a ningún plan de pago.

Una vez completado el despliegue, se contará con un endpoint operativo para ejecutar consultas sobre el subgrafo desde nuestra DApp. Como principales limitaciones: el subgrafo no aparece listado en el buscador público, el Graph Explorer y su uso está limitado a 3000 peticiones diarias.

El prerrequisito para el despliegue es crear el subgrafo en el panel de control de Subgraph Studio. Para ello es preciso conectar una wallet.

Como datos principales a suministrar, el "slug" del subgrafo (lo identificará de forma unívoca) obtenido a partir del nombre dado y la descripción, útil para mostrar posteriormente en el Graph Explorer.

Una vez creado el subgrafo (en estado borrador) se podrá visualizar el "deploy-key", necesario para el siguiente comando de despliegue:


graph deploy $subgraph-slug

La consola interactiva pedirá un identificador de la versión del subgrafo a desplegar. En general conviene archivar versiones obsoletas de los subgrafos desplegados desde el Subgraph Studio, aunque la propia plataforma lo gestiona de manera automática para evitar mantener muchas versiones activas de un mismo subgrafo.

Tras el despliegue, el subgrafo pasa a estado "desplegado" en Subgraph Studio. Desde el panel de control se puede ver el estado de sincronización (cuántos bloques se han procesado desde el bloque inicial de despliegue del smart contract que hace de fuente de datos) y la URL del endpoint de pruebas. También se pueden ver los logs emitidos para comprobar si se produce algún error que convenga subsanar.

Conclusión: primeros pasos para la indexación de datos de la blockchain

El indexado de datos es un paso fundamental para contar con la información precisa de la blockchain desde las DApps.

Puesto que el almacenaje de datos on-chain en redes EVM está limitado por el propio diseño (costes transaccionales), el acceso a datos agregados o estructurados de los smart contracts mediante consumo crudo de información es en la mayoría de los casos inviable.

Para solventar esta carencia han surgido en los últimos años diversas plataformas y protocolos que facilitan la labor mediante el indexado de datos.

Una de las más potentes y cualificadas es The Graph. En este artículo hemos visto de qué forma se puede crear y desplegar un subgrafo que indexe los datos precisos para el consumo de una DApp particular.

En próximos artículos continuaré describiendo los siguientes pasos hasta finalizar con la publicación del subgrafo en la red descentralizada de The Graph


¿Te has encontrado con la necesidad de acceder a datos de la blockchain que requieran un indexado previo? ¿Utilizas alguna plataforma o protocolo existente o prefieres desarrollar tu solución ad-hoc? Comenta tus propias experiencias.

Si quieres asesoramiento sobre qué estrategia seguir o necesitas ayuda para desarrollar un indexado de datos de la blockchain, puedo ayudarte. Contáctame y cuéntame tu caso. ¡Muchas gracias!