イーサリアムのサブグラフを分散型ネットワークに移行する方法
The Graph Foundation
イーサリアムのサブグラフは、The Graphの分散型ネットワークへの移行を続けています。Web3の普及が進むにつれて、スケールとパフォーマンスに対する要求も高まっていきます。開発者は、中央集権的な技術に依存し続けるか、分散型インフラに切り替えるかという大きな決断に迫られています。
持続可能性と信頼性という点では、分散化に勝るものはありません。中央集権的な障害ポイントを排除することで、ユーザーが一貫してアクセスできるWeb3アプリを提供することが可能になります。多くのプロジェクトがすでに実運用でネットワークを検証しており、あなたのプロジェクトが移行する絶好の機会でもあります。移行を支援するために、ここにステップバイステップのガイドを作成しました。
前提条件
- ホストサービス上にサブグラフをデプロイ済み
- サブグラフがイーサリアムメインネットのインデックスを作成している
- サブグラフにIPFSや全文検索の依存関係がない(これらは現在、分散型ネットワークでサポートされていません)
リソース
まずは、グラフネットワークとリソースに慣れることをお勧めします:
1. ネットワークに参加する各役割について確認しましょう。
- インデクサー — グラフネットワークのノードオペレータで、サブグラフのインデックスを作成し、消費者にクエリを提供するためにGRT(Graph Token)をステークする。
- キュレーター — キュレーターはweb3エコシステムの知識を使用して、グラフネットワークのインデクサーによってインデックスされるべきサブグラフを評価し、シグナルを送る。
- デリゲーター— GRTを1つ以上のインデクサーに委任する(ステーキング)ネットワーク参加者。
- 注 —インデクサーは、サブグラフのキュレーションシグナルに基づいてインデックスを作成するサブグラフを、彼らのインセンティブに最適であるとして選択します。詳しくはこちらをご覧ください。
- サブグラフのインデックスを作成するのに十分な数のインデクサーを持つために、少なくとも10k GRTを自己キュレーションすることが推奨されています。サブグラフのキュレーションを行うdappデベロッパーとしては、ネットワーク上のサブグラフの持続化のために、この量を1–2年以上シグナルしておくことをお勧めします。また、フロントランのリスクを避けるために、サブグラフがデプロイされた時点でキュレーションを行うことを検討してもよいでしょう。
2. Subgraph Studio — サブグラフを作成し、メタデータを追加し、デプロイしてテストした後、分散ネットワークに公開することができるローンチパッドです。詳細はこちらをご覧ください。
3. Graph Explorer — 分散型ネットワークのサブグラフとネットワーク参加者のデータを閲覧でき、また、プロトコルと対話することもできます。Graph Explorerは、ネットワークとそのサブグラフの探索、サブグラフへのシグナル送信、サブグラフのキュレーターの表示、各サブグラフのインデクサーの表示、インデクサーへのデリゲーションなど、多くのことが可能です。詳細はこちらをご覧ください。
ホストサービスから分散型ネットワークに移行する方法
ターミナル(CLI)を開き、デプロイしようとしているサブグラフのソースコードがあるフォルダに移動し、以下の手順を実行します:
yarn install
を実行して、サブグラフの依存関係をすべてインストールします。- graph-cliとgraph-tsの最新版がインストールされていることを確認します。執筆時点では@graphprotocol/graph-ts@0.26.0 と @graphprotocol/graph-cli@0.28.1 です。
- subgraph.yamlの
apiVersion
が0.0.5以上であることを確認してください。最新バージョンは0.0.6です。 - 新しいバージョンで必要と思われる変更を加えて、
graph codegen
を実行します。 graph build
を実行し、サブグラフがビルドされるかどうか確認します。エラーが発生した場合はAssemblyScript Migration Guideを参照してください。- 次に、ウォレット(例:MetaMask)またはGnosis Safe Multisigの後に、MultisigのEOA(外部所有アドレス)の一つを付けて、Subgraph Studioにサインインしてください。
- サブグラフを作成します。インデックスされたネットワークとして「Ethereum Mainnet」を選択し、それに名前を付けます。名前の一例として「Yearn Vaults」としていますが、シンプルで説明的な単語を使うのがよいでしょう。
- サブグラフを作成したら、サブグラフの説明、表示名、プロジェクトの画像など、詳細を記入します。説明文があれば、キュレーターはより多くの文脈を知ることができ、そのサブグラフに多くのシグナルが集まる可能性が高まります。
- Subgraph Studioの右側に、新たなサブグラフを作成する手順が表示されます。今回は、既存のサブグラフを移行するので、Authとdeployのみ使用します。各コマンドは、シンボルをクリックすることでコピー&ペーストできます。
- ターミナルに戻ってコマンドをペーストしてください:
graph auth --studio <deploy-key> graph deploy --studio <subgraph-slug>
- サブグラフの初期バージョンラベルを入力します。例:
v0.0.1
この時点で、サブグラフはSubgraph Studioにデプロイされましたが、分散ネットワークにはまだ公開されていません。サブグラフが意図したとおりに動作しているか、右上の一時クエリURLでテストすることができます。これは一時的なURLであり、実運用に使用すべきものではありません。
サブグラフをキュレーターやインデクサーがGraph Explorerで発見できるようにする準備ができたら、Publishボタンを使って実行できます。
また、サブグラフの署名とネットワークへの公開を組み合わせるオプションもあります。これは、インデクサーを引き付け、サブグラフの最初のキュレーターになるために推奨されます。
サブグラフの移行に支援を必要とする開発者のために、移行助成金の申請を期間限定でこちらで受け付けています。注意:サブグラフの最初のキュレーション・シグナルには、1%のキュレーション税が発生します。例:サブグラフに10,000GRTのシグナルを送った場合、サブグラフのシグナルは9,900GRTになり、100GRTがバーンされます。
サブグラフが分散型ネットワークに公開され、十分なキュレーション・シグナルを得ると、インデクサーはサブグラフのインデックス作成を開始します。サブグラフの複雑さと効率によりますが、しばらく時間がかかることがあります。その間、APIキーを作成することができます。
APIキーの作成
毎週末に、期間中に発生したクエリ料に基づいて請求書が作成されます。この請求書は、残高にあるGRTを使用して自動的に支払われます。クエリ料の引き落とし完了後に、残高が更新されます。クエリ料は、Polygonネットワークを経由して、GRTで支払われます。「billing balance」に入金するためにPolygon上でGRTを用意するか、以下の手順でEthereumウォレットからGRTをブリッジすることが推奨されます:
- 取引所でGRTを購入する
- GRTをウォレットに送信する
- Subgraph Studioを使用してGRTをPolygonにブリッジする
- このプロセスでは、少量のMATICも受け取ることができます
- GRTを「billing balance」に追加する
注意:マルチシグを使用している場合には、GRTからPolygonにブリッジすることができないため、このプロセスは若干異なります。GRTをEOA(外部所有アドレス)に送信し、そこからPolygonにブリッジする必要があり、Polygonへの転送後に、マルチシグをロードすることができます。このステップをサポートするツールを作成しました: https://multisig-billing.thegraph.com/
APIをロックダウンするには、次の2つの方法で利用制限をかけることをお勧めします:
1. 許可されたサブグラフ
2. 許可されたドメイン
分散ネットワーク上のサブグラフをクエリする
Graph Explorerでネットワーク上のインデクサーのインデックス作成状況を確認できます(例)。上部の緑色の線は、投稿時に8人のインデクサーがそのサブグラフのインデックス付けに成功したことを示します。また、「Indexer」タブでは、どのインデクサーがサブグラフをピックアップしたかを見ることができます。
最初のインデクサーがサブグラフのインデックスを完全に作成すると、分散ネットワーク上でサブグラフのクエリを開始することができるようになります。サブグラフのクエリURLを取得するために、クエリURLの横にあるマークをクリックしてコピー&ペーストしてください。
このように表示されます:
https://gateway.thegraph.com/api/[api-key]/subgraphs/id/S9ihna8D733WTEShJ1KctSTCvY1VJ7gdVwhUujq4Ejo
重要:[api-key]を上記のセクションで生成した実際のAPIキーに置き換えてください。
おめでとうございます!これで、GraphQLリクエストの送信先として、アプリ内でこのQuery URLを使用できるようになりました。あなたは今、分散化のパイオニアの一人です。
注意:ネットワークが分散しているため、異なるインデクサーが異なるブロックまでインデックスしていることがあります。新鮮なデータだけを受け取るために、クエリに対応するためにインデクサーがインデックスを作成しなければならない最小のブロックを指定することができます。block: { number_gte: $minBlock }
フィールド引数で、以下の例のように指定できます。
{ stakers(block: { number_gte: 14486109 }) { id } }
ネットワークの性質や再起動の処理方法については、ドキュメントの記事「Distributed Systems」で説明されています。
分散ネットワーク上のサブグラフを更新する
通常通りコードの更新を行い、前述と同じコマンドで新しいサブグラフをSubgraph Studioにデプロイします。
graph deploy --studio <subgraph-slug>
新しいバージョンのバージョンラベルを要求されます。バージョンラベルは、前のバージョンと連続したものである必要があります。例:v0.0.2
更新されたサブグラフがスタジオにデプロイされると、上記で説明したように、一時的なクエリURLを使用してテストすることができます。
サブグラフの開発中に、ネットワークに公開せずにスタジオに新しいバージョンをデプロイし、一時的なクエリURLを使用してテストしたい場合があります。新しいバージョンの準備ができたら、そのバージョンだけをネットワークに公開することができます。
なお、新バージョンの公開時には、キュレーション金額の0.5%の合計が更新税として課金されます。この税は、サブグラフの開発者とキュレーターの間で均等に分配されます。つまり、新バージョンを公開する際には、キュレーション総額の0.25%を提供することになります。
計算例
あるサブグラフに10,000GRTのシグナルがあり、新バージョンが公開された場合:
- ウォレットには25GRTが必要で、これはキュレーション費用としてその取引中に消費されます。
- 残りの25GRTはシグナルから差し引かれます。サブグラフは更新後、9,975GRTのキュレーションシグナルを保有します。
大半のインデクサーは、サブグラフの最新バージョンとその前のバージョンのインデックスを作成し、安定性を提供します。また、シグナルを最新バージョンに自動移行するように設定しています。
サブグラフの分散型ネットワークへの移行にご協力いただきありがとうございます。分散化の促進というプロセスを経ながら、ネットワークからより良い信頼性と高速なパフォーマンスを享受できることを願っています。
サポートが必要な場合は、遠慮なくご連絡ください。技術的な問題の場合、移行コストをカバーするための助成金に興味がある場合、サブグラフの移行に関連するその他の場合、必要な内容を記載してmigration@thegraph.foundationまでお気軽にお送りください。