О The Graph
Reading time: 4 minutes
Что такое Graph?
The Graph — это мощный децентрализованный протокол, который позволяет беспрепятственно запрашивать и индексировать данные блокчейна. Это упрощает сложный процесс запроса данных блокчейна, ускоряя и упрощая разработку децентрализованных приложений.
Понимание основ
Проекты со сложными смарт-контрактами, такие как Uniswap, и инициативы по созданию NFT, подобные Bored Ape Yacht Club, хранят данные в блокчейне Ethereum, что делает практически невозможным непосредственное чтение чего-либо, кроме базовых данных, из блокчейна.
Сложности, которые могут возникнуть без использования The Graph
В приведенном выше примере, Bored Ape Yacht Club, Вы можете выполнять базовые операции чтения контракта. Вы можете узнать владельца определенного Ape, прочитать URI контента Ape на основе его идентификатора или узнать общее предложение.
-
Это можно сделать, поскольку данные операции чтения запрограммированы непосредственно в самом смарт-контракте. Однако более сложные, конкретные и реальные запросы и операции, такие как агрегирование, поиск, связи и нетривиальная фильтрация, невозможны.
-
Например, если Вы хотите узнать об Apes, принадлежащих определенному адресу, и уточнить свой поиск на основе конкретной характеристики, Вы не сможете получить эту информацию путем прямого взаимодействия с самим контрактом.
-
Чтобы получить больше данных, Вам придется обработать каждое когда-либо созданное событие
передачи
, прочитать метаданные из IPFS, используя идентификатор токена и хэш IPFS, а затем агрегировать их.
Почему это является проблемой?
Децентрализованному приложению (dapp), запущенному в браузере, потребуются часы или даже дни, чтобы получить ответ на эти простые вопросы.
Alternatively, you have the option to set up your own server, process the transactions, store them in a database, and create an API endpoint to query the data. However, this option is resource intensive, needs maintenance, presents a single point of failure, and breaks important security properties required for decentralization.
Такие свойства блокчейна, как окончательность, реорганизация чейна и необработанные блоки, усложняют процесс, делая получение точных результатов запроса из данных блокчейна трудоемким и концептуально сложным.
The Graph предлагает решение
The Graph решает эту проблему с помощью децентрализованного протокола, который индексирует и обеспечивает эффективный и высокопроизводительный запрос данных блокчейна. Эти API (индексированные «субграфы») затем могут быть запрошены с помощью стандартного API GraphQL.
Сегодня существует децентрализованный протокол, поддерживаемый реализацией с открытым исходным кодом Graph Node, который обеспечивает этот процесс.
Как функционирует The Graph
Индексирование данных блокчейна очень сложный процесс, но The Graph упрощает его. The Graph учится индексировать данные Ethereum с помощью субграфов. Субграфы — это пользовательские API, построенные на данных блокчейна, которые извлекают данные из блокчейна, обрабатывают их и сохраняют так, чтобы их можно было легко запрашивать через GraphQL.
Специфические особенности
-
В The Graph используются описания субграфов, которые называются манифестами субграфов внутри субграфа.
-
В описании субграфа описываются смарт-контракты, представляющие интерес для субграфа, события в этих контрактах, на которых следует сосредоточиться, а также способы сопоставления данных о событиях с данными, которые The Graph будет хранить в своей базе данных.
-
При создании субграфа Вам необходимо написать манифест субграфа.
-
После написания
манифеста субграфа
Вы можете использовать Graph CLI для сохранения определения в IPFS и дать команду индексатору начать индексирование данных для этого субграфа.
На диаграмме ниже представлена более подробная информация о потоке данных после развертывания манифеста субграфа с транзакциями Ethereum.

Данные проходят следующий путь:
- Dapp добавляет данные в Ethereum через транзакцию в смарт-контракте.
- Смарт-контракт генерирует одно или несколько событий во время обработки транзакции.
- Graph Node постоянно сканирует Ethereum на наличие новых блоков и данных для Вашего субграфа, которые они могут содержать.
- The Graph нода затем разбирает события, относящиеся к Вашему субграфу, которые записаны в данном блоке и структурирует их согласно схеме данных описанной в subgraph используя модуль WASM. Затем данные сохраняются в таблицы базы данных Graph Node.
- Dapp запрашивает у Graph Node данные, проиндексированные с блокчейна, используя конечную точку GraphQL ноды. В свою очередь, Graph Node переводит запросы GraphQL в запросы к его базовому хранилищу данных, чтобы получить эти данные, используя возможности индексации этого хранилища. Dapp отображает эти данные в насыщенном пользовательском интерфейсе для конечных пользователей, который они используют для создания новых транзакций в Ethereum. Цикл повторяется.
Что далее
В следующих разделах более подробно рассматриваются субграфы, их развертывание и запросы данных.
Прежде чем писать собственный субграф, рекомендуется ознакомиться с Graph Explorer и изучить некоторые из уже развернутых субграфов. Страница каждого субграфа включает в себя тестовую площадку GraphQL, позволяющую запрашивать его данные.