O Graph é um protocolo para construção rápida de aplicativos descentralizados (dApps) em Ethereum e IPFS usando GraphQL.
Graph Node é uma implementação Rust de código aberto que origina eventos do blockchain Ethereum para atualizar deterministicamente um armazenamento de dados que pode ser consultado por meio do endpoint GraphQL.
Para obter instruções detalhadas e mais contexto, consulte o Guia de primeiros passos.
Para construir e executar este projeto você precisa ter o seguinte instalado em seu sistema:
rustfmt
, que faz parte da instalação padrão do Rust, é um requisito de tempo de construção.Para dados da rede Ethereum, você pode executar seu próprio nó Ethereum ou usar um provedor de nó Ethereum de sua escolha.
Requisitos mínimos de hardware:
cargo
, são necessários 8 GB de RAM.A maneira mais fácil de executar um Graph Node é usar a configuração oficial do Docker Compose. Isso iniciará um banco de dados Postgres, um nó IPFS e um nó Graph. Siga as instruções aqui.
Este é um exemplo rápido para mostrar um nó gráfico funcional. É um subgráfico para Gravatars.
ipfs init
seguido por ipfs daemon
.initdb -D .postgres -E UTF8 --locale=C
seguido por pg_ctl -D .postgres -l logfile start
createdb graph-node
.sudo apt-get install -y clang libpq-dev libssl-dev pkg-config
yarn
yarn codegen
cargo build
.Depois de configurar todas as dependências, você pode executar o seguinte:
cargo run -p graph-node --release --
--postgres-url postgresql://USERNAME[:PASSWORD]@localhost:5432/graph-node
--ethereum-rpc NETWORK_NAME:[CAPABILITIES]:URL
--ipfs 127.0.0.1:5001
Experimente o nome de usuário do seu sistema operacional como USERNAME
e PASSWORD
. Para obter detalhes sobre como configurar a string de conexão, verifique a documentação do Postgres. graph-node
usa algumas extensões do Postgres. Se o usuário Postgres com o qual você executa graph-node
for um superusuário, graph-node
ativará essas extensões ao inicializar o banco de dados. Se o usuário do Postgres não for um superusuário, você precisará criar as extensões manualmente, pois somente os superusuários têm permissão para fazer isso. Para criá-los você precisa se conectar como superusuário, que em muitas instalações é o usuário postgres
:
psql -q -X -U < SUPERUSER > graph-node << EOF
create extension pg_trgm;
create extension pg_stat_statements;
create extension btree_gist;
create extension postgres_fdw;
grant usage on foreign data wrapper postgres_fdw to <USERNAME>;
EOF
Isso também ativará uma interface GraphiQL em http://127.0.0.1:8000/
.
yarn create-local
Então você pode implantar o subgráfico:
yarn deploy-local
Isso construirá e implantará o subgráfico no nó do gráfico. Deve começar a indexar o subgráfico imediatamente.
USAGE:
graph-node [FLAGS] [OPTIONS] --ethereum-ipc <NETWORK_NAME:FILE> --ethereum-rpc <NETWORK_NAME:URL> --ethereum-ws <NETWORK_NAME:URL> --ipfs <HOST:PORT> --postgres-url <URL>
FLAGS:
--debug Enable debug logging
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--admin-port <PORT> Port for the JSON-RPC admin server [default: 8020]
--elasticsearch-password <PASSWORD>
Password to use for Elasticsearch logging [env: ELASTICSEARCH_PASSWORD]
--elasticsearch-url <URL>
Elasticsearch service to write subgraph logs to [env: ELASTICSEARCH_URL=]
--elasticsearch-user <USER> User to use for Elasticsearch logging [env: ELASTICSEARCH_USER=]
--ethereum-ipc <NETWORK_NAME:[CAPABILITIES]:FILE>
Ethereum network name (e.g. 'mainnet'), optional comma-separated capabilities (eg full,archive), and an Ethereum IPC pipe, separated by a ':'
--ethereum-polling-interval <MILLISECONDS>
How often to poll the Ethereum node for new blocks [env: ETHEREUM_POLLING_INTERVAL=] [default: 500]
--ethereum-rpc <NETWORK_NAME:[CAPABILITIES]:URL>
Ethereum network name (e.g. 'mainnet'), optional comma-separated capabilities (eg 'full,archive'), and an Ethereum RPC URL, separated by a ':'
--ethereum-ws <NETWORK_NAME:[CAPABILITIES]:URL>
Ethereum network name (e.g. 'mainnet'), optional comma-separated capabilities (eg `full,archive), and an Ethereum WebSocket URL, separated by a ':'
--node-id <NODE_ID>
A unique identifier for this node instance. Should have the same value between consecutive node restarts [default: default]
--http-port <PORT> Port for the GraphQL HTTP server [default: 8000]
--ipfs <HOST:PORT> HTTP address of an IPFS node
--postgres-url <URL> Location of the Postgres database used for storing entities
--subgraph <[NAME:]IPFS_HASH> Name and IPFS hash of the subgraph manifest
--ws-port <PORT> Port for the GraphQL WebSocket server [default: 8001]
Os argumentos da linha de comando geralmente são tudo o que é necessário para executar uma instância graph-node
. Para usos avançados, vários aspectos do graph-node
podem ser configurados ainda mais por meio de variáveis de ambiente. Instâncias graph-node
muito grandes também podem dividir o trabalho de consulta e indexação em vários bancos de dados.
node
— Um nó gráfico local.graph
— Uma biblioteca que fornece características para componentes do sistema e tipos de dados comuns.core
— Uma biblioteca que fornece implementações para componentes principais, usada por todos os nós.chain/ethereum
— Uma biblioteca com componentes para obtenção de dados do Ethereum.graphql
— Uma implementação GraphQL com geração de esquema de API, introspecção e muito mais.mock
— Uma biblioteca que fornece implementações simuladas para todos os componentes do sistema.runtime/wasm
— Uma biblioteca para executar scripts de extração de dados WASM.server/http
— Uma biblioteca que fornece um servidor GraphQL sobre HTTP.store/postgres
— Uma loja Postgres com uma interface compatível com GraphQL e logs de auditoria. ? = Em andamento
? = Recurso concluído. Testes adicionais necessários.
✅ = Recurso concluído
Recurso | Status |
---|---|
Ethereum | |
Indexando eventos de contrato inteligente | ✅ |
Lidar com reorganizações da cadeia | ✅ |
Mapeamentos | |
Mapeamentos baseados em WASM | ✅ |
Conjunto de ferramentas TypeScript para WASM | ✅ |
Tipos TypeScript gerados automaticamente | ✅ |
GráficoQL | |
Consultar entidades por ID | ✅ |
Consultar coleções de entidades | ✅ |
Paginação | ✅ |
Filtragem | ✅ |
Filtragem baseada em blocos | ✅ |
Relacionamentos de entidade | ✅ |
Assinaturas | ✅ |
Verifique CONTRIBUTING.md para ver o fluxo de desenvolvimento e as convenções que usamos. Aqui está uma lista de bons primeiros problemas.
Copyright © 2018-2019 Graph Protocol, Inc. e colaboradores.
O Graph tem licença dupla sob a licença MIT e a licença Apache, versão 2.0.
A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para saber o idioma específico que rege as permissões e limitações da Licença.