ザ・グラフ(GRT)の分散型アプリ構築手順をまとめて紹介
ザ・グラフ(The Graph)は、イーサリアムやその他のブロックチェーンからデータを効率的にクエリするための分散型プロトコルです。分散型アプリケーション(dApps)は、ブロックチェーン上のデータを活用することで、透明性、セキュリティ、改ざん耐性といったメリットを得られます。しかし、ブロックチェーンのデータは構造化されておらず、直接クエリするには複雑な処理が必要となるため、ザ・グラフのようなインデックス作成サービスが不可欠となります。本稿では、ザ・グラフを用いてdAppsを構築するための手順を詳細に解説します。
1. ザ・グラフの基礎知識
ザ・グラフは、以下の主要なコンポーネントで構成されています。
- Graph Node: ブロックチェーンのデータをインデックス化し、クエリ可能な状態に変換するノードです。
- GraphQL API: インデックス化されたデータにアクセスするための標準的なクエリ言語であるGraphQLを使用します。
- Subgraph: 特定のブロックチェーンデータセットを定義し、クエリ可能なAPIとして公開するための設定ファイルです。
- Graph Protocol Network: Graph Nodeを運営し、データの可用性と信頼性を確保する分散型ネットワークです。
Subgraphは、ザ・グラフのエコシステムにおける中心的な役割を果たします。Subgraphを作成することで、開発者はブロックチェーンデータを効率的にクエリするためのカスタムAPIを定義できます。Subgraphは、スマートコントラクトのイベントや状態変化を監視し、関連するデータをGraphQLスキーマにマッピングします。
2. 開発環境の準備
ザ・グラフを用いたdApps開発を開始するには、以下のツールと環境を準備する必要があります。
- Node.jsとnpm: JavaScriptの実行環境とパッケージマネージャーです。
- Graph CLI: ザ・グラフのSubgraphを作成、デプロイ、管理するためのコマンドラインインターフェースです。
- テキストエディタまたはIDE: Subgraphの設定ファイル(schema.graphqlとmapping.ts)を編集するためのツールです。
- GanacheまたはHardhat: ローカルのブロックチェーン環境を構築するためのツールです。
Graph CLIのインストールは、以下のコマンドで実行できます。
npm install -g @graphprotocol/graph-cli
3. Subgraphの作成
Subgraphの作成は、Graph CLIのinitコマンドを使用して行います。
graph init my-subgraph
このコマンドは、my-subgraphという名前の新しいディレクトリを作成し、Subgraphに必要な基本的なファイル(schema.graphql、mapping.ts、graph.yaml)を生成します。
3.1. GraphQLスキーマの定義 (schema.graphql)
schema.graphqlファイルは、Subgraphが公開するGraphQL APIのスキーマを定義します。スキーマは、クエリ可能なデータ型とフィールドを記述します。例えば、ERC20トークンの情報をクエリするためのスキーマは以下のようになります。
type Token @entity {
id: ID!
symbol: String!
name: String!
totalSupply: BigInt!
}
type Transfer @entity {
id: ID!
from: String!
to: String!
value: BigInt!
blockNumber: BigInt!
}
このスキーマは、TokenとTransferという2つのエンティティを定義しています。Tokenエンティティは、トークンのID、シンボル、名前、総供給量を格納します。Transferエンティティは、トークンの送金イベントに関する情報を格納します。
3.2. マッピングファイルの作成 (mapping.ts)
mapping.tsファイルは、ブロックチェーンのイベントとGraphQLスキーマのエンティティをマッピングするロジックを記述します。このファイルでは、スマートコントラクトのイベントをリッスンし、関連するデータをGraphQLエンティティに変換します。例えば、ERC20トークンの送金イベントを処理するマッピングは以下のようになります。
import { Transfer } from "../generated/schema";
import { ERC20 } from "../generated/ERC20";
export function handleTransfer(event: ERC20_Transfer):
void {
let transfer = new Transfer(
event.transaction.hash.toHex() + "-" + event.logIndex.toString()
);
transfer.from = event.params.from.toHex();
transfer.to = event.params.to.toHex();
transfer.value = event.params.value;
transfer.blockNumber = event.block.number;
transfer.save();
}
このマッピングは、ERC20_Transferイベントをリッスンし、送金イベントに関する情報をTransferエンティティに格納します。
3.3. 設定ファイルの編集 (graph.yaml)
graph.yamlファイルは、Subgraphのメタデータと設定を定義します。このファイルには、Subgraphの名前、説明、スマートコントラクトのアドレス、データソースなどが含まれます。例えば、ERC20トークンのSubgraphの設定ファイルは以下のようになります。
specVersion: '0.0.0'
version: 0.1.0
name: erc20-subgraph
description: Indexer for ERC20 tokens
repository:
url: https://github.com/your-username/erc20-subgraph
dataSources:
- kind: ethereum
name: ERC20
network: mainnet
source:
address: "0xdAC17F958D2ee523a2206206994597C13D831ec7"
abi: ERC20
mapping:
kind: ethereum/events
apiVersion: 0.0.7
eventHandlers:
- event: Transfer(indexed address,indexed address,uint256)
handler: handleTransfer
この設定ファイルは、ERC20トークンのスマートコントラクトのアドレスとABIを指定し、TransferイベントをリッスンしてhandleTransfer関数を呼び出すように設定しています。
4. Subgraphのデプロイとクエリ
Subgraphを作成したら、ザ・グラフネットワークにデプロイして、GraphQL APIとして公開できます。Subgraphのデプロイは、Graph CLIのdeployコマンドを使用して行います。
graph deploy my-subgraph --ipfs
このコマンドは、SubgraphをIPFSにアップロードし、ザ・グラフネットワークにデプロイします。デプロイが完了すると、SubgraphのGraphQL APIのエンドポイントが提供されます。このエンドポイントを使用して、Subgraphにクエリを実行できます。
例えば、トークンの総供給量をクエリするGraphQLクエリは以下のようになります。
query {
token {
totalSupply
}
}
このクエリは、Subgraphに定義されたTokenエンティティのtotalSupplyフィールドを返します。
5. 高度な機能と最適化
ザ・グラフは、より複雑なdAppsを構築するための高度な機能を提供しています。
- データソースの追加: 複数のスマートコントラクトやブロックチェーンからデータをインデックス化できます。
- カスタムエンティティの定義: GraphQLスキーマにカスタムエンティティを追加して、より複雑なデータ構造を表現できます。
- フィルターと変換: マッピングファイルでデータをフィルターしたり、変換したりできます。
- サブグラフの合成: 複数のサブグラフを組み合わせて、より複雑なクエリを実行できます。
Subgraphのパフォーマンスを最適化するために、以下の点に注意する必要があります。
- 効率的なマッピング: マッピングファイルで不要な処理を避け、効率的なデータ変換を行うようにします。
- 適切なインデックス: GraphQLスキーマで適切なインデックスを定義して、クエリのパフォーマンスを向上させます。
- データソースの最適化: データソースの選択と設定を最適化して、インデックス化の効率を向上させます。
まとめ
ザ・グラフは、ブロックチェーンデータを効率的にクエリするための強力なツールです。本稿では、ザ・グラフを用いてdAppsを構築するための基本的な手順を解説しました。Subgraphの作成、デプロイ、クエリ、高度な機能、最適化などを理解することで、開発者はブロックチェーンデータを活用した革新的なdAppsを構築できます。ザ・グラフのエコシステムは常に進化しており、新しい機能やツールが追加されています。最新のドキュメントやコミュニティリソースを参照して、ザ・グラフの可能性を最大限に引き出してください。