Docs
Поиск⌘ K
  • Главная страница
  • О The Graph
  • Поддерживаемые сети
  • Protocol Contracts
  • Субграфы
    • Субпотоки
      • Token API
        • Hypergraph
          • AI Suite
            • Индексирование
              • Graph Horizon
                • Ресурсы
                  Субграфы > How-to Guides

                  7 минуты

                  Создание Субграфов на Arweave

                  Поддержка Arweave в Graph Node и Subgraph Studio находится на стадии бета-тестирования: пожалуйста, обращайтесь к нам в Discord⁠ с любыми вопросами о создании субграфов Arweave!

                  Из этого руководства Вы узнаете, как создавать и развертывать субграфы для индексации блокчейна Arweave.

                  Что такое Arweave?

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

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

                  • Arwiki⁠
                  • Ресурсы Arweave⁠

                  Что такое субграфы Arweave?

                  The Graph позволяет создавать собственные открытые API, называемые “Субграфами”. Субграфы используются для указания индексаторам (операторам серверов), какие данные индексировать на блокчейне и сохранять на их серверах, чтобы Вы могли запрашивать эти данные в любое время используя GraphQL⁠.

                  Graph Node⁠ теперь может индексировать данные на протоколе Arweave. Текущая интеграция индексирует только Arweave как блокчейн (блоки и транзакции), она еще не индексирует сохраненные файлы.

                  Построение Субграфа на Arweave

                  Чтобы иметь возможность создавать и развертывать Субграфы на Arweave, Вам понадобятся два пакета:

                  1. @graphprotocol/graph-cli версии выше 0.30.2 — это инструмент командной строки для создания и развертывания субграфов. Нажмите здесь⁠, чтобы скачать с помощью npm.
                  2. @graphprotocol/graph-ts версии выше 0.27.0 — это библиотека типов, специфичных для субграфов. Нажмите здесь⁠, чтобы скачать с помощью npm.

                  Составляющие Субграфов

                  Существует три компонента субграфа:

                  1. Манифест - subgraph.yaml

                  Определяет источники данных, представляющие интерес, и то, как они должны обрабатываться. Arweave - это новый вид источника данных.

                  2. Схема - schema.graphql

                  Здесь Вы определяете, какие данные хотите иметь возможность запрашивать после индексации своего субграфа с помощью GraphQL. На самом деле это похоже на модель для API, где модель определяет структуру тела запроса.

                  Требования для субграфов Arweave описаны в существующей документации.

                  3. Мэппинги на AssemblyScript - mapping.ts

                  Это логика, которая определяет, как данные должны извлекаться и храниться, когда кто-то взаимодействует с источниками данных, которые Вы отслеживаете. Данные переводятся и сохраняются в соответствии с указанной Вами схемой.

                  Во время разработки субграфа есть две ключевые команды:

                  1$ graph codegen # генерирует типы из файла схемы, указанного в манифесте2$ graph build # генерирует Web Assembly из файлов AssemblyScript и подготавливает все файлы субграфа в папке /build

                  Определение манифеста субграфа

                  Манифест субграфа subgraph.yaml идентифицирует источники данных для субграфа, триггеры, представляющие интерес, и функции, которые должны быть выполнены в ответ на эти триггеры. Ниже приведен пример манифеста субграфа для Arweave Subgraph:

                  1specVersion: 1.3.02description: Arweave Blocks Indexing3schema:4  file: ./schema.graphql # ссылка на файл схемы5dataSources:6  - kind: arweave7    name: arweave-blocks8    network: arweave-mainnet # The Graph поддерживает только Arweave Mainnet9    source:10      owner: 'ID-OF-AN-OWNER' # Открытый ключ кошелька Arweave11      startBlock: 0 # установите это значение на 0, чтобы начать индексацию с генезиса чейна12    mapping:13      apiVersion: 0.0.914      language: wasm/assemblyscript15      file: ./src/blocks.ts # ссылка на файл с мэппингами Assemblyscript16      entities:17        - Block18        - Transaction19      blockHandlers:20        - handler: handleBlock # имя функции в файле мэппинга21      transactionHandlers:22        - handler: handleTx # имя функции в файле мэппинга
                  • Arweave Subgraphs вводят новый тип источника данных (arweave)
                  • Сеть должна соответствовать сети на размещенной Graph Node. В Subgraph Studio мейннет Arweave обозначается как arweave-mainnet
                  • Источники данных Arweave содержат необязательное поле source.owner, которое является открытым ключом кошелька Arweave

                  Источники данных Arweave поддерживают два типа обработчиков:

                  • blockHandlers — выполняется при каждом новом блоке Arweave. source.owner не требуется.
                  • transactionHandlers — выполняется при каждой транзакции, где source.owner является владельцем источника данных. На данный момент для transactionHandlers требуется указать владельца. Если пользователи хотят обрабатывать все транзакции, они должны указать "" в качестве source.owner

                  Source.owner может быть адресом владельца или его Публичным ключом.

                  Транзакции являются строительными блоками Arweave permaweb, и они представляют собой объекты, созданные конечными пользователями.

                  Примечание: транзакции Irys (ранее Bundlr)⁠ пока не поддерживаются.

                  Определение схемы

                  Определение схемы описывает структуру итоговой базы данных субграфа и отношения между объектами. Это не зависит от исходного источника данных. Более подробную информацию о определении схемы субграфа можно найти здесь.

                  Мэппинги AssemblyScript

                  Обработчики для обработки событий написаны на AssemblyScript⁠.

                  Индексирование Arweave вводит специфичные для Arweave типы данных в [API AssemblyScript](https://thegraph⁠. com/docs/using-graph-ts).

                  1class Block {2  timestamp: u643  lastRetarget: u644  height: u645  indepHash: Bytes6  nonce: Bytes7  previousBlock: Bytes8  diff: Bytes9  hash: Bytes10  txRoot: Bytes11  txs: Bytes[]12  walletList: Bytes13  rewardAddr: Bytes14  tags: Tag[]15  rewardPool: Bytes16  weaveSize: Bytes17  blockSize: Bytes18  cumulativeDiff: Bytes19  hashListMerkle: Bytes20  poa: ProofOfAccess21}2223class Transaction {24  format: u3225  id: Bytes26  lastTx: Bytes27  owner: Bytes28  tags: Tag[]29  target: Bytes30  quantity: Bytes31  data: Bytes32  dataSize: Bytes33  dataRoot: Bytes34  signature: Bytes35  reward: Bytes36}

                  Обработчики блоков получают Block, в то время как обработчики транзакций получают Transaction.

                  Написание мэппингов для субграфа Arweave очень похоже на написание мэппингов для субграфа Ethereum. Для получения дополнительной информации нажмите сюда.

                  Развертывание субграфа Arweave в Subgraph Studio

                  После того как Ваш субграф был создан на панели управления Subgraph Studio, вы можете развернуть его с помощью команды CLI graph deploy.

                  1graph deploy --access-token <your-access-token>

                  Запрос субграфа Arweave

                  Конечная точка GraphQL для Arweave Subgraphs определяется определением схемы, с использованием существующего интерфейса API. Пожалуйста, посетите документацию по GraphQL API для получения дополнительной информации.

                  Примеры субграфов

                  Вот пример субграфа для справки:

                  • Пример субграфа для Arweave⁠

                  Часто задаваемые вопросы

                  Может ли субграф индексировать данные с Arweave и других чейнов?

                  Нет, субграф может поддерживать источники данных только из одного чейна/сети.

                  Могу ли я проиндексировать сохраненные файлы в Arweave?

                  В настоящее время The Graph индексирует Arweave только как блокчейн (его блоки и транзакции).

                  Могу ли я идентифицировать Bundlr-бандлы в своём субграфе?

                  В настоящее время это не поддерживается.

                  Как я могу отфильтровать транзакции по определенному аккаунту?

                  Source.owner может быть открытым ключом пользователя или адресом учетной записи.

                  Каков текущий формат шифрования?

                  Данные обычно передаются в мэппингах в виде байтов, которые, если сохраняются напрямую, возвращаются в субграфе в формате hex (например, хэши блоков и транзакций). Возможно, вам захочется преобразовать их в формат base64 или base64 URL-безопасный в ваших мэппингах, чтобы привести их в соответствие с тем, как они отображаются в эксплорерах блоков, таких как Arweave Explorer⁠.

                  Следующая вспомогательная функция bytesToBase64(bytes: Uint8Array, urlSafe: boolean): string может быть использована и будет добавлена в graph-ts:

                  1const base64Alphabet = [2	"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",3	"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",4	"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",5	"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",6	"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"7];89const base64UrlAlphabet = [10	"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",11	"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",12	"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",13	"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",14	"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-", "_"15];1617function bytesToBase64(bytes: Uint8Array, urlSafe: boolean): string {18	let alphabet = urlSafe? base64UrlAlphabet : base64Alphabet;1920	let result = '', i: i32, l = bytes.length;21	for (i = 2; i < l; i += 3) {22		result += alphabet[bytes[i - 2] >> 2];23		result += alphabet[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];24		result += alphabet[((bytes[i - 1] & 0x0F) << 2) | (bytes[i] >> 6)];25		result += alphabet[bytes[i] & 0x3F];26	}27	if (i === l + 1) { // 1 octet yet to write28		result += alphabet[bytes[i - 2] >> 2];29		result += alphabet[(bytes[i - 2] & 0x03) << 4];30		if (!urlSafe) {31			result += "==";32		}33	}34	if (!urlSafe && i === l) { // 2 octets yet to write35		result += alphabet[bytes[i - 2] >> 2];36		result += alphabet[((bytes[i - 2] & 0x03) << 4) | (bytes[i - 1] >> 4)];37		result += alphabet[(bytes[i - 1] & 0x0F) << 2];38		if (!urlSafe) {39			result += "=";40		}41	}42	return result;43}
                  ⁠Редактировать на GitHub⁠

                  Создание субграфов на NEARЗамените контракт и сохраните его историю с помощью Grafting
                  На этой странице
                  • Что такое Arweave?
                  • Что такое субграфы Arweave?
                  • Построение Субграфа на Arweave
                  • Составляющие Субграфов
                  • 1. Манифест - subgraph.yaml
                  • 2. Схема - schema.graphql
                  • 3. Мэппинги на AssemblyScript - mapping.ts
                  • Определение манифеста субграфа
                  • Определение схемы
                  • Мэппинги AssemblyScript
                  • Развертывание субграфа Arweave в Subgraph Studio
                  • Запрос субграфа Arweave
                  • Примеры субграфов
                  • Часто задаваемые вопросы
                  • Может ли субграф индексировать данные с Arweave и других чейнов?
                  • Могу ли я проиндексировать сохраненные файлы в Arweave?
                  • Могу ли я идентифицировать Bundlr-бандлы в своём субграфе?
                  • Как я могу отфильтровать транзакции по определенному аккаунту?
                  • Каков текущий формат шифрования?
                  The GraphСтатусТестовая сетьБрундовые ресурсыФорумБезопасностьПолитика конфиденциальностиУсловия обслуживания