Общий обзор проекта The Graph
Краткое описание проекта
The Graph – это децентрализованный протокол для индексации и запроса данных из блокчейнов, начиная с Ethereum. Протокол позволяет запрашивать данные, которые трудно получить напрямую.
Проекты со сложными смарт-контрактами, такие как Uniswap, или NFT проекты, такие как Bored Ape Yacht Club, хранят свои данные в блокчейне Ethereum, что очень затрудняет чтение какой-либо дополнительной информации непосредственно из сети.
В Bored Ape Yacht Club мы можем выполнять основные операции чтения контракта, такие как получение владельца определенной обезьяны, получение URI контента обезьяны на основе ее идентификатора или общего предложения, поскольку эти операции чтения запрограммированы напрямую в смарт-контракт, но более серьезные запросы и операции реального мира, такие как агрегация, поиск, отношения и нетривиальная фильтрация, невозможны. Например, если бы мы хотели запросить обезьян, принадлежащих определенному адресу, и отфильтровать по одной из его характеристик, мы не сможем получить эту информацию, взаимодействуя непосредственно с самим контрактом.
Чтобы получить эти данные, придется обработать каждую отдельную транзакцию, прочитать метаданные из IPFS (InterPlanetary File System – новая децентрализованная сеть обмена файлами) с использованием идентификатора токена (Token ID) и хэша IPFS, а затем агрегировать их. Даже на такие относительно простые вопросы стандартному децентрализованному приложению (dapp), работающему в браузере, потребуются часы или даже дни. Вы также можете создать свой собственный сервер, обрабатывать там транзакции, сохранять их в базе данных и создавать конечную точку индексирования (API) поверх всего этого, чтобы запрашивать данные. Однако этот вариант является ресурсозатратным, требует обслуживания, представляет собой единую точку отказа и нарушает важные свойства безопасности, необходимые для децентрализации.
Какие выводы мы можем сделать из всего вышесказанного?
Индексировать данные блокчейна очень и очень сложно.
Свойства блокчейна, такие как окончательность, реорганизация цепочки или незакрепленные блоки, еще больше усложняют этот процесс и делают не только
трудоемким, но и практически сложным получение правильных результатов запроса из данных блокчейна.
Graph решает эту проблему с помощью децентрализованного протокола, который индексирует и обеспечивает производительный и эффективный запрос данных блокчейна. Эти API (индексированные «подграфы» или «субграфы») затем можно запрашивать с помощью стандартного GraphQL API (интерфейса языка программирования GraphQL). В настоящее время существует хостинговая служба, а также децентрализованный протокол с теми же возможностями. Оба поддерживаются реализацией Graph Node (ноды Graph) с открытым исходным кодом.
Как работает The Graph
The Graph учит, как индексировать данные сети Ethereum на основе описаний подграфов, известных как «манифест подграфа». Описание подграфа определяет интересующие смарт-контракты для подграфа, события в этих контрактах, на которые следует обратить внимание, и то, как сопоставлять данные событий с данными, которые The Graph будет хранить в своей базе данных. После написания манифеста подграфа вы используете интерфейс командной строки Graph для сохранения определения в IPFS и даете команду индексатору начать индексацию данных для этого подграфа. Эта диаграмма дает более подробную информацию о потоке данных после развертывания манифеста подграфа, касающегося транзакций сети
Ethereum:
Поток данных идет по следующему пути:
- Децентрализованное приложение (dapp) добавляет данные в сеть Эфира через транзакцию в смарт-контракте.
- Смарт-контракт генерирует одно или несколько событий при обработке транзакции.
- Graph нода постоянно сканирует сеть Эфира на наличие новых блоков и данных для вашего подграфа, которые они могут содержать.
- Нода находит события в сети Ethereum для вашего подграфа в этих блоках и запускает предоставленные вами обработчики сопоставления (модуль мэпинга). Этот модуль называется WASM. Он создает или обновляет объекты данных, которые нода хранит в ответ на события в сети Ethereum.
- Децентрализованное приложение запрашивает у Graph ноды данные, проиндексированные из блокчейна, используя конечную точку (ендпоинт) GraphQL. Нода, в свою очередь, преобразует запросы GraphQL в запросы к своему базовому хранилищу данных, чтобы получить эти данные, используя возможности индексирования хранилища. Децентрализованное приложение отображает эти данные в богатом пользовательском интерфейсе для конечных пользователей, которые они используют для совершения новых транзакций в сети Ethereum. Цикл повторяется.
Поддерживаемые сети
* в стадии бета-тестирования
Архитектура проекта
The Graph Network – это децентрализованный протокол индексации для организации данных блокчейна. Приложения используют GraphQL для запроса открытых API, называемых подграфами, для извлечения данных, которые индексируются в сети. С помощью The Graph разработчики могут создавать бессерверные приложения, полностью работающие в общедоступной инфраструктуре.
GRT Token Address: 0xc944e90c64b2c07662a292be6244bdf05cda44a7
Экосистема Graph состоит из разработчиков, индексаторов, кураторов и делегаторов, которые предоставляют услуги сети и передают данные приложениям Web3. Потребители используют приложения и потребляют данные.
Чтобы обеспечить экономическую безопасность сети The Graph и целостность запрашиваемых данных, участники делают ставки и используют токены Graph (GRT). GRT – это рабочий токен ERC-20 в блокчейне Ethereum, который используется для распределения ресурсов в сети. Активные индексаторы, кураторы и делегаторы могут предоставлять услуги и получать доход от сети, пропорциональный объему выполняемой ими работы и их доле токенов GRT.
Индексация
Индексаторы – это операторы ноды в сети The Graph, которые размещают токены Graph (GRT) для предоставления услуг индексирования и обработки запросов. Индексаторы получают плату за запросы и вознаграждение за индексирование за свои услуги. Они также зарабатывают из пула скидок, который распределяется между всеми участниками сети пропорционально их работе в соответствии с функцией Коббса-Дугласа.
GRT, залоченный в протоколе, подлежит сжиганию и может быть сокращен, если индексаторы предоставляют неверные данные приложениям или если они неправильно проводят индексацию данных. Индексаторам также можно делегировать долю от делегаторов, чтобы внести свой вклад в сеть.
Индексаторы выбирают подграфы для индексации на основе сигналов от кураторов подграфа, которые стейкают свои токены GRT, чтобы указать, какие подграфы являются высококачественными и должны иметь приоритет. Потребители (например, приложения) также могут задавать параметры, для которых индексаторы обрабатывают запросы для своих подграфов, и устанавливать предпочтения для ценообразования платы за запросы.
Минимальное количество монет для индексатора в настоящее время установлено на уровне 100 000 GRT.
Существуют также скидки на обслуживание запросов в сети. Эти платежи осуществляются через каналы состояния между индексатором и шлюзом. Каждый запрос от шлюза содержит платеж и соответствующий ответ, подтверждающий достоверность результата запроса.
Вознаграждения за индексацию
Вознаграждение за индексацию происходит от инфляции протокола, которая установлена на уровне 3% годовой эмиссии. Они распределяются по подграфам в зависимости от доли всех сигналов курирования в каждом из них, а затем в равных долях распределяются между индексаторами в зависимости от их доли в этом подграфе. Распределение должно быть закрыто с действительным доказательством индексации (POI – Proof of indexing), которое соответствует стандартам, установленным уставом.
POI используются в сети для проверки того, что индексатор индексирует именно те подграфы, на которые он был аллоцирован. POI для первого блока текущей эпохи должен быть подтвержден при закрытии аллокации для того, чтобы эта аллокация имела право на индексирование вознаграждений. POI для блока – это дайджест для всех транзакций хранилища сущностей для конкретного развертывания подграфа до этого блока включительно.
Вознаграждения за аллокации постоянно суммируется, пока они активны. Награды собираются индексаторами и распределяются всякий раз, когда их аллокации закрываются. Это происходит либо вручную, когда индексатор хочет принудительно закрыть их, либо через 28 эпох делегатор может закрыть аллокацию для индексатора, но это приводит к тому, что награды не выдаются. 28 эпох – это максимальное время жизни аллокации (сейчас одна эпоха длится приблизительно сутки).
В центре инфраструктуры индексатора находится нода Graph, которая «слушает» сеть Ethereum, извлекает и загружает данные в соответствии с определением подграфа и служит в качестве API GraphQL. Graph нода должна быть подключена к конечным точкам виртуальной машины Эфира (EVM) и узлу IPFS для получения данных, база данных PostgreSQL нужна для хранилища, а компоненты Indexer облегчают его взаимодействие с сетью.
База данных PostgreSQL – основное хранилище Graph ноды. В ней хранятся данные подграфа. Служба и агент индексатора также используют базу данных для хранения данных канала состояния, моделей затрат и правил индексирования.
Эндпоинт сети Ethereum – конечная точка, предоставляющая Ethereum JSON-RPC API. Это может быть один клиент Ethereum или более сложная установка, которая распределяет нагрузку сразу между несколькими клиентами. Важно понимать, что для некоторых подграфов потребуются определенные возможности клиента Ethereum, такие как режим архива и API трассировки.
Узел IPFS. Метаданные развертывания подграфа хранятся в сети IPFS. Нода Graph в первую очередь обращается к узлу IPFS во время развертывания подграфа, чтобы получить манифест подграфа и все связанные файлы. Сетевым индексаторам не нужно размещать собственный узел IPFS. Узел IPFS для сети размещается по адресу https://ipfs.network.thegraph.com.
Служба индексатора обрабатывает все необходимые внешние связи с сетью. Совместно использует модели затрат и статусы индексирования, передает запросы от шлюзов на Graph ноду и управляет платежами по запросам через каналы состояния с помощью шлюза.
Агент индексатора облегчает взаимодействие индексаторов в цепочке, включая регистрацию в сети, управление развертыванием подграфов на его графических узлах и управление распределениями.
Сервер метрик Prometheus. Компоненты Graph Node и Indexer регистрируют свои метрики на сервере метрик.
Делегирование
Делегаторы – это участники сети, которые делегируют токены GRT одному или нескольким индексаторам. Делегаторы вносят свой вклад в защиту сети, не запуская сами ноды.
Делегируя индексатору, делегаторы зарабатывают часть сборов и вознаграждений за запросы индексатора. Количество запросов, которые индексатор может обработать, зависит от собственной (и делегированной) доли индексатора и цены, которую индексатор взимает за каждый запрос, поэтому чем больше доля выделяется индексатору, тем больше потенциальных запросов он может обработать.
Наблюдение
Кураторы (Наблюдатели) очень важны для децентрализованной экономики The Graph. Они используют свои знания об экосистеме Web3 для оценки и обозначения подграфов, которые должны быть проиндексированы сетью The Graph. Через инструмент Graph Explorer (проводник) кураторы могут просматривать сетевые данные для принятия решений. Сеть Graph вознаграждает кураторов, которые сигнализируют о подграфах хорошего качества, частью платы за запросы, которые генерируются подграфами. Кураторы экономически заинтересованы в том, чтобы сигнализировать заранее. Эти сигналы от кураторов важны для индексаторов, которые затем могут обрабатывать или индексировать данные из этих сигнальных подграфов.
При сигналировании кураторы могут решить: сигнализировать о конкретной версии подграфа или сигнализировать с помощью автоматической миграции. При использовании автоматической миграции ресурсы всегда будут обновлены до последней версии, опубликованной разработчиком. Если вместо этого вы решите сигнализировать об определенной версии, общие ресурсы всегда останутся на этой конкретной версии.
Нужно помнить, что курирование всегда влечет за собой риски. Требуется погружение в вопрос, чтобы убедиться, что вы курируете нужные подграфы, которым вы доверяете. Создание подграфа не требует разрешений, поэтому люди могут создавать подграфы и называть их любыми именами, тем самым вводя вас в заблуждение.