Почему Graph может стать одним из важных протоколов Web3…

Airat Baiazitov
5 min readDec 21, 2020

Доступ к данным играет важную роль в любой технологической тенденции в истории программного обеспечения. Технологии доступа к данным, такие как базы данных, поисковые системы или API, настолько распространены, что мы почти не задумываемся о них при разработке программных решений. По мере развития Web 3.0 и децентрализованных приложений, основанных на технологиях блокчейн, соответствующая инфраструктура, как например доступ к данным также развиваются. Однако решение доступа к данным в блокчейне оказалось очень сложной задачей, которая заставляет разработчиков тратить значительное количество времени на написание кода. Среди имеющихся на рынке решений доступа к данным Web3, Graph Protocol — это то, что мне особенно нравится из-за его простоты и разумного использования современных технологий.

Мы столкнулись с The Graph несколько месяцев назад во время одной из наших реализаций блокчейна и с тех пор тестируем и отслеживаем проект. Основная идея The Graph состоит в том, чтобы сделать данные блокчейна доступными для запросов, используя установленные протоколы доступа к данным, такие как GraphQL. Хотя эта идея кажется тривиальной, ее реализация полна нетривиальных проблем.

Проблемы с запросом данных блокчейна

За последние 5 десятилетий в индустрии программного обеспечения все технологические тенденции развились в технологиях доступа к данным, поскольку они смогли развить инфраструктуру, созданную предыдущими тенденциями. От файловых систем до современного движения больших данных сами производственные циклы технологий доступа к данным стали короче, а их возможности — намного расширились. Эта эволюционная картина полностью изменилась с появлением технологий блокчейн, потому что, в отличие от других технологических движений, пространство блокчейнов переосмысливает доступ к данным, начиная с уровней хранения и сетевого протокола. С этой точки зрения, большинство технологий доступа к данным и передовые практики предыдущих технологических движений оказываются непрактичными при применении к блокчейнам. Просто и понятно, Web 3.0 заслуживает соответствующего протокола доступа к данным Web 3.0.

Что делает доступ к данным блокчейна таким сложным? На мой взгляд, эта проблема имеет свои корни в трех основных причинах:

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

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

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

Исходя из трех вышеупомянутых проблем становится понятным, что надежный стек доступа к данным Web 3.0 должен обладать тремя основными возможностями:

а) Возможность доступа к информации, как если бы она хранилась в централизованном хранилище.

б) Возможность запрашивать записи на основе их атрибутов.

в) Возможность эффективной навигации по данным блокчейна на основе определенных критериев.

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

Введение в Graph

Концептуально Graph — это децентрализованный протокол для индексации и запроса данных блокчейна. Graph начинается с создания манифеста, описывающего представление данных блокчейна. В манифесте можно указать атрибуты для определенного протокола децентрализованного приложения. После создания манифеста Graph фиксирует внутренние события из этого конкретного протокола или приложения и индексирует их в IPFS, используя манифест в качестве руководства. Наконец, данные предоставляются API-интерфейсами на основе популярного языка GraphQL . Graph преобразует запросы GraphQL в команды IPFS, используемые для доступа к данным.

С точки зрения архитектуры The Graph основан на следующих компонентах:

· Graph CLI: инструмент на основе JavaScript, который позволяет разработчикам определять сабграфы, описывающие структуры блокчейна, которые будут индексироваться Graph. Сабграф состоит из трех частей: Manifest, Schema и Mappings. Manifest указывает на данныt, которые нужно проиндексировать (например, смарт-контракт), и любую информацию декодирования (ABI). Mappings — это функции TypeScript, описывающие, как преобразовывать или агрегировать данные. Graph CLI компилирует все это в модуль WASM, который может быть выполнен Graph Node.

· Postgres Store : база данных на основе Postgress, которая хранит и индексирует данные блокчейна в определенных таблицах (Entity (Сущность), Attribute (Атрибут), Value (Значение)). Эта структура эффективно отображается в синтаксисе GraphQL.

· Сервер GraphQL : хост для GraphQL API и других компонентов стека.

· Адаптер Ethereum : компонент, который подписывается на события Ethereum с помощью IPC или RPC и получает доступ к хранилищу смарт-контрактов.

· WASM Runtime Host : модуль, который выполняет сопоставления для преобразования данных цепочки блоков в индексируемые и запрашиваемые структуры данных.

Пропустив несколько шагов для простоты, давайте проиллюстрируем, как работает протокол Graph. Первый шаг — определить манифест сабграфа с использованием синтаксиса YAML следующим образом:

Как видно из определения, предыдущий сабграф захватывает данные в событии Transfer определенного смарт-контракта (MyERC721Contract). Конкретные данные, которые необходимо захватить, определяются файлом JSON контракта ABI:

Следующим шагом является написание функции mappings, которая преобразует данные из блокчейна Ethereum в определенный сабграф:

На этом этапе сабграф можно развернуть, и мы можем начать прослушивание событий из блокчейна Ethereum. Текущая версия The Graph поддерживает сбор данных Ethereum с помощью Infura, на котором размещается локальный узел Ethereum или Ganache. Следующий код запускает узел Graph, прослушивающий данные через Infura API:

Наконец, мы можем запрашивать данные, используя синтаксис GraphQL:

Разработчики уже развернули сабграфы для популярных протоколов и приложений с помощью The Graph. Вы можете увидеть многие из них с помощью Graph Explorer, который предоставляет удобный пользовательский интерфейс для выполнения запросов GraphQL для определенных смарт-контрактов или приложений.

Graph — является прекрасной итерацией для решения одной из самых важных проблем приложений Web 3.0. Используя такие известные технологии, как IPFS, Postgress или GraphQL, The Graph понижает планку входа для разработчиков, запрашивающих данные блокчейна. Чтобы сделать вещи еще более захватывающими, текущий код Graph находится в открытом доступе и сейчас в стадии активной доработки. Хотя Graph все еще находится на очень ранней стадии, он, кажется, имеет технологическую базу, чтобы стать одним из наиболее важных протоколов Web 3.0.

www.thegraph.com

Данная статья является переводом, оригинал статьи доступен по ссылке:

https://hackernoon.com/querying-the-blockchain-why-the-graph-might-become-one-of-the-important-protocols-of-the-web3-eb77673bc967

Автор оригинала: Jesus Rodriguez @jrodthoughts

Статья написана два года назад, в январе 2019, возможно некоторым будет интересно узнать о развитии проекта Graph.

--

--