Volver al índice
Modo oscuro
The Graph

The Graph por Santiago Soñora

Este tutorial está diseñado para guiar a quienes desean aprender más acerca de The Graph. Es ideal para un nivel medio.

The Graph es un protocolo descentralizado esencial para indexar y consultar datos de blockchains como Ethereum, Polygon, BNB Chain, Arbitrum y muchas otras, facilitando a los desarrolladores acceder a información de contratos inteligentes de forma rápida y estructurada. Permite crear 'subgraphs', que son APIs abiertas y personalizadas que definen qué datos indexar de la blockchain (eventos, llamadas de función, estado) y cómo transformarlos en un esquema de datos consultable usando GraphQL. Esta guía de nivel intermedio profundiza en los componentes de un subgraph (manifest `subgraph.yaml`, esquema `schema.graphql`, manejadores de datos en AssemblyScript `mapping.ts`), el funcionamiento del proceso de indexación en Graph Node, la arquitectura de la red descentralizada de The Graph (Indexers, Curators, Delegators) y el rol del token GRT. Cubre el uso de la CLI de The Graph para inicializar, construir y desplegar subgraphs (tanto al Hosted Service como a la red descentralizada), la escritura de manejadores de eventos y llamadas, la definición de entidades de datos, y cómo realizar consultas eficientes usando GraphQL para alimentar aplicaciones Web3.

“Hola, mundo” en The Graph

El 'Hola, mundo' de The Graph: un subgraph básico que define una entidad simple en el esquema y un manejador de eventos en AssemblyScript para indexar datos de un evento de contrato inteligente.

📋 Copiar
# schema.graphql
type Greeting @entity {
  id: ID!
  greeting: String!
  sender: Bytes! # address as Bytes
  blockTimestamp: BigInt!
  transactionHash: Bytes!
}

# src/mapping.ts (AssemblyScript handler for a hypothetical 'NewGreeting' event)
import { NewGreeting } from '../generated/YourContractName/YourContractName'; // Importa el tipo de evento
import { Greeting } from '../generated/schema'; // Importa la entidad generada

export function handleNewGreeting(event: NewGreeting): void {
  // Crea una nueva instancia de la entidad Greeting usando el hash de transacción como ID
  let greeting = new Greeting(event.transaction.hash.toHex());

  // Asigna los datos del evento a las propiedades de la entidad
  greeting.greeting = event.params.greeting;
  greeting.sender = event.params.sender;
  greeting.blockTimestamp = event.block.timestamp;
  greeting.transactionHash = event.transaction.hash;

  // Guarda la entidad en el almacenamiento indexado
  greeting.save();
}

# subgraph.yaml (Fragmento relevante para el evento)
# ... otras configuraciones ...

source: # Contrato a monitorear
  address: "0x..." # Direccion de tu contrato
  abi: "YourContractName"
startBlock: 12345678 # Bloque desde donde empezar a indexar

entities:
  - Greeting # La entidad definida en schema.graphql

features:
  #- ipfs # Opcional, si usas ipfs en mappings

mapping:
  kind: ethereum/events
  apiVersion: 0.0.7
  language: assemblyscript
  entities:
    - Greeting
  abis:
    - name: YourContractName
      file: ./abis/YourContractName.json # ABI de tu contrato
  eventHandlers:
    - event: NewGreeting(string,indexed address) # Nombre y tipos de los parámetros del evento
      handler: handleNewGreeting # La funcion manejadora en mapping.ts
  file: ./src/mapping.ts # Archivo de mapeo

Resultado:

Output
Define un subgraph que indexa un evento 'NewGreeting' de un contrato. Cada vez que se emite el evento, se crea una entidad 'Greeting' con los datos relevantes, haciéndola consultable a través de GraphQL.

Comandos básicos

Familiarizarse con estos comandos es esencial para interactuar eficientemente con The Graph:

Conceptos Clave

Comprender estos conceptos fundamentales te ayudará a dominar The Graph de forma más organizada y eficiente:

Casos de uso

Algunos ejemplos de aplicaciones prácticas donde se utiliza The Graph:

Consejos para Principiantes

Aquí tienes algunas recomendaciones para facilitar tus inicios en The Graph:

Herramientas relacionadas

Si te interesa The Graph, también podrías explorar estas herramientas:

Recursos útiles

Amplía tus conocimientos con estos enlaces y materiales: