現像 > 開発者 FAQ

開発者 FAQ

Reading time: 12 min

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

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

Take a look at Access to smart contract state inside the section AssemblyScript API.

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

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

Yes. On graph init command itself you can add multiple datasources by entering contracts one after the other. You can also use graph add command to add new datasource.

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

このセクションへのリンク
  • graph-node
  • graph-tooling
  • graph-docs
  • graph-client

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

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

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

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

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

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

14. Is it possible to differentiate between networks (mainnet, Sepolia, local) from within event handlers?

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

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

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

15. Do you support block and call handlers on Sepolia?

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

Yes. Sepolia supports block handlers, call handlers and event handlers. It should be noted that event handlers are far more performant than the other two handlers, and they are supported on every EVM-compatible network.

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

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

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

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

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

Yes. dataSources.source.startBlock in the subgraph.yaml file specifies the number of the block that the data source starts indexing from. In most cases, we suggest using the block in which the contract was created: Start blocks

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. メインネットのサブグラフを更新するには?

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

If you’re a subgraph developer, you can deploy a new version of your subgraph to Subgraph Studio using the CLI. It’ll be private at that point, but if you’re happy with it, you can publish to the decentralized Graph Explorer. This will create a new version of your subgraph that Curators can start signaling on.

28. In what order are the event, block, and call handlers triggered for a data source?

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

Event and call handlers are first ordered by transaction index within the block. Event and call handlers within the same transaction are ordered using a convention: event handlers first then call handlers, each type respecting the order they are defined in the manifest. Block handlers are run after event and call handlers, in the order they are defined in the manifest. Also these ordering rules are subject to change.

When new dynamic data source are created, the handlers defined for dynamic data sources will only start processing after all existing data source handlers are processed, and will repeat in the same sequence whenever triggered.

ページを編集

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