Graph は、GraphQL を使用して Ethereum および IPFS 上に分散型アプリケーション (dApps) を迅速に構築するためのプロトコルです。
Graph Node はオープン ソースの Rust 実装であり、イーサリアム ブロックチェーンをイベント ソースとして、GraphQL エンドポイント経由でクエリできるデータ ストアを決定的に更新します。
詳細な手順と詳細なコンテキストについては、「スタート ガイド」を参照してください。
このプロジェクトをビルドして実行するには、システムに次のものをインストールする必要があります。
rustfmt
ビルド時の要件であることに注意してください。Ethereum ネットワーク データの場合、独自の Ethereum ノードを実行することも、選択した Ethereum ノード プロバイダーを使用することもできます。
最小ハードウェア要件:
cargo
でグラフノードを構築するには、8GB RAM が必要です。グラフ ノードを実行する最も簡単な方法は、公式の Docker compose セットアップを使用することです。これにより、Postgres データベース、IPFS ノード、およびグラフ ノードが起動します。ここの指示に従ってください。
これは、動作するグラフ ノードを示す簡単な例です。 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
— Ethereum からデータを取得するためのコンポーネントを含むライブラリ。graphql
— API スキーマ生成、イントロスペクションなどを備えた GraphQL 実装。mock
— すべてのシステム コンポーネントのモック実装を提供するライブラリ。runtime/wasm
— WASM データ抽出スクリプトを実行するためのライブラリ。server/http
— HTTP 経由で GraphQL サーバーを提供するライブラリ。store/postgres
— GraphQL フレンドリーなインターフェイスと監査ログを備えた Postgres ストア。 ? = 進行中
? = 機能が完了しました。追加のテストが必要です。
✅ = 機能が完了しました
特徴 | 状態 |
---|---|
イーサリアム | |
スマートコントラクトイベントのインデックス作成 | ✅ |
チェーンの再編成を処理する | ✅ |
マッピング | |
WASMベースのマッピング | ✅ |
TypeScript から WASM へのツールチェーン | ✅ |
自動生成された TypeScript タイプ | ✅ |
グラフQL | |
IDによるエンティティのクエリ | ✅ |
エンティティコレクションのクエリ | ✅ |
ページネーション | ✅ |
フィルタリング | ✅ |
ブロックベースのフィルタリング | ✅ |
エンティティ関係 | ✅ |
定期購入 | ✅ |
使用する開発フローと規約については、CONTRIBUTING.md を確認してください。以下に、優れた最初の号のリストを示します。
Copyright © 2018-2019 Graph Protocol, Inc. および寄稿者。
Graph は、MIT ライセンスと Apache ライセンス バージョン 2.0 に基づく二重ライセンスを取得しています。
適用される法律で義務付けられている場合、または書面による同意がない限り、ライセンスに基づいて配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証や条件もなく、「現状のまま」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。