subgraphs > Developing > FAQ

Часто задаваемы вопросы для разработчиков

Reading time: 6 min

На этой странице собраны некоторые из наиболее частых вопросов для разработчиков, использующих The Graph.

Вопросы, связанные с субграфом

Ссылка на этот раздел

1. Что такое субграф?

Ссылка на этот раздел

Субграф - это пользовательский API, построенный на данных блокчейна. Субграфы запрашиваются с использованием языка запросов GraphQL и развертываются на Graph Node с помощью Graph CLI. После развертывания и публикации в децентрализованной сети The Graph индексаторы обрабатывают субграфы и делают их доступными для запросов потребителей субграфов.

2. Каков первый шаг в создании субграфа?

Ссылка на этот раздел

Для успешного создания субграфа Вам потребуется установить The Graph CLI. Перед началом работы, ознакомьтесь с разделом Быстрый старт. Подробную информацию см. в разделе Создание субграфа.

3. Могу ли я создать субграф, если в моих смарт-контрактах нет событий?

Ссылка на этот раздел

Настоятельно рекомендуется структурировать смарт-контракты так, чтобы они содержали события, связанные с данными, которые вы хотите запросить. Обработчики событий в субграфе срабатывают на события контракта и являются самым быстрым способом получения нужных данных.

Если контракты, с которыми Вы работаете, не содержат событий, Ваш субграф может использовать обработчики вызовов и блоков для запуска индексации. Хотя это не рекомендуется, так как производительность будет существенно ниже.

4. Могу ли я изменить учетную запись GitHub, связанную с моим субграфом?

Ссылка на этот раздел

Нет. После создания субграфа связанная с ним учетная запись GitHub не может быть изменена. Пожалуйста, учтите это перед созданием субграфа.

5. Как обновить субграф в майннете?

Ссылка на этот раздел

Вы можете развернуть новую версию своего субграфа в Subgraph Studio с помощью интерфейса командной строки (CLI). Это действие сохраняет конфиденциальность вашего субграфа, но, если результат Вас удовлетворит, Вы сможете опубликовать его в Graph Explorer. При этом будет создана новая версия Вашего субграфа, на которую Кураторы смогут начать подавать сигналы.

6. Можно ли дублировать субграф на другую учетную запись или конечную точку без повторного развертывания?

Ссылка на этот раздел

Вы должны повторно развернуть субграф, но если идентификатор субграфа (хэш IPFS) не изменится, его не нужно будет синхронизировать с самого начала.

7. Как вызвать контрактную функцию или получить доступ к публичной переменной состояния из моих мэппингов субграфа?

Ссылка на этот раздел

Просмотрите положение Доступ к смарт-контракту в разделе AssemblyScript API.

8. Могу ли я импортировать ethers.js или другие библиотеки JS в мои мэппинги субграфов?

Ссылка на этот раздел

В настоящее время нет, так как мэппинги написаны на языке AssemblyScript.

Одним из возможных альтернативных решений является хранение необработанных данных в объектах и выполнение логики, для которой требуются библиотеки JS на клиенте.

9. При прослушивании нескольких контрактов, возможно ли выбрать порядок прослушивания событий контрактов?

Ссылка на этот раздел

Внутри субграфа события всегда обрабатываются в том порядке, в котором они появляются в блоках, независимо от того, относится ли это к нескольким контрактам или нет.

10. Чем шаблоны отличаются от источников данных?

Ссылка на этот раздел

Шаблоны позволяют Вам быстро создавать источники данных, пока Ваш субграф индексируется. Ваш контракт может создавать новые контракты по мере того, как люди будут с ним взаимодействовать. Поскольку форма этих контрактов (ABI, события и т. д.) известна заранее, Вы сможете определить, как Вы хотите индексировать их в шаблоне. Когда они будут сгенерированы, Ваш субграф создаст динамический источник данных, предоставив адрес контракта.

Ознакомьтесь с параграфом "Создание экземпляра шаблона источника данных" в разделе: Шаблоны источников данных.

11. Можно ли настроить субграф с помощью graph init из graph-cli с двумя контрактами? Или мне следует вручную добавить другой источник данных в subgraph.yaml после запуска graph init?

Ссылка на этот раздел

Да. В самой команде graph init Вы можете добавлять несколько источников данных, вводя контракты один за другим.

Вы также можете использовать команду graph add для добавления нового источника данных.

12. В каком порядке вызываются обработчики событий, блоков и вызовов для источника данных?

Ссылка на этот раздел

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.

13. Как убедиться, что я использую последнюю версию graph-node для своих локальных развертываний?

Ссылка на этот раздел

Вы можете запустить следующую команду:

docker pull graphprotocol/graph-node:latest

Примечание: docker / docker-compose всегда будет использовать ту версию graph-node, которая была получена при первом запуске, поэтому убедитесь, что используете последнюю версию graph-node.

14. Каков рекомендуемый способ создания "автоматически сгенерированных" идентификаторов для объекта при обработке событий?

Ссылка на этот раздел

Если во время события создается только один объект и нет ничего лучшего, то индекс хэша транзакции и журнала будет уникальным. Вы можете замаскировать их, преобразовав в байты, а затем, пропустив через crypto.keccak256, но это не сделает их более уникальными.

15. Могу ли я удалить свой субграф?

Ссылка на этот раздел

Yes, you can delete and transfer your subgraph.

Вопросы, связанный с сетью

Ссылка на этот раздел

16. Какие сети поддерживает The Graph?

Ссылка на этот раздел

Вы можете найти список поддерживаемых сетей здесь.

17. Можно ли различать сети (майннет, Sepolia, локальную) внутри обработчиков событий?

Ссылка на этот раздел

Да. Вы можете это сделать, импортировав graph-ts, как показано в примере ниже:

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

18. Поддерживаете ли Вы обработчики блоков и вызовов на Sepolia?

Ссылка на этот раздел

Да. Sepolia поддерживает обработчики блоков, обработчики вызовов и обработчики событий. Следует отметить, что обработчики событий намного более эффективны, чем два других обработчика, и они поддерживаются в каждой сети, совместимой с EVM.

Вопросы, связанные с Индексированием & Запросами

Ссылка на этот раздел

19. Можно ли указать, с какого блока следует начинать индексирование?

Ссылка на этот раздел

Да. dataSources.source.startBlock в файле subgraph.yaml указывает номер блока, с которого источник данных начинает индексирование. В большинстве случаев мы предлагаем использовать блок, в котором создавался контракт: Стартовые блоки

20. Есть ли какие-либо советы по увеличению производительности индексирования? Синхронизация моего субграфа занимает очень много времени

Ссылка на этот раздел

Да, Вам следует обратить внимание на дополнительную функцию стартового блока, чтобы начать индексирование с блока, в котором был развернут контракт: Стартовые блоки

21. Есть ли способ напрямую запросить субграф, чтобы определить номер последнего проиндексированного блока?

Ссылка на этот раздел

Да! Попробуйте выполнить следующую команду, заменив "organization/subgraphName" на название организации, под которой она опубликована, и имя Вашего субграфа:

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

22. Есть ли ограничение на количество объектов, которые The Graph может вернуть за один запрос?

Ссылка на этот раздел

По умолчанию ответы на запросы ограничены 100 единицами на коллекцию. Если Вы хотите получить больше, Вы можете довести количество до 1000 единиц на коллекцию, а для получения ещё большего количества можно использовать пагинацию:

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

23. If my dapp frontend uses The Graph for querying, do I need to write my API key into the frontend directly? What if we pay query fees for users – will malicious users cause our query fees to be very high?

Ссылка на этот раздел

В настоящее время рекомендуемым подходом для децентрализованного приложения является добавление ключа во внешний интерфейс и предоставление его конечным пользователям. При этом Вы можете ограничить этот ключ именем хоста, например yourdapp.io и субграфом. Шлюз в настоящее время находится в управлении Edge & Node. Частью ответственности шлюза является отслеживание злоупотреблений и блокировка трафика от вредоносных клиентов.

24. Можно ли использовать Apollo Federation поверх graph-node?

Ссылка на этот раздел

Federation пока не поддерживается. В настоящее время Вы можете использовать объединение схем либо на клиенте, либо через прокси-сервис.

25. Я хочу внести свой вклад или добавить задачу на GitHub. Где я могу найти репозитории с открытым исходным кодом?

Ссылка на этот раздел
  • graph-node
  • graph-tooling
  • graph-docs
  • graph-client
Редактировать страницу

Предыдущий
Delete a Subgraph
Следующий
Выставление счетов
Редактировать страницу