О The Graph
Reading time: 4 min
На этой странице Вы узнаете что такое протокол The Graph и как приступить к работе.
The Graph - это децентрализованный протокол для индексации и запроса данных из блокчейна. The Graph позволяет запрашивать данные, которые сложно запросить напрямую.
Комплексные и сложные проекты такие, как и проекты NFT такие, как сохраняют свои данные в блокчейн Ethereum в таком формате, что их сложно обработать посылая запросы непосредственно в блокчейн.
In the case of Bored Ape Yacht Club, we can perform basic read operations on like getting the owner of a certain Ape, getting the content URI of an Ape based on their ID, or the total supply. This can be done because these read operations are programmed directly into the smart contract. However, more advanced real-world queries and operations like aggregation, search, relationships, and non-trivial filtering are not possible. For example, if we wanted to query for Apes that are owned by a certain address and filter by one of its characteristics, we would not be able to get that information by interacting directly with the contract itself.
To get this data, you would have to process every single event ever emitted, read the metadata from IPFS using the Token ID and IPFS hash, and then aggregate it. It would take hours or even days for a decentralized application (dapp) running in a browser to get an answer to these simple questions.
Вы также можете создать свой собственный сервер, обработать там транзакции, сохранить их в базе данных и создать API-конечную точку поверх всего этого, чтобы запрашивать данные. Однако этот вариант требует , нуждается в обслуживании, представляет собой единую точку отказа и нарушает важные свойства безопасности, необходимые для децентрализации.
Индексация данных - это очень трудоемкий процесс.
Blockchain properties like finality, chain reorganizations, or uncled blocks complicate this process further. They make it time consuming and conceptually hard to retrieve correct query results from blockchain data.
The Graph provides a solution with a decentralized protocol that indexes and enables the efficient and high-performance querying of blockchain data. These APIs (indexed "subgraphs") can then be queried with a standard GraphQL API. Today, there is a hosted service as well as a decentralized protocol with the same capabilities. Both are backed by the open source implementation of .
The Graph протокол узнает что и как индексировать из блокчейна основываясь на инструкциях "subgraph", называемый "subgraph манифест". Subgraph описывает: смарт-контракт, данные которого будут индексироваться, события данного смарт-контракта и как данные будут связаны (структура таблиц базы данных) для сохранения данных в базе данных.
Как только Вы создаете subgraph манифест
, Вы с помощью Graph CLI сохраняете манифест в сети IPFS и указываете индексатору начинать индексировать данные использую данный субграф.
Данная диаграмма более детально описывает порядок следования данных после того как subgraph манифест активирован на сети:
Данные проходят следующий путь:
- Dapp добавляет данные в Ethereum через транзакцию в смарт-контракте.
- Смарт-контракт создает одно или несколько событий обрабатывая транзакции.
- TheGraph нода постоянно сканирует блокчейна и обрабатывает каждый новый блок на предмет поиска данных описанных в Вашем субграфе.
- The Graph нода затем разбирает события, относящиеся к Вашему субграфу, которые записаны в данном блоке и структурирует их согласно схеме данных описанной в subgraph используя модуль WASM. Затем данные сохраняются в таблицы базы данных Graph Node.
- Dapp запрашивает у Graph Node данные, проиндексированные с блокчейна, используя ноды. В свою очередь, Graph Node переводит запросы GraphQL в запросы к его базовому хранилищу данных, чтобы получить эти данные, используя возможности индексации этого хранилища. Dapp отображает эти данные в насыщенном пользовательском интерфейсе для конечных пользователей, который они используют для создания новых транзакций в Ethereum. Цикл повторяется.
The following sections provide more detail on how to define subgraphs, how to deploy them, and how to query data from the indexes that Graph Node builds.
Before you start writing your own subgraph, you might want to have a look at and explore some of the subgraphs that have already been deployed. The page for each subgraph contains a playground that lets you query that subgraph's data with GraphQL.