Integração de Novas Redes
Reading time: 4 min
Atualmente, Graph Nodes podem indexar dados dos seguintes tipos de chain:
- Ethereum, através de EVM JSON-RPC e
- NEAR, através de um
- Cosmos, através de um
- Arweave, através de um
Se tiver interesse em qualquer destas chains, a integração será uma questão de configuração e testes do Graph Node.
Caso tenha interesse num tipo diferente de chain, será necessária a criação de uma integração nova com o Graph Node. Recomendamos programar um novo Firehose para a chain em questão e então a integração daquele Firehose com o Graph Node. Mais informações abaixo.
1. EVM JSON-RPC
Se a blockchain for equivalente à EVM, e o cliente/node expor a API EVM JSON-RPC, o Graph Node deve ser capaz de indexar a nova chain. Para mais informações, confira .
2. Firehose
Para chains que não são baseadas em EVM, o Graph Node deverá ingerir dados de blockchain através da gRPC e definições de tipos conhecidas. Isto pode ser feito através do , uma nova tecnologia desenvolvida pelo que providencia uma solução de indexação de blockchain altamente escalável com o uso de uma abordagem baseada em arquivos e que prioriza a transmissão de dados. Contacte a caso precise de ajuda com a programação do Firehose.
Enquanto os dois são aptos para subgraphs, um Firehose é sempre exigido para programadores que querem construir com , como a construção de . Além disso, o Firehose gera velocidades de indexação mais rápidas em comparação ao JSON-RPC.
Novos integradores de chain EVM também podem considerar a abordagem com base no Firehose, com consideração aos benefícios do substreams e as suas imensas capacidades paralelas de indexação. Apoiar ambos permite que programadores escolham entre a construção de substreams ou subgraphs para a nova chain.
NOTA: Uma integração baseada no Firehose para chains EVM ainda exigirá que Indexadores executem o node RPC de arquivo da chain para indexar subgraphs corretamente. Isto se deve à inabilidade do Firehose para providenciar estados de contratos inteligentes que são tipicamente acessíveis pelo método RPC eth_call
. (Vale lembrar que eth_calls )
Para que o Graph Node possa ingerir dados de uma chain EVM, o node RPC deve expor os seguintes métodos em EVM JSON-RPC:
eth_getLogs
eth_call
_(para blocos históricos, com EIP-1898 - requer node de arquivo):eth_getBlockByNumber
eth_getBlockByHash
net_version
eth_getTransactionReceipt
, em um pedido conjunto em JSON-RPCtrace_filter
(opcional, para que o Graph Node tenha apoio a call handlers)
Primeiro, prepare o seu ambiente local
- Modifique para ela incluir o nome da nova rede e a URL do EVM JSON-RPC
Não mude o nome do env var. Ele deve permanecer como
ethereum
mesmo se o nome da rede for diferente. - Execute um node IPFS ou use aquele usado pelo The Graph:
Teste a integração com o lançamento local de um subgraph
- Instale o
- Crie um subgraph de exemplo simples. Aqui estão algumas opções:
- Adapte o
subgraph.yaml
resultante com a mudança dodataSources.network
para o mesmo nome passado anteriormente ao Graph Node. - Crie o seu subgraph no Graph Node:
graph create $SUBGRAPH_NAME --node $GRAPH_NODE_ENDPOINT
- Publique o seu subgraph no Graph Node:
graph deploy $SUBGRAPH_NAME --ipfs $IPFS_ENDPOINT --node $GRAPH_NODE_ENDPOINT
O Graph Node deve então sincronizar o subgraph lançado caso não haja erros. Dê um tempo para que ele sincronize, e depois envie alguns queries em GraphQL ao endpoint da API produzido pelos logs.
Integrar uma nova chain também é possível com a abordagem do Firehose. Esta é, atualmente, a melhor opção para chains não-EVM, e necessária para o apoio do substreams. Há mais documentações sobre como o Firehose funciona, como adicionar apoio ao Firehose para uma nova chain, e como integrá-la com o Graph Node. Documentos recomendados para integradores: