logo

The Graph

Introdução

O Graph é um protocolo descentralizado para indexação e consulta de dados de blockchains, começando com Ethereum. Torna possível consultar dados que são difíceis de consultar diretamente.
Projetos com contratos inteligentes complexos como Uniswap e iniciativas de NFTs como Bored Ape Yacht Club armazenam dados no blockchain Ethereum, dificultando muito para ler qualquer coisa além de dados básicos diretamente do blockchain.
No caso do Bored Ape Yacht Club, podemos realizar operações básicas de leitura no contrato como obter o proprietário de um determinado Ape, obter o URI de conteúdo de um Ape com base em seu ID ou no fornecimento total, pois essas operações de leitura são programadas diretamente no contrato inteligente, mas consultas e operações mais avançadas do mundo real, como agregação, pesquisa, relacionamentos e filtragem não trivial, não são possíveis. Por exemplo, se quiséssemos consultar macacos pertencentes a um determinado endereço e filtrar por uma de suas características, não poderíamos obter essa informação interagindo diretamente com o próprio contrato.
Para obter esses dados, você teria que processar cada evento [transferência](<https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d#code#L1746>) já emitido, ler os metadados do IPFS usando o ID do token e o hash IPFS e, em seguida, agregue-o. Mesmo para esses tipos de perguntas relativamente simples, levaria horas ou até dias para um aplicativo descentralizado (dapp) em execução em um navegador obter uma resposta.
Você também pode criar seu próprio servidor, processar as transações lá, salvá-las em um banco de dados e criar um endpoint de API em cima de tudo isso para consultar os dados. No entanto, essa opção consome muitos recursos, precisa de manutenção, apresenta um único ponto de falha e quebra importantes propriedades de segurança necessárias para a descentralização.
A indexação de dados de blockchain é muito, muito difícil.
Propriedades de blockchain como finalidade, reorganizações de cadeia ou blocos não-unificados complicam ainda mais esse processo e tornam não apenas demorado, mas conceitualmente difícil recuperar resultados de consulta corretos de dados de blockchain.
O Graph resolve isso com um protocolo descentralizado que indexa e permite a consulta eficiente e eficiente de dados de blockchain. Essas APIs (subgráficos indexados) podem ser consultadas com uma API GraphQL padrão. Hoje, existe um serviço hospedado, bem como um protocolo descentralizado com os mesmos recursos. Ambos são apoiados pela implementação de código aberto de Graph Node.

Como funciona o gráfico

O Graph aprende o que e como indexar dados Ethereum com base em descrições de subgrafos, conhecido como manifesto de subgrafos. A descrição do subgrafo define os contratos inteligentes de interesse para um subgrafo, os eventos nesses contratos aos quais prestar atenção e como mapear dados de eventos para dados que o The Graph armazenará em seu banco de dados.
Depois de escrever um `manifesto do subgrafo', você usa a CLI do Graph para armazenar a definição no IPFS e instruir o indexador a começar a indexar os dados desse subgrafo.
Este diagrama fornece mais detalhes sobre o fluxo de dados após a implantação de um manifesto de subgrafo, lidando com transações Ethereum:
Image without caption
O fluxo segue estes passos:
  1. Um aplicativo descentralizado adiciona dados ao Ethereum por meio de uma transação em um contrato inteligente.
  1. O contrato inteligente emite um ou mais eventos durante o processamento da transação.
  1. O Graph Node verifica continuamente o Ethereum em busca de novos blocos e os dados do seu subgrafo que eles podem conter.
  1. O Graph Node encontra eventos Ethereum para seu subgrafo nesses blocos e executa os manipuladores de mapeamento que você forneceu. O mapeamento é um módulo WASM que cria ou atualiza as entidades de dados que o Graph Node armazena em resposta a eventos Ethereum.
  1. O aplicativo descentralizado consulta o Graph Node em busca de dados indexados do blockchain, usando o GraphQL endpoint do nó. O Graph Node, por sua vez, traduz as consultas do GraphQL em consultas para seu armazenamento de dados subjacente para buscar esses dados, fazendo uso dos recursos de indexação do armazenamento. O aplicativo descentralizado exibe esses dados em uma interface de usuário avançada para usuários finais, que eles usam para emitir novas transações no Ethereum. O ciclo se repete.