ザ・グラフ(GRT)を使ってみた!初心者向け実体験レポート
本レポートは、ブロックチェーンデータ分析ツール「ザ・グラフ(The Graph)」を、プログラミング経験の浅い初心者でも理解できるよう、実際に使用した際の体験を詳細に記述したものです。ザ・グラフは、イーサリアムをはじめとするブロックチェーン上のデータを効率的にクエリするためのインデックス作成プロトコルであり、DeFi(分散型金融)アプリケーションやNFT(非代替性トークン)関連サービスの開発において不可欠な存在となりつつあります。本レポートでは、ザ・グラフの基本的な概念から、実際にサブグラフをデプロイし、クエリを実行するまでの手順を、具体的なコード例を交えながら解説します。
1. ザ・グラフとは? – ブロックチェーンデータのインデックス作成プロトコル
ブロックチェーンは、その分散性と不変性から、様々なアプリケーションの基盤として注目されています。しかし、ブロックチェーン上のデータは、そのままではアクセスが困難であり、アプリケーション開発のボトルネックとなることがあります。ザ・グラフは、この課題を解決するために開発された、ブロックチェーンデータのインデックス作成プロトコルです。
従来のデータベースのように、ザ・グラフはブロックチェーン上のイベントや状態変化をインデックス化し、GraphQLというクエリ言語を用いて効率的にデータを取得することを可能にします。これにより、アプリケーション開発者は、複雑なブロックチェーンデータを簡単に利用できるようになり、より高度なアプリケーションの開発に集中することができます。
ザ・グラフの主な特徴は以下の通りです。
- 分散型: ザ・グラフは、グローバルに分散されたネットワークによって運用されます。
- オープンソース: ザ・グラフは、オープンソースのプロジェクトであり、誰でも貢献することができます。
- GraphQL: ザ・グラフは、GraphQLという強力なクエリ言語を使用します。
- サブグラフ: ザ・グラフは、特定のブロックチェーンデータをインデックス化するための「サブグラフ」という概念を導入しています。
2. ザ・グラフの主要な構成要素 – サブグラフ、インデクサー、クエリ
ザ・グラフを理解するためには、その主要な構成要素である「サブグラフ」、「インデクサー」、「クエリ」について理解することが重要です。
2.1 サブグラフ (Subgraph)
サブグラフは、特定のブロックチェーンデータをインデックス化するための定義ファイルです。この定義ファイルには、どのブロックチェーンのイベントや状態変化をインデックス化するか、どのようにデータを構造化するか、GraphQLクエリをどのように定義するかなどが記述されます。サブグラフは、YAML形式で記述され、ザ・グラフネットワークにデプロイされます。
2.2 インデクサー (Indexer)
インデクサーは、サブグラフを読み込み、ブロックチェーン上のデータをインデックス化するノードです。インデクサーは、ザ・グラフネットワークに参加し、サブグラフのインデックス化作業を行うことで報酬を得ることができます。インデクサーは、ブロックチェーンのノードと同期し、新しいイベントや状態変化を検知すると、サブグラフの定義に従ってデータをインデックス化します。
2.3 クエリ (Query)
クエリは、GraphQLクエリ言語を用いて、インデックス化されたブロックチェーンデータにアクセスするためのリクエストです。クエリは、ザ・グラフネットワークに送信され、インデクサーによって処理されます。インデクサーは、クエリの結果を返します。GraphQLは、必要なデータのみを効率的に取得できるため、ブロックチェーンデータのアクセス効率を大幅に向上させることができます。
3. サブグラフの作成とデプロイ – 実践的なステップバイステップガイド
実際にザ・グラフを使用して、サブグラフを作成し、デプロイする手順を解説します。ここでは、簡単な例として、ERC20トークンのトランザクションをインデックス化するサブグラフを作成します。
3.1 開発環境の準備
まず、ザ・グラフの開発環境を準備します。以下のツールをインストールする必要があります。
- Node.js
- npm または yarn
- Graph CLI
Graph CLIは、以下のコマンドでインストールできます。
npm install -g @graphprotocol/graph-cli
3.2 サブグラフの初期化
Graph CLIを使用して、サブグラフを初期化します。以下のコマンドを実行します。
graph init erc20-subgraph
このコマンドは、新しいディレクトリ「erc20-subgraph」を作成し、サブグラフの基本的なファイル構造を生成します。
3.3 スキーマの定義 (schema.graphql)
サブグラフのスキーマを定義します。スキーマは、GraphQLクエリで使用されるデータ型を定義します。schema.graphqlファイルに、以下の内容を記述します。
type Transaction @entity {
id: ID!
blockNumber: Int!
from: String!
to: String!
value: BigInt!
timestamp: BigInt!
}
3.4 マッピングの定義 (mapping.ts)
マッピングは、ブロックチェーン上のイベントや状態変化を、GraphQLエンティティに変換するロジックを記述します。mapping.tsファイルに、以下の内容を記述します。
import { Transaction } from "../generated/schema";
import { Transfer } from "../generated/ERC20/ERC20";
export function handleTransfer(event: Transfer):
void {
let transaction = new Transaction(
event.transaction.hash.toHex() + "-" + event.logIndex.toString()
);
transaction.blockNumber = event.block.number;
transaction.from = event.from.toHex();
transaction.to = event.to.toHex();
transaction.value = event.value;
transaction.timestamp = event.block.timestamp;
transaction.save();
}
3.5 サブグラフの設定 (subgraph.yaml)
サブグラフの設定ファイルを編集します。subgraph.yamlファイルに、以下の内容を記述します。
specVersion: '0.0.2'
kind: 'single'
name: 'erc20-subgraph'
network: 'ethereum'
source:
name: 'OpenZeppelin/ERC20'
address: '0xdAC17F958D2ee523a2206206994597C13D831ec7'
startBlock: 10000000
mapping:
kind: 'ethereum/events'
apiVersion: '0.0.1'
eventHandlers:
- event: 'Transfer(address,address,uint256)'
handler: 'handleTransfer'
3.6 サブグラフのデプロイ
サブグラフをザ・グラフネットワークにデプロイします。以下のコマンドを実行します。
graph deploy --node https://api.thegraph.com/deploy/ erc20-subgraph
このコマンドは、サブグラフをデプロイし、APIエンドポイントを返します。
4. クエリの実行 – GraphQL Playgroundの活用
デプロイされたサブグラフに対して、GraphQLクエリを実行します。ザ・グラフネットワークは、GraphQL Playgroundを提供しており、これを使用してクエリを簡単に実行することができます。APIエンドポイントにアクセスし、GraphQL Playgroundを開きます。
例えば、以下のクエリを実行することで、ERC20トークンのすべてのトランザクションを取得することができます。
query {
transactions {
id
blockNumber
from
to
value
timestamp
}
}
5. まとめ – ザ・グラフの可能性と今後の展望
本レポートでは、ザ・グラフの基本的な概念から、実際にサブグラフを作成し、デプロイし、クエリを実行するまでの手順を解説しました。ザ・グラフは、ブロックチェーンデータのアクセス効率を大幅に向上させ、DeFiアプリケーションやNFT関連サービスの開発を加速させる可能性を秘めています。今後、ザ・グラフネットワークのさらなる発展と、より多くの開発者による貢献によって、ブロックチェーンエコシステムの発展に大きく貢献することが期待されます。特に、複雑なデータ構造を持つDeFiプロトコルや、大量のトランザクションが発生するNFTマーケットプレイスにおいて、ザ・グラフの重要性はますます高まっていくでしょう。また、ザ・グラフの技術は、他のブロックチェーンネットワークにも応用可能であり、その汎用性の高さも魅力の一つです。初心者の方でも、ザ・グラフを学ぶことで、ブロックチェーンデータの分析や活用に貢献できるようになるでしょう。