初心者でもわかるザ・グラフ(GRT)の始め方ガイド
ザ・グラフ(GRT)は、ブロックチェーンデータのインデックス作成とクエリを行うためのオープンソースのプロトコルです。分散型アプリケーション(dApps)開発者にとって、ブロックチェーン上の情報を効率的に取得し、利用するための重要なツールとなっています。本ガイドでは、GRTの基本的な概念から、開発環境の構築、スマートコントラクトのデプロイ、そしてデータのクエリ方法まで、初心者でも理解できるように詳細に解説します。
1. GRTとは?
GRTは、ブロックチェーンのデータを効率的に検索・利用するためのインデックス作成プロトコルです。従来のブロックチェーンデータへのアクセスは、ノード全体をスキャンする必要があり、時間とリソースを消費していました。GRTは、この問題を解決するために、ブロックチェーンデータをインデックス化し、GraphQL APIを通じて高速かつ効率的にデータを提供します。これにより、dApps開発者は、複雑なブロックチェーンデータの処理を簡素化し、より迅速にアプリケーションを開発することができます。
1.1 GRTの主要なコンポーネント
- Indexer: ブロックチェーンデータを読み込み、インデックスを作成するノードです。Indexerは、Subgraphの定義に基づいてデータをインデックス化します。
- Subgraph: ブロックチェーン上のデータの構造を定義するマニフェストファイルです。Subgraphは、どのデータをインデックス化するか、どのようにデータを変換するか、そしてGraphQL APIを通じてどのようにデータを提供するかを記述します。
- GraphQL API: インデックス化されたデータにアクセスするためのインターフェースです。dApps開発者は、GraphQLクエリを使用して、必要なデータを効率的に取得できます。
- Graph Node: IndexerとGraphQL APIを管理するソフトウェアです。
2. 開発環境の構築
GRTの開発を始めるには、いくつかのツールとソフトウェアをインストールする必要があります。
2.1 必要なツール
- Node.js: JavaScriptランタイム環境です。GRTの開発には、Node.jsのバージョン14以上が必要です。
- npmまたはYarn: Node.jsのパッケージマネージャーです。
- Graph CLI: GRTの開発を支援するコマンドラインインターフェースです。
- GanacheまたはHardhat: ローカルのブロックチェーン環境です。
2.2 Graph CLIのインストール
Graph CLIは、以下のコマンドを使用してインストールできます。
npm install -g @graphprotocol/graph-cli
インストール後、以下のコマンドを実行して、Graph CLIが正しくインストールされていることを確認してください。
graph --version
3. Subgraphの作成と定義
Subgraphは、GRTの心臓部です。Subgraphは、ブロックチェーン上のデータの構造を定義し、GraphQL APIを通じてどのようにデータを提供するかを記述します。Subgraphを作成するには、以下の手順に従ってください。
3.1 Subgraphの初期化
Graph CLIを使用して、新しいSubgraphを初期化します。
graph init my-subgraph
このコマンドは、`my-subgraph`という名前の新しいディレクトリを作成し、Subgraphに必要な基本的なファイル(`schema.graphql`, `mapping.ts`, `assembly/index.ts`, `graph.yaml`)を生成します。
3.2 スキーマの定義 (schema.graphql)
スキーマファイルは、GraphQL APIを通じて公開するデータの型を定義します。例えば、ERC20トークンの情報を公開する場合は、以下のようなスキーマを定義できます。
type Token @entity {
id: ID!
symbol: String!
name: String!
totalSupply: BigInt!
}
query TokenQuery {
token(id: ID!): Token
}
3.3 マッピングの定義 (mapping.ts)
マッピングファイルは、ブロックチェーン上のイベントをGraphQLエンティティに変換するロジックを記述します。例えば、ERC20トークンのTransferイベントを処理する場合は、以下のようなマッピングを定義できます。
import { Transfer } from "../generated/ERC20/ERC20";
import { Token } from "../generated/schema";
export function handleTransfer(event: Transfer):
void {
let token = Token.load(event.address.toHexString());
if (token == null) {
token = new Token(event.address.toHexString());
token.symbol = ""; // TODO: Get symbol from contract
token.name = ""; // TODO: Get name from contract
token.totalSupply = BigInt.fromI32(0);
token.save();
}
}
3.4 graph.yamlの定義
graph.yamlファイルは、Subgraphのメタデータ(データソース、コントラクトアドレス、イベントハンドラなど)を定義します。例えば、ERC20トークンのSubgraphを定義する場合は、以下のようなgraph.yamlを定義できます。
specVersion: '0.0.0'
version: 0.1.0
runtimeVersion: '0.0.0'
name: my-erc20-subgraph
description: A subgraph for ERC20 tokens
repository: https://github.com/your-username/my-erc20-subgraph
dataSources:
- kind: ethereum
name: ERC20
network: mainnet
source:
abis: [ ERC20 ]
mapping:
kind: ethereum/events
apiVersion: 0.0.0
eventHandlers:
- event: Transfer(indexed address,indexed address,uint256)
handler: handleTransfer
4. スマートコントラクトのデプロイ
Subgraphが参照するスマートコントラクトをブロックチェーンにデプロイする必要があります。ローカルのブロックチェーン環境(GanacheまたはHardhat)を使用するか、テストネットまたはメインネットにデプロイすることができます。
5. Subgraphのデプロイとクエリ
SubgraphをGraph Nodeにデプロイし、GraphQL APIを通じてデータをクエリすることができます。
5.1 Subgraphのデプロイ
Graph CLIを使用して、SubgraphをGraph Nodeにデプロイします。
graph deploy --studio my-subgraph
このコマンドは、SubgraphをGraph Nodeにデプロイし、GraphQL APIのエンドポイントを提供します。
5.2 GraphQLクエリの実行
GraphQL APIのエンドポイントを使用して、GraphQLクエリを実行し、インデックス化されたデータにアクセスします。例えば、ERC20トークンの情報を取得する場合は、以下のようなGraphQLクエリを実行できます。
query {
token(id: "0xdAC17F958D2ee523a2206206994597C13D831ec7") {
id
symbol
name
totalSupply
}
}
6. GRTの応用例
GRTは、様々なdAppsで利用されています。例えば、DeFiプロトコル、NFTマーケットプレイス、ゲームなどです。GRTを使用することで、dApps開発者は、ブロックチェーンデータの取得と処理を効率化し、より高度なアプリケーションを開発することができます。
まとめ
本ガイドでは、GRTの基本的な概念から、開発環境の構築、Subgraphの作成と定義、スマートコントラクトのデプロイ、そしてデータのクエリ方法まで、初心者でも理解できるように詳細に解説しました。GRTは、ブロックチェーンデータのインデックス作成とクエリを行うための強力なツールであり、dApps開発者にとって不可欠な存在となっています。本ガイドを参考に、GRTを活用して、革新的なdAppsを開発してください。