SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
08.12.2024

Lição: 269: O Protocolo The Graph

O Protocolo The Graph é um protocolo descentralizado de indexação e consulta que permite aos desenvolvedores acessarem dados de blockchain de forma eficiente. Ele serve como uma API descentralizada significativa para aplicativos que operam em tecnologias de blockchain, especialmente no Ethereum. Nesta aula, vamos explorar os principais conceitos do The Graph, entender como criar um subgrafo e realizar consultas utilizando GraphQL.

O que é o The Graph?

O The Graph permite que desenvolvedores indexem dados da blockchain rapidamente e realizem consultas utilizando GraphQL. Os principais componentes do The Graph são:

  • Subgrafos: São APIs de código aberto indexadas pelo The Graph e descrevem como ingerir e consultar dados da blockchain.
  • GraphQL: Uma linguagem de consulta poderosa para APIs, que permite aos clientes solicitar dados específicos e recebê-los em formato JSON.

Conceitos Principais do The Graph

  1. Manifesto do Subgrafo: Um arquivo que define o subgrafo, incluindo a rede (Ethereum, Polygon, etc.), os contratos inteligentes a serem monitorados e os eventos a serem indexados.

  2. Mapping: Envolve transformar os dados da blockchain em um formato adequado para consulta. Mappings são escritos em AssemblyScript.

  3. Nó Graph: Um servidor que processa o manifesto do subgrafo e executa os mappings para indexar os eventos relevantes da blockchain.

Criando um Subgrafo

Etapa 1: Instalar o CLI do The Graph

Para começar, você precisa instalar o CLI do The Graph. Você pode fazer isso usando npm:

npm install -g @graphprotocol/graph-cli

Etapa 2: Inicializar um Novo Subgrafo

Crie um novo subgrafo executando o seguinte comando e siga as instruções:

graph init --from-contract <ENDEREÇO_DO_CONTRATO> <NOME_DO_SUBGRAFO>

Isso gerará uma estrutura básica para seu subgrafo, incluindo um manifesto subgraph.yaml.

Etapa 3: Definir o Manifesto do Subgrafo

No seu subgraph.yaml, defina a rede e os eventos do contrato inteligente que você deseja monitorar:

subgraph:
  name: exemplo/subgrafo
  protocol: ethereum
  network: mainnet
  source:
    address: "0xSeuEnderecoDeContrato"
    startBlock: 12345678

  mapping:
    kind: replacement
    apiVersion: 0.0.2
    entities:
      - ExemploEntidade
    abis:
      - name: Exemplo
        file: ./abis/Exemplo.json
    eventHandlers:
      - event: ExemploEvento(indexed address from, uint256 value)
        handler: handleExemploEvento

Etapa 4: Criar Mappings

Crie um arquivo src/mapping.ts onde você tratará os eventos definidos no manifesto. Aqui está um exemplo:

import { BigInt } from "@graphprotocol/graph-ts";
import { ExemploEvento } from "../generated/Exemplo/Exemplo";
import { ExemploEntidade } from "../generated/schema";

export function handleExemploEvento(event: ExemploEvento): void {
  let exemploEntidade = new ExemploEntidade(event.transaction.hash.toHex() + "-" + event.logIndex.toString());

  exemploEntidade.from = event.params.from;
  exemploEntidade.value = event.params.value;

  exemploEntidade.save();
}

Etapa 5: Compilar e Implantar Seu Subgrafo

Após definir seu subgrafo e os mappings, você pode compilar e implantar seu subgrafo utilizando os seguintes comandos:

graph codegen
graph build
graph deploy --product hosted-service <USUÁRIO_GITHUB>/<NOME_DO_SUBGRAFO>

Consultando Seu Subgrafo

Uma vez que seu subgrafo esteja implantado, você pode consultá-lo utilizando GraphQL. Por exemplo, para obter todas as instâncias de ExemploEntidade, use a seguinte consulta:

{
  exemploEntidades {
    id
    from
    value
  }
}

Conclusão

O Protocolo The Graph simplifica significativamente o processo de acesso a dados de blockchain, permitindo que os desenvolvedores se concentrem na construção de suas aplicações. Com a capacidade de criar subgrafos e realizar consultas eficientes utilizando GraphQL, o The Graph se torna uma ferramenta essencial para desenvolvedores de dApps. À medida que a adoção de tecnologias descentralizadas cresce, dominar o The Graph será uma habilidade inestimável no kit de ferramentas de desenvolvimento de blockchain.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!