Introducción
The Graph es un protocolo descentralizado para indexar y consultar datos de cadenas de bloques, comenzando con Ethereum. Permite consultar datos que son difíciles de consultar directamente.
Los proyectos con contratos inteligentes complejos como Uniswap e iniciativas de NFT como Bored Ape Yacht Club almacenan datos en la cadena de bloques de Ethereum, lo que lo hace realmente difícil para leer nada más que datos básicos directamente desde la cadena de bloques.
En el caso de Bored Ape Yacht Club, podemos realizar operaciones básicas de lectura en el contrato como obtener el propietario de un determinado Ape, obtener el URI de contenido de un Ape en función de su ID, o el suministro total, ya que estas operaciones de lectura están programadas directamente en el contrato inteligente, pero no son posibles consultas y operaciones más avanzadas del mundo real como agregación, búsqueda, relaciones y filtrado no trivial. Por ejemplo, si quisiéramos consultar simios que son propiedad de una determinada dirección y filtrar por una de sus características, no podríamos obtener esa información interactuando directamente con el contrato en sí.
Para obtener estos datos, tendría que procesar cada uno de los eventos
[transfer](<https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d#code#L1746>)
emitidos, leer los metadatos de IPFS utilizando el ID del token y el hash de IPFS. y luego agregarlo. Incluso para este tipo de preguntas relativamente simples, una aplicación descentralizada (dapp) que se ejecuta en un navegador tardaría horas o incluso días en obtener una respuesta.También puede crear su propio servidor, procesar las transacciones allí, guardarlas en una base de datos y crear un punto final de API encima de todo para consultar los datos. Sin embargo, esta opción consume muchos recursos, necesita mantenimiento, presenta un único punto de falla y rompe importantes propiedades de seguridad requeridas para la descentralización.
Indexar datos de blockchain es muy, muy difícil.
Las propiedades de la cadena de bloques como la finalidad, las reorganizaciones de la cadena o los bloques no enlazados complican aún más este proceso y hacen que no solo consuma mucho tiempo, sino que sea conceptualmente difícil recuperar los resultados correctos de las consultas a partir de los datos de la cadena de bloques.
The Graph resuelve esto con un protocolo descentralizado que indexa y permite la consulta eficaz y eficiente de los datos de la cadena de bloques. Estas API ("subgráficos" indexados) se pueden consultar con una API GraphQL estándar. Hoy en día, existe un servicio alojado y un protocolo descentralizado con las mismas capacidades. Ambos están respaldados por la implementación de código abierto de Graph Node.
Cómo funciona el gráfico
El gráfico aprende qué y cómo indexar los datos de Ethereum en función de las descripciones de los subgráficos, lo que se conoce como el manifiesto del subgráfico. La descripción del subgráfico define los contratos inteligentes de interés para un subgráfico, los eventos en esos contratos a los que se debe prestar atención y cómo asignar datos de eventos a datos que The Graph almacenará en su base de datos.
Una vez que haya escrito un
manifiesto de subgráfico
, use Graph CLI para almacenar la definición en IPFS y decirle al indexador que comience a indexar datos para ese subgráfico.Este diagrama brinda más detalles sobre el flujo de datos una vez que se ha implementado un manifiesto de subgrafo, que se ocupa de las transacciones de Ethereum:
El flujo sigue estos pasos:
- Una aplicación descentralizada agrega datos a Ethereum a través de una transacción en un contrato inteligente.
- El contrato inteligente emite uno o más eventos mientras procesa la transacción.
- Graph Node escanea continuamente Ethereum en busca de nuevos bloques y los datos de su subgráfico que puedan contener.
- Graph Node encuentra eventos de Ethereum para su subgrafo en estos bloques y ejecuta los controladores de mapeo que proporcionó. El mapeo es un módulo WASM que crea o actualiza las entidades de datos que Graph Node almacena en respuesta a los eventos de Ethereum.
- La aplicación descentralizada consulta el Graph Node en busca de datos indexados de la cadena de bloques, utilizando el [punto final de GraphQL] del nodo (https://graphql.org/learn/). El Graph Node, a su vez, traduce las consultas de GraphQL en consultas para su almacén de datos subyacente con el fin de obtener estos datos, haciendo uso de las capacidades de indexación del almacén. La aplicación descentralizada muestra estos datos en una rica interfaz de usuario para los usuarios finales, que utilizan para emitir nuevas transacciones en Ethereum. El ciclo se repite.