The Graph는 GraphQL을 사용하여 Ethereum 및 IPFS에서 분산형 애플리케이션(dApp)을 빠르게 구축하기 위한 프로토콜입니다.
Graph Node는 GraphQL 엔드포인트를 통해 쿼리할 수 있는 데이터 저장소를 결정적으로 업데이트하기 위해 Ethereum 블록체인을 이벤트 소스로 제공하는 오픈 소스 Rust 구현입니다.
자세한 지침과 자세한 내용은 시작 안내서를 확인하세요.
이 프로젝트를 빌드하고 실행하려면 시스템에 다음이 설치되어 있어야 합니다.
rustfmt
빌드 시 요구 사항입니다.Ethereum 네트워크 데이터의 경우 자체 Ethereum 노드를 실행하거나 원하는 Ethereum 노드 공급자를 사용할 수 있습니다.
최소 하드웨어 요구 사항:
cargo
로 그래프 노드를 구축하려면 8GB RAM이 필요합니다.그래프 노드를 실행하는 가장 쉬운 방법은 공식 Docker 작성 설정을 사용하는 것입니다. 그러면 Postgres 데이터베이스, IPFS 노드 및 Graph 노드가 시작됩니다. 여기의 지침을 따르세요.
이는 작동하는 그래프 노드를 보여주는 빠른 예입니다. Gravatars의 하위 그래프입니다.
ipfs init
실행한 다음 ipfs daemon
실행하세요.initdb -D .postgres -E UTF8 --locale=C
다음에 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
실행합니다.모든 종속성을 설정한 후에는 다음을 실행할 수 있습니다.
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
OS 사용자 이름을 USERNAME
및 PASSWORD
로 사용해 보세요. 연결 문자열 설정에 대한 자세한 내용은 Postgres 설명서를 확인하세요. graph-node
몇 가지 Postgres 확장을 사용합니다. graph-node
실행하는 Postgres 사용자가 슈퍼유저인 경우 graph-node
데이터베이스를 초기화할 때 이러한 확장을 활성화합니다. Postgres 사용자가 슈퍼유저가 아닌 경우 슈퍼유저에게만 확장 기능이 허용되므로 수동으로 확장을 생성해야 합니다. 이를 생성하려면 슈퍼유저로 연결해야 합니다. 이는 많은 설치에서 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
그러면 http://127.0.0.1:8000/
에서 GraphiQL 인터페이스도 실행됩니다.
yarn create-local
그런 다음 하위 그래프를 배포할 수 있습니다.
yarn deploy-local
그러면 그래프 노드에 하위 그래프가 빌드되고 배포됩니다. 즉시 하위 그래프 인덱싱을 시작해야 합니다.
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]
명령줄 인수는 일반적으로 graph-node
인스턴스를 실행하는 데 필요한 전부입니다. 고급 사용을 위해 graph-node
의 다양한 측면을 환경 변수를 통해 추가로 구성할 수 있습니다. 매우 큰 graph-node
인스턴스는 여러 데이터베이스에 걸쳐 쿼리 및 인덱싱 작업을 분할할 수도 있습니다.
node
— 로컬 그래프 노드입니다.graph
— 시스템 구성요소의 특성과 공통 데이터 유형을 제공하는 라이브러리입니다.core
— 모든 노드에서 사용되는 핵심 구성 요소에 대한 구현을 제공하는 라이브러리입니다.chain/ethereum
— 이더리움에서 데이터를 얻기 위한 구성 요소가 포함된 라이브러리입니다.graphql
— API 스키마 생성, 내부 검사 등을 갖춘 GraphQL 구현입니다.mock
— 모든 시스템 구성 요소에 대한 모의 구현을 제공하는 라이브러리입니다.runtime/wasm
— WASM 데이터 추출 스크립트를 실행하기 위한 라이브러리입니다.server/http
— HTTP를 통해 GraphQL 서버를 제공하는 라이브러리입니다.store/postgres
— GraphQL 친화적인 인터페이스와 감사 로그를 갖춘 Postgres 저장소입니다. ? = 진행 중
? = 기능이 완료되었습니다. 추가 테스트가 필요합니다.
✅ = 기능 완료
특징 | 상태 |
---|---|
이더리움 | |
스마트 계약 이벤트 인덱싱 | ✅ |
체인 재구성 처리 | ✅ |
매핑 | |
WASM 기반 매핑 | ✅ |
TypeScript-WASM 툴체인 | ✅ |
자동 생성된 TypeScript 유형 | ✅ |
GraphQL | |
ID로 엔터티 쿼리 | ✅ |
쿼리 엔터티 컬렉션 | ✅ |
쪽수 매기기 | ✅ |
필터링 | ✅ |
블록 기반 필터링 | ✅ |
엔터티 관계 | ✅ |
구독 | ✅ |
우리가 사용하는 개발 흐름과 규칙은 CONTRIBUTING.md를 확인하세요. 다음은 좋은 첫 번째 문제 목록입니다.
저작권 © 2018-2019 Graph Protocol, Inc. 및 기여자.
Graph는 MIT 라이센스와 Apache 라이센스 버전 2.0에 따라 이중 라이센스를 받았습니다.
해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 라이선스에 따라 배포되는 소프트웨어는 명시적이거나 묵시적인 어떠한 종류의 보증이나 조건 없이 "있는 그대로" 배포됩니다. 라이선스에 따른 허가 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요.