Developing > Perguntas Frequentes dos Programadores

Perguntas Frequentes dos Programadores

Reading time: 7 min

1. O que é um subgraph?

Link para esta seção

Um subgraph é uma API personalizada construída em dados de blockchains. Subgraphs são consultados com a linguagem GraphQL e lançados a um Graph Node usando o Graph CLI. Quando lançados e editados à rede descentralizada do The Graph, os Indexadores processam subgraphs e os disponibilizam para serem consultados em query por consumidores de subgraphs.

2. Posso apagar o meu subgraph?

Link para esta seção

Não é possível apagar subgraphs após a sua criação.

3. Posso mudar o nome do meu subgraph?

Link para esta seção

Não. Quando um subgraph é criado, não é possível mudar o seu nome. Pense com cuidado antes de criar o seu subgraph para poder ser facilmente buscável e identificável por outros dapps.

4. Posso mudar a conta do GitHub associada ao meu subgraph?

Link para esta seção

Não. Quando um subgraph é criado, não há mais como mudar a conta do GitHub associada a ele. Pense nisto com cuidado antes de criar o seu subgraph.

5. Eu ainda posso criar um subgraph se os meus contratos inteligentes não tiverem eventos?

Link para esta seção

É altamente recomendado que estruture os seus contratos inteligentes para terem eventos associados com dados que tens interesse de consultar em query. Handlers de eventos no subgraph são ativados por eventos de contratos e são, de longe, a forma mais rápida de conseguir dados úteis.

Se os contratos com os quais trabalha não contêm eventos, o seu subgraph pode usar handlers de chamadas e blocos para ativar o indexing. Porém, isto não é recomendado, porque retarda muito o desempenho do subgraph.

6. É possível lançar um subgraph com o mesmo nome para várias redes?

Link para esta seção

Precisará fazer nomes separados para várias redes. Enquanto não podes ter subgraphs diferentes sob o mesmo nome, há várias maneiras convenientes de ter uma única base de código para várias redes. Leia mais na nossa documentação: Como Relançar um Subgraph

7. Quais são as diferenças entre modelos e fontes de dados?

Link para esta seção

Modelos (templates) permitem criar fontes de dados na hora, enquanto o seu subgraph está no processo de indexação. Pode ser que o seu contrato gerará novos contratos enquanto as pessoas interagem com ele, e como queres saber o formato destes contratos (ABI, eventos, etc.) à vista, pode definir como quer indexá-los em um modelo; e quando gerados, o seu subgraph criará uma fonte de dados dinâmica ao fornecer o endereço do contrato.

Confira a seção "como instanciar um modelo de fontes de dados" em: Modelos de fontes de dados.

8. Como posso garantir que estou a usar a versão mais recente do graph-node para os meus lançamentos locais?

Link para esta seção

Podes executar o seguinte comando:

docker pull graphprotocol/graph-node:latest

NOTA: O docker / docker-compose sempre usará a versão do graph-node que foi puxada na primeira vez que a executou, então é importante fazer isto para garantir que está em dia com a versão mais recente do graph-node.

9. Como chamo uma função de contrato ou acesso uma variável de estado público dos meus mapeamentos de subgraph?

Link para esta seção

Confira o estado Access to smart contract dentro da seção AssemblyScript API.

10. É possível preparar um subgraph através de graph init a partir do graph-cli com dois contratos? Ou devo adicionar, manualmente, outra fonte de dados no subgraph.yaml após executar o graph init?

Link para esta seção

Sim. No próprio comando graph init, é possível adicionar várias fontes de dados ao inserir contratos um após o outro. O comando graph add também pode adicionar uma nova fonte de dados.

11. Quero contribuir ou adicionar um problema no GitHub. Onde posso encontrar os repositórios de código aberto?

Link para esta seção
  • graph-node
  • graph-tooling
  • graph-docs
  • graph-client

12. Qual é a forma recomendada de construir ids "autogeradas" para uma entidade ao lidar com eventos?

Link para esta seção

Se só uma entidade for criada durante o evento e não houver nada melhor disponível, então o hash da transação + o index do log será original. Podes ofuscá-los ao converter aquilo em Bytes e então o colocar pelo crypto.keccak256, mas isto não o fará mais original.

13. Ao escutar vários contratos, é possível selecionar a ordem do contrato para escutar eventos?

Link para esta seção

Dentro de um subgraph, os eventos são sempre processados na ordem em que aparecem nos blocos, mesmo sendo ou não através de vários contratos.

14. É possível diferenciar entre redes (mainnet, Sepolia, local) de dentro de handlers de eventos?

Link para esta seção

Sim. Isto é possível ao importar o graph-ts como no exemplo abaixo:

import { dataSource } from '@graphprotocol/graph-ts'
dataSource.network()
dataSource.address()

15. Vocês apoiam handlers de bloco e chamada no Sepolia?

Link para esta seção

Sim. O Sepolia apoia handlers de blocos, chamadas e eventos. Vale notar que handlers de eventos têm desempenho muito melhor do que os outros dois e têm apoio em todas as redes compatíveis com EVMs.

16. Posso importar ethers.js ou outras bibliotecas JS nos meus mapeamentos de subgraph?

Link para esta seção

Não no momento, já que mapeamentos são escritos em AssemblyScript. Outra solução seria armazenar dados puros em entidades e desempenhar lógicas que requerem bibliotecas JS no cliente.

17. É possível especificar em qual bloco começar a indexação?

Link para esta seção

Sim. dataSources.source.startBlock no arquivo subgraph.yaml especifica o número do bloco que a fonte de dados começa a indexar. Na maioria dos casos, sugerimos usar o bloco no qual o contrato foi criado: Blocos de início

18. Alguma dica para aumentar o desempenho da indexação? O meu subgraph demora muito para sincronizar

Link para esta seção

Sim. Confira o recurso opcional de bloco inicial (start blcok) para começar a indexar do bloco em que o contrato foi lançado: Blocos iniciais

19. Há como consultar diretamente o subgraph para determinar o número do último bloco que ele indexou?

Link para esta seção

Sim! Execute o seguinte comando, com "organization/subgraphName" substituído com a organização sob a qual ele foi publicado e o nome do seu subgraph:

curl -X POST -d '{ "query": "{indexingStatusForCurrentVersion(subgraphName: \"organization/subgraphName\") { chains { latestBlock { hash number }}}}"}' https://api.thegraph.com/index-node/graphql

20. Quais redes são apoiadas pelo The Graph?

Link para esta seção

Veja a lista das redes apoiadas aqui.

21. É possível duplicar um subgraph para outra conta ou ponto final sem relançá-lo?

Link para esta seção

Deve relançar o subgraph, mas se a ID do subgraph (hash IPFS) não mudar, ele não precisará sincronizar do começo.

22. É possível usar a Apollo Federation em cima do graph-node?

Link para esta seção

A Federation ainda tem apoio, mas queremos apoiá-la no futuro. No momento, vale usar costura de schemas no cliente ou através de um serviço proxy.

23. Há um limite de quantos objetos o Graph pode retornar por consulta?

Link para esta seção

Normalmente, respostas a consultas são limitadas a 100 itens por coleção. Se quiser receber mais, pode subir para até 1000 itens por coleção; além disto, pode paginar com:

someCollection(first: 1000, skip: <number>) { ... }

24. Se a frontend do meu dApp usa o The Graph para consultas, eu preciso escrever a minha chave de query diretamente no frontend? E se pagarmos taxas de query para utilizadores — utilizadores maliciosos podem aumentar muito estas taxas?

Link para esta seção

Atualmente, a abordagem recomendada para um dApp é adicionar a chave ao frontend e expô-la para utilizadores finais. Dito isto, pode limitar aquela chave a um hostname, como seudapp.io e um subgraph. A gateway está atualmente a ser executada pelo Edge & Node. Parte da responsabilidade de uma gateway é monitorar comportamentos abusivos e bloquear tráfego de clientes maliciosos.

25. Onde encontro o meu subgraph atual no serviço hospedado?

Link para esta seção

Vá para o Serviço Hospedado para achar subgraphs lançados por você ou outros ao Serviço Hospedado. Veja aqui.

26. O serviço hospedado começará a cobrar taxas de query?

Link para esta seção

The Graph nunca cobrará pelo Serviço Hospedado. Este é um protocolo descentralizado, e cobrar por um serviço centralizado não condiz com os valores do Graph. O Serviço Hospedado sempre foi um degrau temporário para chegar à rede descentralizada; os programadores terão tempo suficiente para migrar à rede descentralizada quando estiverem preparados.

27. Como atualizar um subgraph na mainnet?

Link para esta seção

Se for um programador de subgraph, você pode lançar uma nova versão do seu subgraph ao Subgraph Studio com a CLI. O subgraph será privado até lá, mas se estiver contente com ele, você pode publicá-lo no Graph Explorer descentralizado. Isto criará uma nova versão do seu subgraph em que Curadores podem começar a sinalizar.

28. Em qual ordem os handlers de evento, bloco e chamada são ativados para uma fonte de dados?

Link para esta seção

Primeiro, handlers de eventos e chamadas são organizados pelo índice de transações dentro do bloco. Handlers de evento e chamada dentro da mesma transação são organizados com uma convenção: handlers de eventos primeiro e depois handlers de chamadas, com cada tipo a respeitar a ordem em que são definidos no manifest. Handlers de blocos são executados após handlers de eventos e chamadas, na ordem em que são definidos no manifest. Estas regras de organizações estão sujeitas a mudanças.

Com a criação de novas fontes de dados dinâmicas, os handlers definidos para fontes de dados dinâmicas só começarão a processar após o processamento dos handlers das fontes, e se repetirão na mesma sequência sempre que acionados.

Editar página

Anterior
Estrutura de Testes de Unidades
Próximo
Perguntas frequentes sobre subgraphs movidos por substreams
Editar página