О The Graph
Reading time: 4 min
The Graph — это мощный децентрализованный протокол, который позволяет беспрепятственно запрашивать и индексировать данные блокчейна. Это упрощает сложный процесс запроса данных блокчейна, ускоряя и упрощая разработку децентрализованных приложений.
Проекты со сложными смарт-контрактами, такие как , и инициативы по созданию NFT, подобные , хранят данные в блокчейне Ethereum, что делает практически невозможным непосредственное чтение чего-либо, кроме базовых данных, из блокчейна.
В приведенном выше примере, Bored Ape Yacht Club, Вы можете выполнять базовые операции чтения . Вы можете узнать владельца определенного Ape, прочитать URI контента Ape на основе его идентификатора или узнать общее предложение.
-
Это можно сделать, поскольку данные операции чтения запрограммированы непосредственно в самом смарт-контракте. Однако более сложные, конкретные и реальные запросы и операции, такие как агрегирование, поиск, связи и нетривиальная фильтрация, невозможны.
-
Например, если Вы хотите узнать об Apes, принадлежащих определенному адресу, и уточнить свой поиск на основе конкретной характеристики, Вы не сможете получить эту информацию путем прямого взаимодействия с самим контрактом.
-
Чтобы получить больше данных, Вам придется обработать каждое когда-либо созданное событие , прочитать метаданные из IPFS, используя идентификатор токена и хэш IPFS, а затем агрегировать их.
Децентрализованному приложению (dapp), запущенному в браузере, потребуются часы или даже дни, чтобы получить ответ на эти простые вопросы.
В качестве альтернативы у Вас есть возможность настроить собственный сервер, обрабатывать транзакции, хранить их в базе данных и создать конечную точку API для запроса данных. Однако этот вариант , требует обслуживания, представляет собой единственную возможную причину сбоя и нарушает важные свойства безопасности, необходимые для децентрализации.
Такие свойства блокчейна, как окончательность, реорганизация чейна и необработанные блоки, усложняют процесс, делая получение точных результатов запроса из данных блокчейна трудоемким и концептуально сложным.
The Graph решает эту проблему с помощью децентрализованного протокола, который индексирует и обеспечивает эффективный и высокопроизводительный запрос данных блокчейна. Эти API (индексированные «субграфы») затем могут быть запрошены с помощью стандартного API GraphQL.
Сегодня существует децентрализованный протокол, поддерживаемый реализацией с открытым исходным кодом , который обеспечивает этот процесс.
Индексирование данных блокчейна очень сложный процесс, но 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 данные, проиндексированные с блокчейна, используя ноды. В свою очередь, Graph Node переводит запросы GraphQL в запросы к его базовому хранилищу данных, чтобы получить эти данные, используя возможности индексации этого хранилища. Dapp отображает эти данные в насыщенном пользовательском интерфейсе для конечных пользователей, который они используют для создания новых транзакций в Ethereum. Цикл повторяется.
В следующих разделах более подробно рассматриваются субграфы, их развертывание и запросы данных.
Прежде чем писать собственный субграф, рекомендуется ознакомиться с и изучить некоторые из уже развернутых субграфов. Страница каждого субграфа включает в себя тестовую площадку GraphQL, позволяющую запрашивать его данные.