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

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

Reading time: 6 min

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

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

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

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

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

После создания субграфов их удаление невозможно.

3. Могу ли я изменить имя своего субграфа?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

docker pull graphprotocol/graph-node:latest

ПРИМЕЧАНИЕ: docker / docker-compose всегда будет использовать ту версию graph-node, которая была получена при первом запуске, поэтому важно сделать это, чтобы убедиться, что Вы используете последнюю версию graph-node.

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

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

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

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

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

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

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

Ссылка на этот раздел
  • graph-node
  • graph-cli
  • graph-ts

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

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

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

13. Можно ли при прослушивании нескольких контрактов выбрать порядок, в котором контракты прослушивают события?

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

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

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

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

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

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

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

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

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

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

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

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

17. Можно ли указать, с какого блока следует начинать индексацию?

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

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

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

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

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

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. Можно ли дублировать субграф на другую учетную запись или эндпоинт без повторного развертывания?

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

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

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

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

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

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

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

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

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

24. Если мой интерфейс децентрализованного приложения использует The Graph для запросов, нужно ли мне напрямую записывать ключ запроса во внешний интерфейс? Не станут ли очень высокими комиссии за запросы пользователей вследствие их злонамеренных действий?

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

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

25. Where do I go to find my current subgraph on the hosted service?

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

Перейдите в Hosted Service, чтобы найти субграфы, которые Вы или другие развернули в нём. Вы можете найти его здесь.

26. Will the hosted service start charging query fees?

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

The Graph никогда не будет взимать плату за Hosted Service. The Graph — это децентрализованный протокол, и взимание платы за централизованную услугу не соответствует ценностям The Graph. Hosted Service всегда был временным шагом, помогающим получить доступ к децентрализованной сети. У разработчиков будет достаточно времени, чтобы перейти на децентрализованную сеть, когда им будет удобно.

27. How do I update a subgraph on mainnet?

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

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

Редактировать страницу

Предыдущий
Фреймворк модульного тестирования
Следующий
Часто задаваемые вопросы о субграфах, работающих на основе субпотоков (Substreams)
Редактировать страницу