見出し画像

The Graphを使用するべき理由と使い方、Uniswapでの使われ方を分かりやすく解説【非開発者でもブロックチェーンのデータ取得を体験!】

こんにちは、プリズムと申します。普段は某ブロックチェーン企業で働きながら、個人の活動としてThe Graphの日本チームに所属してThe Graphの普及活動を行っています。以後お見知りおきを。

今回の記事は、日本のWeb3業界において、知名度はあるが実際に何をやっているかは理解されていないプロジェクトランキングNo.1(著者調べ)である『The Graph』についての解説記事です。

The Graphについて検索すると『ブロックチェーンデータを効率的に検索するシステム』とか、『分散型のインデックス作成プロトコル』といった説明が出てくると思います。この説明だけだと、正直なところ分かりにくくないですか?

そこで今回の記事では、The Graphを使用すべき理由、ユースケースの事例(どのような場面で使われているのか)、そして具体的な使い方を分かりやすさ重視で解説していきます。この記事1本を読めば、The Graphが具体的にどのように使われるのかが分かるような内容にしていきますので、ぜひ最後まで読んでいただけると幸いです。

※読者の対象は、(仕組みを理解しているかどうかは別として)DeFiでのスワップやETHの送金、NFTの購入といった何らかのトランザクションを出したことがある人、またはそれに準ずるレベルの知識を有する人であることをご留意ください。

※理解のしやすさを優先した説明をしているため、厳密性を欠く表現になっている箇所があります。ご留意ください。

The Graphの実績

詳細な説明に入る前に、The Graphの実績を紹介します。一部The Graphの専門用語を使用していて分かりずらい部分があると思いますが、気にせず読み進めてください。

2024年10月時点でのThe Graphの実績は、以下のようになっています。

  • 著名なブロックチェーン系プロジェクトに利用されている(Uniswap、Aave、Lido、ENS、Snapshot、Alchemyなど)

  • 80種類以上のブロックチェーンに対応している(=80種類以上のブロックチェーンに関するオンチェーンデータを取得できる)

  • 約9,500個のsubgraph(ブロックチェーンデータを取得するために提供されるAPI)が稼働している

  • 約110のIndexer(The Graphにおけるノードオペレータ。ブロックチェーンにおけるバリデータ相当の存在)が稼働している

  • The Graphが発行するトークン『$GRT』は、全暗号資産の時価総額ランキングで約50位に位置する

上記の実績を見ると、かなり規模の大きいプロジェクトであることが理解できるかと思います。著者個人の体験ベースで言うと、グローバルのイベントの参加者でThe Graphを知らない人はほとんど見たことがありません。

The Graphが対応しているブロックチェーンの例(出典元:https://thegraph.com/docs/en/

The Graphの全体像

The Graphを一言で表すと『特定の条件に基づいてフィルタリングされたブロックチェーンデータを取得できる機能を提供している分散型ネットワーク』と言えます。それを可能にしている技術がsubgraphと呼ばれるもので、このsubgraph(を通して作成されたAPIエンドポイント)を使用してフィルタリング済みのデータを取得します。subgraphは必要に応じて自由に作ることができ、自由にフィルタリング条件を設定可能です。

なお、ここで言及しているフィルタリングのための条件とは、例えば以下のようなものを指しています。厳密な表現ではありませんが、フィルタリング≒取得したいデータ、と認識してもOKです。

  • 特定のNFTプロジェクトについて、1日あたりのNFT所有者と関連するデータ

  • 特定のAMM DEXに関する各通貨ペアごとの直近1週間の取引ボリューム合計額

  • ガバナンス投票を委任されたユーザーについて、投票力で上位100位のユーザーのアドレス一覧

とりあえず、これくらいの理解があれば問題ないです。他にもマッピングだとかスキーマだとか色々概念はあるのですが、今回の記事を読むにあたっては理解する必要はありません。関心があればコチラの公式ドキュメントをご覧ください。

The Graphを使用すべき理由

上述の解説を読んだ後に出てくる疑問は、なぜブロックチェーンデータをフィルタリングする必要があるのか、だと思います。ここではその理由を、The Graphを使用するべき理由とともに説明していきます。本項がこの記事を通して最も伝えたい部分です。

出典元:https://thegraph.academy/course/subgraph-developer-course/lessons/diagrams-to-understand-the-graph/

上の図のバーはブロックチェーンを表しています。ブロックチェーンには、その稼働開始時から現在までのデータがすべて格納されています。オレンジ色、赤色、青色、緑色は、それぞれ特定のプロジェクトに関するデータを示しています。例えば、赤色部分がUniswapに関するデータだと仮定しましょう。

この場合、Uniswapに関連するデータのみをブロックチェーンから取得したい場合、The Graphを使用しないと非常に手間のかかる処理が必要になります。具体的には、まずブロックチェーン全体のデータを取得し、そのデータに関して一つずつUniswapに関連するデータかどうかを仕分けしなければなりません。これは非常に計算リソースが必要であると同時に、ブロックチェーンのデータが増えれば増えるほど計算時間が長くなっていきます。

The Graphを使用すれば、あらかじめ指定されたフィルタリング条件に応じて仕分けされたブロックチェーンデータを取得できます。先ほどの図の下のバーのように、赤色の部分(Uniswap関連)のデータだけをあらかじめ切り出すことで、データ取得の効率化が可能です。その結果、取得したいデータと無関係なデータに費やす計算時間が大幅に削減されます。以下の図で言うと、左側がThe Graphを利用しない場合のデータ取得の工程、右がThe Graphを利用した場合の工程です。工程が大きく簡略化されていますよね。

出典元:https://thegraph.academy/course/subgraph-developer-course/lessons/diagrams-to-understand-the-graph/

ここまでの説明で、ブロックチェーンデータをフィルタリングする機能が必要な理由についてご理解いただけたかと思います。The Graphを用いることで、ユーザーのデータ取得目的に最適化(選別)されたデータの取得が可能となるのです。

The Graphのユースケース(Uniswapの例)

The Graphは多くのブロックチェーン系プロジェクトに活用されています。その中でも、UniswapはThe Graphを最も活用しているプロジェクトの一つです。この項では、UniswapがThe Graphをどのように利用しているかを解説していきます。

以下の図は、新たなチェーンにUniswapをデプロイする際に必要な構成を示しています。赤枠で囲んだ部分に注目すると、subgraphがSmart Order RouterとUniswap Info Siteとつながっていることが分かりますね。以下より、Subgraphがこの2つの要素にどのように活用されているかを説明します。

出典元:https://github.com/Uniswap/v3-new-chain-deployments

Uniswap Info Site

Uniswap Info Siteとは、Uniswap上の取引ボリュームや流動性プールの状態などのデータに関するダッシュボードのことです。Uniswapの公式サイトからアクセス可能となっています。The Graphの活用例としては、こちらが直感的で分かりやすいと思います。

このサイトで表示されているデータは、The Graphで取得されています。このようなダッシュボードサイトをブロックチェーンのデータを参照して作る場合、The Graphを利用しないと、サイトの読み込み時にブロックチェーン全体のデータを取得する必要があります。

出典元:https://app.uniswap.org/explore/

Uniswap Info SiteのTransactionボタンを押すと、特定のチェーン(以下図ではEthereum)上のUniswap V3で実行されたSwapトランザクションが最新順で表示されます。この表示も、The Graphを使わなければ非常に面倒な処理が必要です。The Graphを利用しない場合、①ブロックチェーン全体のデータを取ってきて、②一つ一つのトランザクションに対してUniswap V3のコントラクトアドレスかどうかの識別を行い、③その中でSwapを実行しているトランザクションのみを抽出する、という3つの工程が必要になります。

出典元:https://app.uniswap.org/explore/transactions/ethereum

The Graphを使用すれば、あらかじめコントラクトアドレス(Uniswap V3のコントラクトアドレス)と実行する操作(Swap)を条件として指定したsubgraphを作ることで、データ取得の工程を簡略化することができます

Smart Order Router

Smart Order Router(SOR)とは、Uniswap V3において、スワップを行う際の最適なルートを計算するためのアルゴリズム、およびそのスワップを実行する機能を提供しているパッケージです。SORは、仮にトークンAとトークンBをスワップしたい場合、AとBの最も効率的なスワップ方法(ルート)を、複数の流動性プールのデータ(トークンペア、交換レート、手数料など)を基に探し出します。

SORではThe Graphを利用して、ブロックチェーン上からリアルタイムの流動性プールのデータを取得し、ルーティングの最適化に役立てています。

Smart Order RouterのGitHubを見ると、実際に subgraph に対して流動性プールの情報をクエリしている部分を確認できます。

出典元:https://github.com/Uniswap/smart-order-router/blob/main/src/providers/v3/subgraph-provider.ts#L104-L129

The Graphを使ってブロックチェーンのデータを取得してみよう

全体像を理解したところで、実際にThe Graphを用いたデータの取得をやってみましょう。この操作を体験することで、後に解説するThe Graphのユースケース(実際の使われ方)に関する解像度が高くなると思います。

playgroundを用いたデータの取得を体験しよう

まずは、The Graphの公式ページにて提供されているplayground(subgraphの動作テストが可能なページ)を用いて、ENSに関するデータを取得を体験しましょう。

ENS(Ethereum Name Service)は、Ethereumブロックチェーン上で動作する分散型の名前解決システムです。長い文字列で表されるEthereumアドレス(例: 0x1234...)を、人が覚えやすい文字列(例: yourname.eth)に変換する役割を果たします。

まずは、ENSのsubgraphのページにアクセスし、以下の画面が出ていることを確認してください。

真ん中にある▶ボタンを押してみましょう。すると以下のように、黄色の文字列、もしくは紫色の数値が表示されると思います。これがブロックチェーン上のデータです。playgroundでは、左側に入力されたクエリに従って、右側にブロックチェーン上のデータが出力されるようになっています。

デフォルトで入力されているクエリはごちゃごちゃしているので、もう少しシンプルなクエリを実行してみましょう。以下はENSアドレスを条件として、当該ENSを所有しているアドレスを出力するクエリです。

query DomainToOwnerAddress {
  domains(where: {name: "vitalik.eth"}) {
    owner {
      id
    }
  }
}

上のコードをそのままコピペして実行すると、以下のような結果が出力されます。この結果は、Vitalik.ethというENSを所有しているアドレスが 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 であることを示しています。

Etherscanでこのアドレスを調べてみると、実在するアドレスだと分かります。

出典元:https://etherscan.io/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

"vitalik.eth" の部分を自分が保有しているENSに置換してデータ取得を試してみると、より理解が深まるかと思います。

APIキーを用いたデータの取得を体験しよう

playgroundを使ったデータの取得体験ができたら、今度はAPIキーを使ったデータの取得を行ってみましょう。

まずAPIキーを発行するためにsubgraph studioにアクセスしてください。ウォレットの接続とメールアドレスの認証を求められるため、①~⑤の手順に従って進めてください。

⑤まで完了したら以下の画面になるので、メニューの中にある『API Keys』をクリックしましょう。

するとAPI Keyを発行できる画面になるので、API KEYの名前とAPIの呼び出し制限を設定して『Create API Key』ボタンを押してください。API KEYの名前は適当につけていただき、呼び出し制限は0のままで問題ありません。

設定が完了すると、API KEYが使用できる状態になります。『Copy』ボタンを押すことで、API KEYをコピーできます。

ここまでの操作が完了したら、再度ENSのsubgraphのページにアクセスしてくださ。アクセス後のページを下にスクロールすると、『Query quick start』というコンテンツがあります。

『Query quick start』では、subgraph(今回の場合はENSのsubgraph)によってフィルタリングされたデータをフロントエンドなどから読み込む際に使用する情報がまとまっています。本記事では最もシンプルな外部からのデータ取得方法である、cURLを用いた方法を解説します。

コマンドプロンプトを開き、先ほどの画面のcURLタブを選択した場合に出る以下のコマンドをコピペしましょう。

curl -X POST 
-H "Content-Type: application/json" 
-d '{"query": "query DomainToOwnerAddress { domains(where: {name: "vitalik.eth"}) { owner { id } } }", "operationName": "Subgraphs", "variables": {}}' 
https://gateway.thegraph.com/api/{api-key}/subgraphs/id/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH


このコマンドの4行目の {api-key} の部分を、先ほど発行した自分のAPI KEYに差し替えてください。例としては以下のような感じです。

curl -X POST \
-H "Content-Type: application/json" \
-d '{"query": "query DomainToOwnerAddress { domains(where: {name: \"vitalik.eth\"}) { owner { id } } }", "operationName": "Subgraphs", "variables": {}}' \
https://gateway.thegraph.com/api/90978abbc0d437ff960656b972c53136/subgraphs/id/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH

差し替えが完了したら、これをcURLコマンドとして実行します。実行結果として、playgroundで出力されたものと同じアドレス(0xd8da6bf26964af9d7eed9e03e53415d37aa96045)が出力されました。

上記の操作を行うことで、The Graphが用意したplaygroundではない場所からsubgraphを通してブロックチェーンデータを取得することができました。これができれば、(自分が開発したdAppsを含む)あらゆるdAppsがsubgraphを用いて必要なブロックチェーンデータを入手できるイメージが湧くと思います。

ここまで実行できた方は、The Graphのユースケース、使い方の全体像が具体的に理解できたかと思います。よりThe Graphの理解を深めるには、自分のオリジナルsubgraphを作成してデプロイするのをオススメします。しかしながら、subgraphのデプロイは非開発者にとっては少しハードルが高いと思いますので、また別の機会に解説したいと思います。

公式ドキュメントにsubgraphをデプロイするためのガイドがあるため、自力でできそうな方はぜひトライしてみてください。

著名プロジェクトが提供しているSubgraphの一覧

DeFiやNFT領域の著名なプロジェクトでは、運営が作成したsubgraphが公開されていることが多いです。以下にその一例を列挙いたしましたので、もし使用したい subgraph があったら是非お試しください。

まとめ

本記事ではThe Graphの使われ方を中心に解説していきました。The Graphがブロックチェーン関係のデータ取得において、必要不可欠なプロジェクトであることが理解できたのではないでしょうか。

今後もDeFiやオンチェーンデータ分析などをテーマに記事を書いていこうと思いますので、もし良ければ筆者のXアカウントをフォローしていただけますと幸いです。

加えて、The Graph JapanのXアカウントもフォローお願いします!

この記事が気に入ったらサポートをしてみませんか?