Любой, кто когда-либо пытался создать распределенное приложение (dApp) на блокчейне (Ethereum), согласится: хотя блокчейны концептуально довольно близки к базам данных, запросы к базам данных кажутся совершенно другим миром по сравнению с запросами к блокчейну.
Проблематика запросов к блокчейну
Во-первых, по сравнению с базами данных у блокчейна есть заметные проблемы с производительностью при хранении информации. Во вторых, блокчейн чрезвычайно сложен, поскольку он состоит из сети узлов, где каждый узел хранит полную копию всей базы данных, и каждая транзакция проверяется каждым узлом. Из-за этого запросы к блокчейну обрабатывается намного медленнее, чем запросы к базам данных.
Вот почему разработчики постоянно экспериментируют с различными подходами к использованию блокчейна в качестве базы данных, включая изменение структуры самих блокчейнов.
The Graph - быстрый доступ к блокчейну
The Graph - это децентрализованный протокол для индексации данных из блокчейнов. Вместо изменения структуры блокчейна, Graph делает нечто иное: он позволяет блокчейну существовать, но предлагает новый способ эффективно индексировать и запрашивать данные, используя язык GraphQL.
Когда Graph был впервые представлен в июле 2018 года, руководитель проекта Янив Таль упомянул, что они запустят локальный узел, а затем полностью децентрализованную гибридную сеть Graph. Гибридная сеть - это вариант конструкции API, который устраняет разрыв между централизованными и децентрализованными протоколами. Это позволяет облегчить использование блокчейна в качества базы данных.
Открытый исходный код Graph
The Graph - это открытая торговая площадка, которая не взимает плату за использование. The Graph имеет открытый исходный код для всех своих основных компонентов, включая: Graph Node (реализация узла индексации, встроенного в Rust), Graph TS (помощники AssemblyScript для построения сопоставлений) и Graph CLI (инструменты командной строки для ускорения разработки).
По словам Янива Таля, суть проекта The Graph, - это определение детерминированного способа индексирования. Graph Node определяет абстракцию хранилища, которую они реализуют с помощью одной из самых обширных баз данных с открытым исходным кодом PostgreSQL.
В одном из своих интервью Янив Таль заметил:
«Все, что вам нужно для запуска подграфа, это иметь открытый исходный код. Прямо сейчас в качестве механизма хранения мы используем базу Postgres. Graph Node определяет абстракцию хранилища, которую мы реализуем с помощью Postgres. Мы написали много кода, но сделали его открытым, поэтому все это не является проприетарным».
Подграф, на который здесь ссылается Тал, - это просто часть цепочки блоков, используемая для хранения данных для определенных приложений dApp. Определение подграфа - это первый шаг к использованию Graph. Подграфы для популярных протоколов и dApps уже используются, и их можно просматривать с помощью Graph Explorer, который представляет собой простой пользовательский интерфейс внутри сервиса.
Graph Explorer
Graph Explorer позволяет разработчикам легко находить все данные, индексируемые в Graph, и легко загружать их в свои dApps. Graph Explorer был запущен со следующими функциями:
- Площадка для поиска доступных данных с помощью интроспекции и выполнения запросов
- Журналы для просмотра обработанных событий и ошибок
- Атомарные обновления без простоев
- Панель управления для просмотра подграфов и управления токенами
- Переключатель версий для перехода между ожидаемой и текущей версиями во время синхронизации подграфа
- Аутентификация GitHub с поддержкой индивидуальных и корпоративных учетных записей
Graph Explorer делает значительно упрощает работу с децентрализованными приложениями. С запуском размещенной службы и Graph Explorer сообщество Ethereum получило более удобный и быстрый доступ к организованным данным из Ethereum и IPFS.
Использование языка GraphQL в dApps
Доступ к данным блокчейна затруднен по трем фундаментальным причинам: децентрализация, непрозрачность и последовательное хранение данных. Для упрощения блокчейна есть два варианта:
Написание пользовательского кода для поиска данных, и повторение этих (весьма дорогих) операций каждый раз, когда данные снова понадобятся
Одноразовое получение данных и сохранение их в базе вне сети с построением индекса, указывающего на оригинал данные блокчейна.
Здесь на помощь приходит The Graph. Как мы обозначили выше, The Graph - это децентрализованный протокол для индексации и запроса данных блокчейна. Но это больше, чем просто протокол: у Graph также есть API с открытым исходным кодом, использующая GraphQL.
GraphQL - это язык с открытым исходным кодом для API, разработанный Facebook. Сейчас GraphQL популярен, и он определенно лучше, чем отсутствие языка запросов вообще. Значительная часть GraphQL, добавленная относительно недавно, - это SDL (язык определения схемы).
Лучший опыт разработки
Разработчики могут создать свою модель предметной области в SDL, а затем использовать ее не только для проверки JSON, возвращаемого GraphQL, но и для генерации кода в стиле MDD (Model Driven Development). В любом случае использование GraphQL не устраняет «волшебным образом» сложность сопоставления многих API. Используя этот язык, вы просто абстрагируете и переносите код в преобразователь GraphQL.
Таким образом, команда, которая использует API-интерфейсы, абстрагированные с помощью GraphQL, будет иметь лучший опыт разработки, но это должно происходить за счет команды, которая поддерживает сопоставления API.
Ключевой недостаток GraphQL заключается в том, что на данный момент смарт-контракты не могут управляться схемой GraphQL. Сначала вам нужно создать смарт-контракт, а затем схему GraphQL и преобразователь для него. Это вынуждает проходить хрупкий и утомительный цикл обновления схемы и преобразователя каждый раз, когда изменяется смарт-контракт.
Заключение: Будущее The Graph
Хотя The Graph еще не достиг полной зрелости, он прошел долгий путь за короткое время. Уже сейчас решения проекта используются в значительной части часть стека Web3, и не зря. Развитие проекта заключается в полной децентрализации стека интернет-приложений с упором в первую очередь на рабочие dApps.
Разработчики The Graph считают, что по ряду причин GraphQL имеет больше стратегического смысла для достижения этой цели, поэтому они и дальше будут использовать этот язык обработки запросов.