既存のサブグラフをThe Graph Networkにアップグレードする方法
Reading time: 18 min
これは、ホストされているサービスからThe Graphの分散型ネットワークへのサブグラフのアップグレード方法に関するガイドです。Snapshot、Loopring、Audius、Premia、Livepeer、Uma、Curve、Lidoなどのプロジェクトを含む1,000以上のサブグラフがThe Graph Networkに成功してアップグレードされました!
アップグレードのプロセスは迅速であり、あなたのサブグラフは永久にThe Graph Networkでしか得られない信頼性とパフォーマンスの恩恵を受けることができます。
- 私はすでにホストされたサービスにサブグラフを展開しました
- このサブグラフは、グラフ・ネットワークで利用可能なチェーンのインデックスとして機能します。
- サブグラフをチェーン上に公開するためのETHを持つウォレットがあります。
- インデクサーがインデックス作業を開始できるように、サブグラフをキュレートするために約10,000 GRTを持っています。
あなたのサブグラフに特定のコマンドを見つけることができます。Subgraph Studio をご覧ください。
- 最新版の graph-cli をインストールする:
npm install -g @graphprotocol/graph-cli
yarn global add @graphprotocol/graph-cli
Subgraph.yamlの 'apiVersion' が '0.0.5' 以上であることを確認してください。
- メイン・プロジェクトのサブグラフ・リポジトリ内で、スタジオ上でデプロイとビルドを行うためにサブグラフを認証します。
graph auth --studio <DEPLOY_KEY>
- ファイルを生成し、サブグラフをビルドする:
graph codegen && graph build
もしサブグラフにビルドエラーがある場合、AssemblyScript Migration Guide を参照してください。
- ウォレットでSubgraph Studioにサインインし、サブグラフをデプロイしてください。サブグラフの名前に基づく<SUBGRAPH_SLUG>は、Studio UIで見つけることができます。
graph deploy --studio <SUBGRAPH_SLUG>
- Studioのプレイグラウンドでクエリをテストしてください。以下は、Sushi - Mainnet Exchange Subgraph のためのいくつかの例です。
{users(first: 5) {idliquidityPositions {id}}bundles(first: 5) {idethPrice}}
- この時点で、サブグラフはSubgraph Studio上にデプロイされましたが、分散ネットワークにはまだ公開されていません。サブグラフが意図したとおりに動作しているか、右上の一時的なクエリURLを用いてテストすることができます。この名前が示すように、これは一時的なURLであり、実運用に使用すべきではありません。
- アップデートは、既存のサブグラフの別のバージョンをチェーン上に公開するだけです。
- これにはコストがかかるため、公開する前に「開発クエリURL」を使用してSubgraph Studioでサブグラフをデプロイおよびテストすることを強くお勧めします。 here でトランザクションの例をご覧ください。価格はおおよそ100 gweiで0.0425 ETH程度です。
- サブグラフを更新する必要があるたびに、更新料が請求されます。これにはコストがかかるため、メインネットにデプロイする前にサブグラフをGoerliでデプロイしてテストすることを強くお勧めします。場合によっては、そのサブグラフにシグナルがない場合でも、一部のGRTが必要になることもあります。サブグラフバージョンにシグナル/キュレーションがある場合(自動移行を使用)、料金は分割されます。
- 「Publish」ボタンを押して、サブグラフをThe Graphの分散型ネットワーク上に公開する。
インデクサーによるインデックス作成が行われるよう、サブグラフをGRTでキュレーションすることをお勧めします。ガスコストを節約するためには、サブグラフをネットワークに公開する同じトランザクションでキュレーションを行うことができます。高品質なサービスを提供するために、少なくとも10,000 GRTでサブグラフをキュレーションすることをおすすめします。
以上です!公開が完了すると、The Graph Explorer を介して分散型ネットワーク上でサブグラフをライブで表示することができます。
Discord の #Curators channel を自由に活用して、サブグラフが通知される準備ができていることをキュレーターに知らせてください。 また、予想されるクエリ量を共有していただけると助かります。 したがって、サブグラフ上でどの程度の GRT を通知するかを推定できます。
Subgraph StudioでAPIキーを生成するには、hereをクリックしてください。
毎週末に、その期間に発生したクエリフィーに基づいて請求書が作成されます。この請求書は、お客様の残高にあるGRTを使用して自動的に支払われます。クエリ費用が引き落とされた後、残高が更新されます。クエリフィーは、ポリゴンネットワークを経由してGRTで支払われます。APIキーを有効にするには、以下の手順でPolygonの課金契約にGRTを追加する必要があります。
- ご希望の取引所でGRTをご購入ください。
- GRT をウォレットに送る.
- StudioのBillingページで「Add GRT」をクリックします。
- 手順に沿って、GRTを課金バランスに追加してください。
- GRTは自動的にArbitrumのネットワークにブリッジされ、課金バランスに加算されます。
注意: GRTを請求残高に追加するための詳細な手順については、official billing pageをご覧ください。
APIは2つの方法で利用を制限し、セキュリティを確保することが推奨されます。
- オーソライズド・サブグラフ
- オーソライズド・ドメイン
APIキーを保護するには、hereをクリックしてください。
これで、ネットワーク上のIndexersのインデックス作成状況をグラフエクスプローラで確認できます(example here)。上部の緑の線は、投稿時に8つのインデクサーがそのサブグラフのインデックス付けに成功したことを示します。また、Indexerタブでは、どのインデクサーがあなたのサブグラフをピックアップしたかを見ることができます。
最初のインデクサーがあなたのサブグラフを完全にインデックス化したら、分散ネットワーク上でサブグラフのクエリを開始することができます。クエリURLを取得するためには、クエリURLの横にある記号をクリックしてコピー&ペーストしてください。以下のような画面が表示されます。
https://gateway.thegraph.com/api/[api-key]/subgraphs/id/S9ihna8D733WTEShJ1KctSTCvY1VJ7gdVwhUujq4Ejo
重要: [api-key] を前述のセクションで生成した実際のAPIキーで置き換えてください。
このQuery URLをダップ内で使用して、GraphQLリクエストを送信することができます。
おめでとうございます。あなたは今、分散化のパイオニアです!
注意: ネットワークの分散性のため、異なるインデクサーが異なるブロックまでインデックスを行っている可能性があります。新鮮なデータのみを受け取るために、次のようにしてクエリを提供するためにインデクサーがインデックスを行った最小ブロックを指定することができます。ブロック引数: { number_gte: $minBlock }
といった形です。以下の例をご覧ください。
{stakers(block: { number_gte: 14486109 }) {id}}
ネットワークの性質や再編成の処理方法に関する詳細な情報は、ドキュメント記事Distributed Systems に記載されています。
ネットワーク上の既存のサブグラフを更新したい場合、Graph CLIを使用して新しいバージョンのサブグラフをSubgraph Studioにデプロイすることで行えます。
- 現在のサブグラフに変更を加える。Goerliに公開してSubgraph Studio上で小さな修正をテストするのが良いアイデアでしょう。
- 以下のようにデプロイし、コマンドに新しいバージョンを指定します(例:v0.0.1、v0.0.2 など)。
graph deploy --studio <SUBGRAPH_SLUG>
- Subgraph Studio のプレイグラウンドでクエリを実行し、新バージョンをテストします。
- 新しいバージョンを The Graph Network で公開します。これにはガスが必要であることを忘れてはなりません(上のセクションで説明)。
Note: Curation on Arbitrum has a flat bonding curve. Learn more about Arbitrum here.
アップデートには、GRTがサブグラフの古いバージョンから新しいバージョンに移行される必要があります。つまり、毎回のアップデートごとに新しいボンディングカーブが作成されます(ボンディングカーブに関する詳細はhere)。
新しいボンディングカーブは、新しいバージョンに移行されるすべてのGRTに1%のキュレーション税を課します。オーナーはこのうち50%、すなわち1.25%を支払わなければなりません。もう1.25%は、すべてのキュレーターに料金として請求されます。このインセンティブ設計は、サブグラフのオーナーが再帰的な更新呼び出しでキュレーターの資金をすべて排出できないようにするためのものです。キュレーションの活動がない場合、自分のサブグラフにシグナルを送るためには最低でも100 GRT支払う必要があります。
例を挙げてみましょう。これは、サブグラフが積極的にキュレートされている場合にのみ当てはまります。
- サブグラフの v1 で自動移行を使用して 100,000 GRT が通知される
- オーナーがバージョン2にアップデートします。100,000 GRTが新しいボンディングカーブに移行され、そのうち97,500 GRTが新しいカーブに投入され、2,500 GRTが燃焼されます。
- その後、オーナーは手数料の半分を支払うために1250 GRTを燃やします。オーナーはアップデート前にこれをウォレットに持っていなければならず、そうでない場合、アップデートは成功しません。これはアップデートと同じトランザクションで行われます。
このメカニズムは現在ネットワーク上で稼働していますが、コミュニティでは現在、サブグラフ開発者の更新コストを削減する方法について議論しています。
サブグラフに大量の変更を加えている場合、継続的に更新し、更新コストを負担することは避けるべきです。サブグラフの安定性と一貫性を維持することは非常に重要です。コストの観点だけでなく、インデクサーが同期時間に自信を持てるようにするためです。更新を計画している場合、インデクサーの同期時間に影響が及ばないように、その計画を通知すべきです。サブグラフのバージョンを更新する際に、Discord#Indexers channelを活用して、インデクサーに知らせることができます。
サブグラフは、外部開発者が利用しているオープン API です。オープン API は、外部開発者のアプリケーションを破壊しないように、厳格な標準に従う必要があります。グラフ ネットワークでは、サブグラフ開発者は、インデクサーと、そのサブグラフを使用している他の開発者だけでなく、新しいサブグラフを同期するのにかかる時間を考慮する必要があります。
新しいバージョンを公開しなくても、サブグラフのメタデータを更新できます。メタデータには、サブグラフ名、画像、説明、Web サイトの URL、ソース コードの URL、およびカテゴリが含まれます。開発者は、該当するすべてのフィールドを編集できる Subgraph Studio でサブグラフの詳細を更新することで、これを行うことができます。
エクスプローラーでサブグラフの詳細を更新 がチェックされていることを確認し、保存 をクリックします。これがチェックされている場合、新しいデプロイメントで新しいバージョンを公開することなく、エクスプローラー内のサブグラフの詳細を更新するオンチェーン トランザクションが生成されます。
- サブグラフの開発に ENS 名を活用する
- プロフィールが充実しているほど、サブグラフがインデックスやキュレーションされる可能性が高くなります。
here の手順に従って、サブグラフを非推奨にし、グラフ ネットワークから削除します。
ホストされたサービスは、開発者が制限なしでサブグラフをデプロイできるように設定されました。
The Graph Network が真に分散化されるためには、プロトコルのインセンティブの中核部分としてクエリ料金を支払う必要があります。 API のサブスクライブとクエリ料金の支払いの詳細については、請求に関するドキュメントをhere で確認してください。
これは製品 UI のライブ機能ではありませんが、1 か月に支払ってもよい金額を予想クエリ量で割ることで、クエリごとの最大予算を設定できます。
クエリの予算はあなたが決定することができますが、その価格でクエリを提供するインデクサーが用意されているとは限りません。ゲートウェイが、あなたが支払いたい価格以上でクエリを提供する意思のあるインデクサーに一致させる場合、あなたは予算と彼らの価格の差額を支払うことになります。その結果、より低いクエリ価格は利用可能なインデクサーのプールを減少させ、受け取るサービスの品質に影響を与える可能性があります。高いクエリ料金を持つことは有益であり、それによってキュレーションや有名なインデクサーがあなたのサブグラフに興味を持つかもしれません。
これはダイナミックで成長中の市場ですが、どのように関わるかは自分でコントロールできることを忘れないでください。プロトコルにもゲートウェイにも、上限や下限の価格は指定されていません。例えば、ネットワーク上のいくつかのdappsが支払う価格(週単位)を以下に示します。最後の列はGRTでのクエリ料を示していますのでご覧ください。例えば、Pickle Financeは1秒あたり回のリクエストがあり、1週間でGRTを支払っています。
まだ混乱している場合でも、心配する必要はありません。次のリソースを確認するか、以下の分散ネットワークへのサブグラフのアップグレードに関するビデオ ガイドをご覧ください。
- グラフネットワーク契約
- キュレーションコントラクト - GNSがラップする基礎となるコントラクト
- アドレス -
0x8fe00a685bcb3b2cc296ff6ffeab10aca4ce1538
- アドレス -
- Subgraph Studio ドキュメント