現像 > 開発者 FAQ

開発者 FAQ

1. サブグラフとは

このセクションへのリンク

サブグラフは、ブロックチェーンデータを基に構築されたカスタムAPIです。サブグラフはGraphQLクエリ言語を使ってクエリされ、Graph CLIを使ってGraph Nodeにデプロイされます。デプロイされ、The Graphの分散型ネットワークに公開されると、インデクサーはサブグラフを処理し、サブグラフの消費者がクエリできるようにします。

2. サブグラフを削除できますか?

このセクションへのリンク

一度作成したサブグラフの削除はできません。

3. サブグラフ名を変更できますか?

このセクションへのリンク

一度作成したサブグラフの名前を変更することはできません。サブグラフを作成する際には、他の dapps から検索しやすく、識別しやすい名前になるよう、よく考えてから作成してください。

4. サブグラフに関連付けられている GitHub アカウントを変更できますか?

このセクションへのリンク

一度作成したサブグラフに関連する GitHub のアカウントは変更できません。サブグラフを作成する前に、この点をよく考えてください。

5. スマート コントラクトにイベントがない場合でもサブグラフを作成できますか?

このセクションへのリンク

スマートコントラクトを構成して、クエリしたいデータに関連するイベントを持つことを強くお勧めします。サブグラフ内のイベントハンドラは、コントラクトのイベントによってトリガされ、有用なデータを取得するための圧倒的に速い方法です。

使用しているコントラクトにイベントが含まれていない場合、サブグラフはコールハンドラとブロックハンドラを使用してインデックス作成をトリガすることができます。しかし、パフォーマンスが大幅に低下するため、これは推奨されません。

6. 複数のネットワークに同じ名前の 1 つのサブグラフを展開することは可能ですか?

このセクションへのリンク

複数のネットワークには別々の名前が必要です。同じ名前で異なるサブグラフを持つことはできませんが、単一のコードベースで複数のネットワークに対応する便利な方法があります。詳しくはドキュメントをご覧ください: Redeploying a Subgraph

7. テンプレートとデータ ソースの違いは何ですか?

このセクションへのリンク

テンプレートは、サブグラフがインデックスを作成している間に、その場でデータソースを作成することができます。また、コントラクトの形状(ABI、イベントなど)を前もって知っているので、テンプレートでどのようにインデックスを作成するかを定義することができ、コントラクトが作成されると、サブグラフはコントラクトのアドレスを供給することで動的なデータソースを作成します。

データソース・テンプレートのインスタンス化」のセクションをご覧ください: Data Source Templates

8. ローカル展開に最新バージョンのグラフノードを使用していることを確認するにはどうすればよいですか?

このセクションへのリンク

以下のコマンドを実行してください:

docker pull graphprotocol/graph-node:latest

注: docker / docker-compose は、最初に実行したときにプルされた graph-node のバージョンを常に使用しますので、最新版の graph-node を使用していることを確認するために、このコマンドを実行することが重要です。

9. コントラクト関数を呼び出したり、サブグラフ マッピングから公開状態変数にアクセスするにはどうすればよいですか?

このセクションへのリンク

AssemblyScript API セクション内の スマート コントラクトへのアクセス 状態を見てください。

10. 2 つのコントラクトを持つ graph-cli から graph init を使用してサブグラフをセットアップすることは可能ですか?または、graph init を実行した後、subgraph.yaml に別のデータソースを手動で追加する必要がありますか?

このセクションへのリンク

graph initは基本的な出発点として意図されており、そこから手動でデータソースを追加することができます。

11. GitHub の問題に貢献または追加したい。オープンソースのリポジトリはどこにありますか?

このセクションへのリンク
  • graph-node
  • graph-cli
  • graph-ts

12. イベントを処理するときに、エンティティの「自動生成」Id を作成するための推奨される方法は何ですか?

このセクションへのリンク

もし、イベント中に 1 つのエンティティしか作成されず、他に利用できるものがなければ、トランザクションハッシュ+ログインデックスがユニークになります。Bytes に変換してcrypto.keccak256に通すことで難読化することができますが、これでは一意性は高まりません。

13. 複数の契約を聞く場合、契約順を選択してイベントを聞くことはできますか?

このセクションへのリンク

サブグラフ内では、複数のコントラクトにまたがっているかどうかにかかわらず、イベントは常にブロックに表示される順序で処理されます。

14. イベント ハンドラー内からネットワーク (メインネット、Goerli、ローカル) を区別することは可能ですか?

このセクションへのリンク

はい、以下の例のようにgraph-tsをインポートすることで可能です。

import { dataSource } from '@graphprotocol/graph-ts'
dataSource.network()
dataSource.address()

15. Goerli でブロック ハンドラーとコール ハンドラーをサポートしていますか?

このセクションへのリンク

はい。 Goerli は、ブロック ハンドラー、コール ハンドラー、およびイベント ハンドラーをサポートしています。イベント ハンドラーは、他の 2 つのハンドラーよりもはるかにパフォーマンスが高く、すべての EVM 互換ネットワークでサポートされていることに注意してください。

16. サブグラフ マッピングに ethers.js または他の JS ライブラリをインポートできますか?

このセクションへのリンク

マッピングは AssemblyScript で書かれているため、現在はできません。代替案としては、生データをエンティティに格納し、JS ライブラリを必要とするロジックをクライアントで実行することが考えられます。

17. インデックス作成を開始するブロックを指定することはできますか?

このセクションへのリンク

はい。subgraph.yamlファイルのdataSources.source.startBlockは、データソースがインデックス作成を開始するブロックの番号を指定します。ほとんどの場合、コントラクトが作成されたブロックを使用することをお勧めします。開始ブロック

18. インデックス作成のパフォーマンスを向上させるためのヒントはありますか? サブグラフの同期に非常に時間がかかる

このセクションへのリンク

はい、コントラクトがデプロイされたブロックからインデックス作成を開始するオプションのスタートブロック機能をご利用ください: Start blocks

19. サブグラフに直接クエリを実行して、インデックスが作成された最新のブロック番号を特定する方法はありますか?

このセクションへのリンク

はい、あります。organization/subgraphName」を公開先の組織とサブグラフの名前に置き換えて、以下のコマンドを実行してみてください:

curl -X POST -d '{ "query": "{indexingStatusForCurrentVersion(subgraphName: \"organization/subgraphName\") { chains { latestBlock { hash number }}}}"}' https://api.thegraph.com/index-node/graphql

20. The Graph はどのネットワークをサポートしていますか?

このセクションへのリンク

対応ネットワークの一覧はこちらで確認できます。

21. 再デプロイせずにサブグラフを別のアカウントまたはエンドポイントに複製することは可能ですか?

このセクションへのリンク

サブグラフを再デプロイする必要がありますが、サブグラフの ID(IPFS ハッシュ)が変わらなければ、最初から同期する必要はありません。

22. グラフノード上で Apollo Federation を使用することは可能ですか?

このセクションへのリンク

将来的にはサポートしたいと考えていますが、フェデレーションはまだサポートされていません。現時点でできることは、クライアント上またはプロキシサービス経由でスキーマステッチを使用することです。

23. グラフがクエリごとに返すことができるオブジェクトの数に制限はありますか?

このセクションへのリンク

デフォルトでは、クエリの応答は 1 つのコレクションにつき 100 アイテムに制限されています。それ以上の数を受け取りたい場合は、1 コレクションあたり 1000 アイテムまで、それ以上は以下のようにページネーションすることができます:

someCollection(first: 1000, skip: <number>) { ... }

24. dapp フロントエンドがクエリに The Graph を使用する場合、クエリ キーをフロントエンドに直接書き込む必要がありますか? ユーザーにクエリ料金を支払う場合はどうなりますか? 悪意のあるユーザーによってクエリ料金が非常に高くなることはありますか?

このセクションへのリンク

現在、dapp の推奨されるアプローチは、キーをフロントエンドに追加し、それをエンド ユーザーに公開することです。とはいえ、そのキーを yourdapp.io や subgraph.ゲートウェイは現在 Edge & によって実行されています。ノード。ゲートウェイの責任の一部は、不正行為を監視し、悪意のあるクライアントからのトラフィックをブロックすることです。

25. ホスティングサービス上の現在のサブグラフはどこで見ることができますか?

このセクションへのリンク

自分または他の人がホストされたサービスにデプロイしたサブグラフを見つけるには、ホストされたサービスに移動します。 こちらでご覧いただけます。

26. ホスティングサービスはクエリ料金を請求するようになりますか?

このセクションへのリンク

Graph は、ホストされるサービスに対して料金を請求することはありません。 Graph は分散型プロトコルであり、集中型サービスに対する課金は The Graph の価値観と一致していません。ホスト型サービスは常に、分散型ネットワークにアクセスするための一時的なステップでした。開発者には、快適に分散ネットワークにアップグレードするのに十分な時間があります。

27. メインネットのサブグラフを更新するには?

このセクションへのリンク

サブグラフ開発者の場合は、CLI を使用して新しいバージョンのサブグラフを Subgraph Studio にデプロイできます。この時点では非公開になりますが、問題がなければ、分散型の Graph Explorer に公開できます。これにより、キュレーターがシグナリングを開始できるサブグラフの新しいバージョンが作成されます。

ページを編集

ユニットテストフレームワーク
サブストリームを利用したサブグラフに関するよくある質問
ページを編集