ザ・グラフ(GRT)のチュートリアルステップ完全版!
ザ・グラフ(The Graph)は、ブロックチェーンデータをインデックス化し、クエリ可能なAPIを提供する分散型プロトコルです。これにより、開発者はブロックチェーン上のデータを効率的に取得し、dApps(分散型アプリケーション)の構築を容易にすることができます。本チュートリアルでは、ザ・グラフの基本的な概念から、サブグラフの作成、デプロイ、クエリまで、一連のステップを詳細に解説します。
1. ザ・グラフの基礎知識
ザ・グラフは、ブロックチェーンのデータを整理し、アクセス可能な形式に変換する役割を担います。従来のブロックチェーンデータは、トランザクション履歴として保存されるため、特定の情報を抽出するには、ブロックチェーン全体をスキャンする必要があります。ザ・グラフは、この問題を解決するために、ブロックチェーンデータをインデックス化し、GraphQL APIを通じてクエリ可能な形式で提供します。
1.1 主要なコンポーネント
- Indexer: ブロックチェーンデータを読み込み、サブグラフの定義に基づいてインデックスを作成するノードです。
- Graph Node: インデックスされたデータを保存し、GraphQL APIを提供します。
- Subgraph: ブロックチェーンデータから抽出するデータの定義と、そのデータのクエリ方法を記述したものです。
- GraphQL API: サブグラフによって定義されたデータをクエリするためのインターフェースです。
1.2 ザ・グラフのメリット
- 効率的なデータアクセス: ブロックチェーン全体をスキャンする必要がなく、必要なデータのみを効率的に取得できます。
- 開発の簡素化: GraphQL APIを通じて、複雑なブロックチェーンデータを簡単にクエリできます。
- スケーラビリティ: 分散型のインデックス化プロトコルにより、高いスケーラビリティを実現します。
- dAppsのパフォーマンス向上: データアクセスの効率化により、dAppsのパフォーマンスを向上させることができます。
2. 開発環境の準備
ザ・グラフの開発を始めるには、以下のツールをインストールする必要があります。
- Node.js: JavaScriptの実行環境です。バージョン14以上を推奨します。
- npm または Yarn: Node.jsのパッケージマネージャーです。
- Graph CLI: ザ・グラフのコマンドラインインターフェースです。
Graph CLIのインストール方法:
npm install -g @graphprotocol/graph-cli
インストール後、以下のコマンドでバージョンを確認できます。
graph --version
3. サブグラフの作成
サブグラフは、ブロックチェーンデータから抽出するデータの定義と、そのデータのクエリ方法を記述したものです。サブグラフを作成するには、以下の手順に従います。
3.1 プロジェクトの初期化
まず、新しいディレクトリを作成し、そのディレクトリに移動します。
mkdir my-subgraph
cd my-subgraph
次に、Graph CLIを使用して、新しいサブグラフプロジェクトを初期化します。
graph init my-subgraph
このコマンドは、サブグラフの基本的な構成ファイル(manifest.json、schema.graphql)を作成します。
3.2 スキーマの定義 (schema.graphql)
スキーマファイル(schema.graphql)は、サブグラフが扱うデータの型を定義します。GraphQLの型システムを使用して、データの構造を記述します。
例:Ethereumブロックチェーンのトランザクションデータを扱うサブグラフの場合
type Transaction @entity {
id: ID!
blockNumber: Int!
from: String!
to: String!
value: BigInt!
timestamp: Int!
}
この例では、Transactionというエンティティを定義し、そのエンティティが持つ属性(id、blockNumber、from、to、value、timestamp)を定義しています。
3.3 マッピングの定義 (src/mapping.ts)
マッピングファイル(src/mapping.ts)は、ブロックチェーンのイベントをサブグラフのエンティティにマッピングするロジックを記述します。TypeScriptを使用して、イベントハンドラーを定義します。
例:トランザクションイベントをTransactionエンティティにマッピングする場合
import { Transaction } from "../generated/schema";
import { Transfer } from "../generated/MyContract/MyContract";
export function handleTransfer(event: Transfer):
void {
let transaction = new Transaction(
event.transaction.hash.toHex() // IDとしてトランザクションハッシュを使用
);
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();
}
この例では、Transferイベントが発生した際に、Transactionエンティティを作成し、イベントのデータをエンティティの属性にマッピングしています。
3.4 マニフェストファイルの編集 (manifest.json)
マニフェストファイル(manifest.json)は、サブグラフに関するメタデータ(名前、説明、コントラクトアドレス、データソースなど)を記述します。
例:
{
"name": "my-subgraph",
"version": "0.1.0",
"description": "Ethereumトランザクションデータをインデックス化するサブグラフ",
"repository": "",
"contracts": [
{
"name": "MyContract",
"address": "0x...", // コントラクトアドレス
"startBlock": 0
}
],
"dataSources": [
{
"kind": "ethereum/contracts",
"name": "MyContract",
"network": "mainnet",
"source": "0x...", // コントラクトアドレス
"abis": [
"MyContract.json"
]
}
]
}
4. サブグラフのデプロイ
サブグラフを作成したら、ザ・グラフネットワークにデプロイする必要があります。デプロイするには、以下の手順に従います。
4.1 Graph Nodeの起動
ローカル環境でサブグラフをテストするには、Graph Nodeを起動します。
graph node
4.2 サブグラフのデプロイ
Graph CLIを使用して、サブグラフをGraph Nodeにデプロイします。
graph deploy --node http://localhost:8000 my-subgraph
このコマンドは、サブグラフをコンパイルし、Graph Nodeにデプロイします。デプロイが完了すると、サブグラフのGraphQL APIのエンドポイントが表示されます。
5. GraphQL APIによるクエリ
サブグラフがデプロイされたら、GraphQL APIを使用してデータをクエリできます。GraphQL APIは、スキーマファイル(schema.graphql)で定義された型に基づいて、クエリを実行できます。
例:すべてのトランザクションをクエリする場合
query {
transactions {
id
blockNumber
from
to
value
timestamp
}
}
このクエリを実行すると、サブグラフにインデックス化されたすべてのトランザクションのデータが返されます。
まとめ
本チュートリアルでは、ザ・グラフの基本的な概念から、サブグラフの作成、デプロイ、クエリまで、一連のステップを詳細に解説しました。ザ・グラフは、ブロックチェーンデータのアクセスを効率化し、dAppsの開発を容易にする強力なツールです。本チュートリアルを参考に、ザ・グラフを活用して、革新的なdAppsを開発してください。