blockchainjapan’s blog

旬のブロックチェーンを記事を厳選して提供!

イーサリアムのサブグラフを分散型ネットワークに移行する方法


イーサリアムのサブグラフを分散型ネットワークに移行する方法

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-cligraph-tsの最新版がインストールされていることを確認します。執筆時点では@graphprotocol/graph-ts@0.26.0 と @graphprotocol/graph-cli@0.28.1 です。
  • subgraph.yamlapiVersionが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キーの作成

サブグラフスタジオ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までお気軽にお送りください。


The Graphについて

The Graphは、分散型Webのインデックス及びクエリレイヤーです。開発者はサブグラフと呼ばれるOpen APIを構築・公開し、アプリケーションはGraphQLを使ってクエリを実行することができます。The Graphは現在、Ethereum, NEAR, Arbitrum, Optimism, Polygon, Avalanche, Celo, Fantom, Moonbeam, IPFS, PoAなど32種類のネットワークからのデータのインデクシングをサポートしており、今後多くのネットワークをサポート予定です。現在までに38,000以上のサブグラフが、28,000人以上の開発者が、Uniswap、Synthetix、Zora、KnownOrigin、Art Blocks、Gnosis、Balancer、Livepeer、DAOstack、AAVE、 Audius、Decentralandなどのアプリケーション用に構築を続けています。

グラフネットワークの開発者向けサービスは2021年7月に開始され、それ以来、232以上のサブグラフがネットワークに移行し、既に161以上のインデックスがサブグラフのクエリを提供し、8,600以上のデリゲーター、2,300以上のキュレーターが参加しています。現在までに300万GRT以上がシグナルされ、1サブグラフあたり平均1万5千GRTがシグナルされています。

アプリケーションやWeb3アプリケーションを構築している開発者であれば、ブロックチェーンからのデータのインデックス作成やクエリにサブグラフを利用することができます。The Graphによって、アプリケーションは効率的かつパフォーマンスよくUIにデータを表示することができ、他の開発者もあなたのサブグラフを使用することが可能です。Subgraph Studioを使ってネットワークにサブグラフをデプロイしたり、Graph Explorerにある既存のサブグラフをクエリしたりすることができます。

The Graphは、あなたがインデクサーキュレーターデリゲーターとしてメインネットに参加することを歓迎します。また、The Graphの各コンテンツをフォローすることで、The Graphのコミュニティーに参加することができます。The Graphの開発者やコミュニティのメンバーは、いつでもあなたとのチャットを歓迎しています。The Graphのエコシステムでは、開発者同士のコミュニティが広がっており、お互いにサポートし合って運営されています。

The Graph Foundationは、グラフネットワークを統括しており、Technical Councilによって統括されています。Edge & NodeStreamingFastFigmentSemioticThe Guildは、The Graphエコシステム内でコア開発を担う組織として機能しています。

Website / Graph Explorer / Twitter / Blog / Linkedin / Everest / Discord / Telegram / Newsletter

日本版Twitter / 日本版Medium / 日本版Telegram