The Graphのcuratorとしてサブグラフを評価する方法

この記事は、The Graphプロトコルの Curator(キュレーター)という役割のための記事です。

現在キュレータープログラムというのが行われていて、その中でサブグラフを評価する、というタスクがあるので、その評価方法を簡単にまとめたものです。キュレータープログラム以外でも、今後ネットワークがローンチしたあとに、GRTトークンホルダーがサブグラフに対してステーキングするときにも使えます。理由としては、同じプロジェクトのサブグラフでも複数存在する可能性があり、よりよいものにステークしておいた方が、使われて、結果としてステーク報酬が多くなるためです。

このあたりは過去のBspeak!ニュースレターの解説記事や、The Graphのドキュメントを読んでみてください。

1.まず始めに

評価するサブグラフを見つけます。キュレータープログラムに参加している人は、メールで自分が評価するサブグラフが送られてきていると思います。

1つ目の方法は、URL欄に https://thegraph.com/explorer/subgraph/[サブグラフ名] と入れて検索する方法です。

2つ目の方法は https://thegraph.com/explorer/ にアクセスして検索する方法です。

自分の場合は、こちらです。https://thegraph.com/explorer/subgraph/flyhigh/omg

このサブグラフページをいったら、説明を見てください。上の例では、Uniswapのような説明がされています。ここでどんなデータが整理されて提供されるかが説明されているものが良いです。

次に、Githubアカウントを持っているかどうかをチェックしましょう。ある場合は、リンクからREADMEファイルを見ると、説明が書かれているはずです。

また同じページの下に、The Explorer Playground があるので、実際にサブグラフに対して要求をすることができます。どんな種類のクエリができて、結果として何のデータが得られるのか、を把握しましょう。例のサブグラフでは、Uniswapの出来高、ある期間の、あるペアの、という風に指定して、ほしいデータを得ることができます。

ここまでで概況を抑えます。次は詳細を見ていきます。

2. コードをみて、サブグラフの動きの詳細を把握する

詳細を把握するために、サブグラフのマニフェストを見ます。マニフェストを読むと、サブグラフがどのコントラクトをチェックし、何が起きたときに何をするのか、ということが記述されています。

マニュフェストを見るためには、https://ipfs.io/ipfs/[ID]にアクセスします。この[ID]の部分は、先程のエクスプローラページの'ID'欄に記載されています。

今回のサブグラフを例にすると https://ipfs.io/ipfs/Qmf1AobVPpW3ga8AuSoA9GPUeGUF1Zm4wXWQ884HF4PpUs

です。

■マニュフェストで見ること

a) サブグラフがチェックしているコントラクトを探す

  1. コードの中の : dataSources => mapping => source からコントラクトのアドレスをコピー

  2. Etherscanで、そのコントラクトを検索

  3. どんなプロジェクトか、どのような種類のトランザクションが発生しているかを確認

※サブグラフには複数のコントラクトが含まれている場合があるので、その際は、それぞれチェックしましょう

b) サブグラフのGithubページに 'subgraph.yaml'(マニフェストファイルです)があれば、https://ipfs.io から取得したデータと比較することもできます。

c) 同じくGithubページに 'schema.graphql' ファイルがあれば、それを見て、どの種類のgraphql型が定義されているかを確認できます。これは何かというと、The Explorer Playground でクエリできるデータの構造を定義しています。

d) もしSolidityの知識があれば、Etherscanのコントラクトを読み、どのような関数がどのようなデータで呼び出されているかを確認することができます。

ここまで、サブグラフが何をしているのか、実用可能かを答えられると思います。

■より詳細にマッピングをみる

ここからはより技術的になりますが、より詳細に見ることができます。

a) サブグラフがどのようなイベントを監視しているか、データを抽出するためにどのハンドラを呼び出しているかを調べます。

マニフェストファイル(subgraph.yaml)のdataSources => mapping => eventHandlers => eventを見て、サブグラフが見ているコントラクトイベントを確認します。

これらはethereumのコントラクトが呼び出している関数です。関数が呼び出されるたびに、サブグラフがdataSources => mapping => eventHandlers => handlerを呼び出すようになっています。

b) 次に、マニフェストで定義されているコントラクトのABIを開きます。ABIは、サブグラフのGitHubの'abis'フォルダ内にある.jsonファイルです。

名前からその関数が何をしているのかを推測することができます。マニフェストのeventHandlers にマッチする関数名や、その引数もメモしておきましょう。

c) そして、github アカウントの /src/mappings/ にあるマッピングファイルをみて、マニフェストの 'eventHandlers' 以降のHandlerのところに書かれている関数名を探してください。どのような種類のデータ抽出を行うのかが分かります。

3. サブグラフの評価

ここまですると、サブグラフがコントラクトからどのようなイベントを記録しているのか、どのようなデータを利用するか、よく理解できます。

そしてキュレータープログラムでは以下のような観点で評価することが指定されています。

  1. 該当のサブグラフをどのように概要説明するか。

  2. 実用可能かどうか。

  3. サブグラフによって提供されるデータは有用か。改善する方法はあるか。

  4. フィールド、フィールドタイプ、リレーションシップ、またはその他の改善の追加や変更を含めて、スキーマにどのような変更を加えるか。

  5. 似たようなことをする他のサブグラフがあるか。これはどう比較できるか。

  6. 完全性、複雑さ、正確さの度合い。

まとめ

なるべくシンプルなサブグラフから見てみることをお勧めします。また何かありましたら、書きたいと思います。