blockchainjapan’s blog

旬のブロックチェーンを記事を厳選して提供!


The Graph: どのようなものであり、どのように使うのか?

Using a Subgraph

私たちの身の回りのあらゆるものの機能はデータに依存しており、システムがより良いパフォーマンスを発揮しようとするならば、システムのデータを分析し、必要に応じて修正することが不可欠です。ブロックチェーンと呼ばれる分散型台帳技術の誕生は、データの転送、分析、保存、検索に対処するための新しい方法を提供してくれました。ここで注意したいのは、ブロックチェーンは不変のシステムを持つ分散型技術であり、デジタル通貨を動かす以上の能力を持っていることがわかってきたということです。データの照会やインデックス作成に効率的な能力を持つブロックチェーンベースのプロトコルの一つがこの「The Graph」であり、その登場以来、データツールとしての役割を果たしてきました。

The Graph: What is it?

この革命的なブロックチェーン技術は、それが様々なシステムにもたらす多様なユースケースであり、The GraphはEthereumのブロックチェーンベースの方法でデータのクエリを容易にし、データのインデックス作成を容易にするための分散型フレームワークとして設計されました。ブロックチェーンデータは暗号化されているため、ブロックチェーンネットワークに送信されたデータのクエリを実行することはほぼ不可能です。The Graphのようなプロトコルを実行することで、DAppsに対して直接クエリを行うことが可能になります。例えば、収集品に使用されるDAppがあれば、”What number of cards does XYZ Ethereum account have? “のようなクエリを行うことが可能になります。これは、スマートコントラクトと連動した“balanceof”クエリに対応した読み込みプロトコルを持っているからこそ可能なのです。The Graphのようなインデックスとクエリのフレームワークがなければ、ランダムなDAppにインデックスとクエリを実行させるのは至難の業となります。

チェーン上のデータをインデックス化するのは簡単なプロセスではありません。なぜなら、チェーンの再編成や有限性など、プロセスを複雑にするさまざまな要因があるからです。時間がかかるだけでなく、正確な結果が得られない可能性もあります。しかし、グラフの場合は、ホストサービスがブロックチェーンデータのインデックスを作成する機能を行ってくれるため、非常に簡単で分かりやすいものになります。また、これらのインデックスはサブグラフとも呼ばれており、クエリの処理を容易にするための適切なツールがGraphQLAPIであることも注目に値します。

The Subgraph

このプロトコルは、インデックスを作成するためのブロックチェーンデータを識別し、その保存方法を定義する必要がある場合に使用されます。デプロイ後、グローバルグラフの不可欠な部分となります。サブグラフのプロセスを構成するファイルはいくつかあります:

schema.graphql

このプロンプトは、サブグラフ・ブロックチェーン・データ・ストレージを定義するために利用されます。さらに、インデックス化されたデータがどのようにGraphQLでクエリされるべきかを決定します。

subragph.yam1

これはサブグラフのレコードが含まれるプロセスのYAMLプロトコルを参照します

AssemblyScript Mappings

データからスキーマで定義されたエンティティへの変換を行うために、アセンブリスクリプトのコードが使用されます。

How to Use a Subgraph

データをインデックス化する理由や方法は様々であり、サブグラフを構築して利用する際のステップを知ることが重要です。

Installation

Graph CLIのインストールの実行は必須です。
Graph CLIJavaScriptプログラムであり、https://www.npmjs.com/get-npm (NPM)またはhttps://yarnpkg.com/lang/en/docs/install/#centos-stable (Yarn)のいずれかを事前にインストールする必要があります。

この記事では、yarnを選択したと仮定して、それをインストールするための詳細な手順を説明します: https://github.com/graphprotocol/graph-cli/wiki/Installation-on-different-operating-systems

yarnをインストールした後、次にGraph CLIのインストールを実行します。

これは次を使用して実行できます。
yarnglobal add @ graphprotocol / graph-cli

Create Project

Graph CLIをインストールしたら、最初のサブグラフプロジェクトを作成する必要があります。これは’graph init’(引用符なし)コマンドを実行することで実現できます。

サブグラフプロジェクトを作成するには、https://github.com/graphprotocol/example-subgraph のような既にデプロイされたサブグラフ、または Ethereum ネットワークに含まれるコントラクトから作成します。

コントラクトから作成する場合はこのコマンドを実行します:

graph init \
— from-contract <CONTRACT_ADDRESS> \
[ — network <ETHEREUM_NETWORK>] \
[ — abi <FILE>] \
<GITHUB_USER>/<SUBGRAPH_NAME> [<DIRECTORY>]

上記のコマンドは、スマートコントラクトのイベントインデックス用のサブグラフを作成する際に使用します。

サブグラフをデプロイするには以下の手順が必要です:

Graph Explorer Account

Githubアカウントhttps://github.com/ にサインアップすることが重要です。
GitHubアカウントはエクスプローラー(https://thegraph.com/explorer/)にサインアップするための鍵となります。“Sign up with Github”オプションを使用して認証プロセスに従ってください。

Access Token Storage

エクスプローラーのアカウントを作成するとコントロールパネルにアクセストークンが表示されます。以下のコードを実行してください: graph auth https://api.thegraph.com/deploy/ <ACCESS_TOKEN>
アクセストークンは簡単に検索できるようコンピュータに保存されます。

Create Subgraph

エクスプローラーのコントロールパネルにアクセスし“Add Subgraph”オプションを選択します。フォームに必要なデータを入力します。

Deploy

作成したサブグラフをデプロイして、サブグラフファイルをIPFSにアップロードするとエクスプローラがインデックスを作成します。

サブグラフファイルをビルドするために’yarn build’を使用し、それらを送信するために’yarn deploy’を使用することが重要です。

サブグラフのデプロイが成功すると、エクスプローラーはサブグラフとEthereumブロック間の同期処理を開始します。グラフノードがデータを抽出し終わると、サブグラフのステータスが‘Synced’に変わります。さらに、グラフノードはEthereumブロックに変更がないかどうかをチェックする機能を実行します。

また、変更があった際にサブグラフを再デプロイし“yarn deploy”を使用して更新されたサブグラフの再デプロイを実行することができます。サブグラフは異なるEthereumネットワークに送ることもできますが、その際に大きな課題となるのが、各Ethereumネットワークのコントラクトアドレスです。https://mustache.github.io/https://handlebarsjs.com/ といったシステムを採用することで、コントラクトアドレスをパラメータに変更することができ、複数のネットワークへのサブグラフのデプロイを容易にすることができます。

サブグラフは正常な同期により健全性が確認できるため、グラフノードは定期的にチェックを行いエンドポイントを公開するために使用することができます。