ザ・グラフ(GRT)のAPIを使ったクエリ実例集
ザ・グラフ(The Graph, GRT)は、ブロックチェーンデータをインデックス化し、効率的なクエリを可能にする分散型プロトコルです。このドキュメントでは、GRTのAPIを使用して、様々なブロックチェーンデータをクエリするための実例を詳細に解説します。開発者、データアナリスト、ブロックチェーンに関心のあるすべての方々にとって、GRTの可能性を最大限に引き出すための実践的なガイドとなることを目指します。
1. GRT APIの基礎
GRT APIは、GraphQLをベースとしています。GraphQLは、APIから必要なデータのみを要求できるクエリ言語であり、従来のREST APIと比較して、データの取得効率が向上します。GRT APIを使用するには、サブグラフのエンドポイントURLが必要です。サブグラフは、特定のブロックチェーンデータをインデックス化し、クエリ可能な形式で提供するものです。エンドポイントURLは、サブグラフの作成者によって提供されます。
1.1. GraphQLの基本構文
GraphQLクエリは、以下の基本的な構文に従います。
query {
フィールド名 {
サブフィールド名
}
}
queryキーワードは、クエリの開始を示します。フィールド名は、取得したいデータの種類を指定します。サブフィールド名は、フィールド内の特定のデータ要素を指定します。複数のフィールドをクエリするには、フィールド名をカンマで区切ります。
1.2. GRT APIのエンドポイントURLの取得
GRT APIのエンドポイントURLは、The Graph Explorer (https://thegraph.com/explorer/) でサブグラフを検索し、サブグラフの詳細ページで確認できます。サブグラフの詳細ページには、クエリを実行するためのGraphQLエンドポイントURLが記載されています。
2. 実例集
2.1. Ethereumブロックの取得
Ethereumブロックの情報を取得するクエリの例です。ブロックのハッシュ、番号、タイムスタンプを取得します。
query {
blocks(first: 10) {
hash
number
timestamp
}
}
このクエリは、最新の10個のブロックのハッシュ、番号、タイムスタンプを取得します。first: 10は、取得するブロックの数を指定します。
2.2. ERC20トークンのトランザクション履歴の取得
特定のERC20トークンのトランザクション履歴を取得するクエリの例です。トークンアドレス、トランザクションハッシュ、ブロック番号、送信者アドレス、受信者アドレス、トークン量を指定します。
query {
tokenTransfers(where: { token: "0xdAC17F958D2ee523a2206206994597C13D831ec7" }) {
transactionHash
blockNumber
from
to
value
}
}
このクエリは、トークンアドレスが0xdAC17F958D2ee523a2206206994597C13D831ec7 (Tetherトークン) であるすべてのトランザクションの情報を取得します。where: { token: "..." }は、トークンアドレスでフィルタリングするための条件を指定します。
2.3. Uniswap V2の流動性プールの情報の取得
Uniswap V2の流動性プールの情報を取得するクエリの例です。プールアドレス、トークン0のアドレス、トークン1のアドレス、トークン0の量、トークン1の量を取得します。
query {
pools(where: { token0: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", token1: "0xDAC17F958D2ee523a2206206994597C13D831ec7" }) {
id
token0 {
symbol
}
token1 {
symbol
}
reserve0
reserve1
}
}
このクエリは、トークン0がUSDC、トークン1がTetherであるUniswap V2の流動性プールの情報を取得します。token0: "..."とtoken1: "..."は、トークンアドレスでフィルタリングするための条件を指定します。
2.4. NFTの所有者の取得
特定のNFTの所有者を取得するクエリの例です。NFTのコントラクトアドレス、トークンID、所有者アドレスを取得します。
query {
nftOwners(where: { contract: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", tokenId: "1" }) {
owner
}
}
このクエリは、コントラクトアドレスが0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d (CryptoPunks) で、トークンIDが1であるNFTの所有者アドレスを取得します。contract: "..."とtokenId: "..."は、NFTのコントラクトアドレスとトークンIDでフィルタリングするための条件を指定します。
2.5. 複雑なクエリの構築
複数のサブグラフを組み合わせたり、複雑な条件を指定したりすることで、より高度なクエリを構築できます。例えば、特定の期間におけるERC20トークンのトランザクション量を集計するクエリなどです。
query {
tokenTransfers(where: { timestamp_gt: 1672531200, timestamp_lt: 1675123200 }) {
value
}
}
このクエリは、2023年1月1日から2023年1月31日までのERC20トークンのトランザクション量を取得します。timestamp_gt: 1672531200とtimestamp_lt: 1675123200は、タイムスタンプでフィルタリングするための条件を指定します。
3. GRT APIの利用上の注意点
- レート制限: GRT APIにはレート制限があります。短時間に大量のクエリを送信すると、APIが制限される可能性があります。
- サブグラフの可用性: サブグラフの作成者によって、サブグラフの可用性が異なる場合があります。サブグラフが利用できない場合、クエリを実行できません。
- データの正確性: GRT APIは、ブロックチェーンデータをインデックス化しますが、データの正確性を保証するものではありません。データの利用は自己責任で行ってください。
- GraphQLの学習: GRT APIを効果的に利用するには、GraphQLの基本的な知識が必要です。
4. まとめ
ザ・グラフ(GRT)のAPIは、ブロックチェーンデータを効率的にクエリするための強力なツールです。GraphQLをベースとしたクエリ言語を使用することで、必要なデータのみを柔軟に取得できます。このドキュメントで紹介した実例を参考に、様々なブロックチェーンデータをクエリし、GRTの可能性を最大限に引き出してください。GRT APIの利用上の注意点を理解し、安全かつ効果的にGRTを活用することが重要です。ブロックチェーン技術の発展とともに、GRTの役割はますます重要になると考えられます。今後もGRT APIの機能拡張や、新たなサブグラフの登場に注目し、ブロックチェーンデータの活用を推進していくことが期待されます。