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

              6 минуты

              Категоризация маркетплейсов NFT с использованием Enums (перечислений)

              Используйте Enums (перечисления), чтобы сделать Ваш код чище и уменьшить вероятность ошибок. Вот полный пример использования перечислений для маркетплейсов NFT.

              Что такое Enums (перечисления)?

              Перечисления (или типы перечислений) — это особый тип данных, который позволяет определить набор конкретных допустимых значений.

              Пример использования Enums (перечислений) в Вашей схеме

              Если вы создаете cубграф для отслеживания истории владения токенами на маркетплейсе, каждый токен может проходить через разные этапы владения, такие как OriginalOwner, SecondOwner и ThirdOwner. Используя перечисления (enums), вы можете определить эти конкретные этапы владения, обеспечив, что будут присваиваться только заранее определенные значения.

              Вы можете определить перечисления (enums) в своей схеме, и после их определения Вы можете использовать строковое представление значений перечислений для установки значения поля перечисления в объекты.

              Вот как может выглядеть определение перечисления (enum) в Вашей схеме, исходя из приведенного выше примера:

              1enum TokenStatus {2  OriginalOwner3  SecondOwner4  ThirdOwner5}

              Это означает, что когда Вы используете тип TokenStatus в своей схеме, Вы ожидаете, что он будет иметь одно из заранее определенных значений: OriginalOwner (Первоначальный Владелец), SecondOwner (Второй Владелец) или ThirdOwner (Третий Владелец), что обеспечивает согласованность и корректность данных.

              Чтобы узнать больше о перечислениях (Enums), ознакомьтесь с разделом Создание субграфа и с документацией GraphQL⁠.

              Преимущества использования перечислений (Enums)

              • Ясность: Перечисления предоставляют значимые имена для значений, что делает данные более понятными.
              • Валидация: Перечисления обеспечивают строгие определения значений, предотвращая ввод недопустимых данных.
              • Поддерживаемость: Когда Вам нужно изменить или добавить новые категории, перечисления позволяют сделать это целенаправленно и удобно.

              Без перечислений (Enums)

              Если Вы решите определить тип как строку вместо использования перечисления (Enum), Ваш код может выглядеть следующим образом:

              1type Token @entity {2  id: ID!3  tokenId: BigInt!4  owner: Bytes! # Owner of the token5  tokenStatus: String! # String field to track token status6  timestamp: BigInt!7}

              В этой схеме TokenStatus является простой строкой без конкретных и допустимых значений.

              Почему это является проблемой?

              • Нет никаких ограничений на значения TokenStatus, поэтому любое строковое значение может быть назначено случайно. Это усложняет обеспечение того, что устанавливаются только допустимые статусы, такие как OriginalOwner (Первоначальный Владелец), SecondOwner (Второй Владелец) или ThirdOwner (Третий Владелец).
              • Легко допустить опечатку, например, Orgnalowner вместо OriginalOwner, что делает данные и потенциальные запросы ненадежными.

              С перечислениями (Enums)

              Вместо присвоения строк произвольной формы Вы можете определить перечисление (Enum) для TokenStatus с конкретными значениями: OriginalOwner, SecondOwner или ThirdOwner. Использование перечисления гарантирует, что используются только допустимые значения.

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

              Определение перечислений (Enums) для Маркетплейсов NFT

              Примечание: Следующее руководство использует смарт-контракт NFT CryptoCoven.

              Чтобы определить перечисления (enums) для различных маркетплейсов, где торгуются NFT, используйте следующее в вашей схеме cубграфа:

              1# Перечисление для маркетплейсов, с которыми взаимодействовал смарт-контракт CryptoCoven (вероятно, торговля или минт)2enum Marketplace {3  OpenSeaV1 # Представляет случай, когда NFT CryptoCoven торгуется на маркетплейсе OpenSeaV14  OpenSeaV2 # Представляет случай, когда NFT CryptoCoven торгуется на маркетплейсе OpenSeaV25  SeaPort # Представляет случай, когда NFT CryptoCoven торгуется на маркетплейсе SeaPort6  LooksRare # Представляет случай, когда NFT CryptoCoven торгуется на маркетплейсе LooksRare7  # ...и другие рынки8}

              Использование перечислений (Enums) для Маркетплейсов NFT

              После того как перечисления (enums) определены, их можно использовать по всему вашему cубграфу для категоризации транзакций или событий.

              Например, при регистрации продаж NFT можно указать маркетплейс, на котором произошла сделка, используя перечисление.

              Реализация функции для маркетплейсов NFT

              Вот как можно реализовать функцию для получения названия маркетплейса из перечисления (enum) в виде строки:

              1export function getMarketplaceName(marketplace: Marketplace): string {2  // Используем операторы if-else для сопоставления значения перечисления со строкой3  if (marketplace === Marketplace.OpenSeaV1) {4    return 'OpenSeaV1' // Если маркетплейс OpenSea, возвращаем его строковое представление5  } else if (marketplace === Marketplace.OpenSeaV2) {6    return 'OpenSeaV2'7  } else if (marketplace === Marketplace.SeaPort) {8    return 'SeaPort' // Если маркетплейс SeaPort, возвращаем его строковое представление9  } else if (marketplace === Marketplace.LooksRare) {10    return 'LooksRare' // Если маркетплейс LooksRare, возвращаем его строковое представление11    // ... и другие маркетплейсы12  }13}

              Лучшие практики использования перечислений (Enums)

              • Согласованность в наименованиях: Используйте четкие, описательные названия для значений перечислений, чтобы улучшить читаемость кода.
              • Централизованное управление: Храните перечисления в одном файле для обеспечения согласованности. Это облегчает обновление перечислений и гарантирует, что они являются единственным источником достоверной информации.
              • Документация: Добавляйте комментарии к перечислениям, чтобы прояснить их назначение и использование.

              Использование перечислений (Enums) в запросах

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

              Особенности

              • Фильтрация с помощью перечислений: Перечисления предоставляют четкие фильтры, позволяя уверенно включать или исключать конкретные маркетплейсы.
              • Перечисления в ответах: Перечисления гарантируют, что возвращаются только признанные названия маркетплейсов, делая результаты стандартизированными и точными.

              Пример запросов

              Запрос 1: Аккаунт с наибольшим количеством взаимодействий на маркетплейсе NFT

              Этот запрос выполняет следующие действия:

              • Он находит аккаунт с наибольшим количеством уникальных взаимодействий с маркетплейсами NFT, что полезно для анализа активности на разных маркетплейсах.
              • Поле маркетплейсов использует перечисление marketplace, что обеспечивает согласованность и валидацию значений маркетплейсов в ответе.
              1{2  accounts(first: 1, orderBy: uniqueMarketplacesCount, orderDirection: desc) {3    id4    sendCount5    receiveCount6    totalSpent7    uniqueMarketplacesCount8    marketplaces {9      marketplace # Это поле возвращает значение перечисления, представляющее маркетплейс10    }11  }12}

              Результаты

              Данный ответ включает информацию об аккаунте и перечень уникальных взаимодействий с маркетплейсом, где используются значения перечислений (enum) для обеспечения единообразной ясности:

              1{2  "data": {3    "accounts": [4      {5        "id": "0xb3abc96cb9a61576c03c955d75b703a890a14aa0",6        "sendCount": "44",7        "receiveCount": "44",8        "totalSpent": "1197500000000000000",9        "uniqueMarketplacesCount": "7",10        "marketplaces": [11          {12            "marketplace": "OpenSeaV1"13          },14          {15            "marketplace": "OpenSeaV2"16          },17          {18            "marketplace": "GenieSwap"19          },20          {21            "marketplace": "CryptoCoven"22          },23          {24            "marketplace": "Unknown"25          },26          {27            "marketplace": "LooksRare"28          },29          {30            "marketplace": "NFTX"31          }32        ]33      }34    ]35  }36}

              Запрос 2: Наиболее активный маркетплейс для транзакций CryptoCoven

              Этот запрос выполняет следующие действия:

              • Он определяет маркетплейс с наибольшим объемом транзакций CryptoCoven.
              • Он использует перечисление marketplace, чтобы гарантировать, что в ответе будут только допустимые типы маркетплейсов, что повышает надежность и согласованность ваших данных.
              1{2  marketplaceInteractions(first: 1, orderBy: transactionCount, orderDirection: desc) {3    marketplace4    transactionCount5  }6}

              Результат 2

              Ожидаемый ответ включает маркетплейс и соответствующее количество транзакций, используя перечисление для указания типа маркетплейса:

              1{2  "data": {3    "marketplaceInteractions": [4      {5        "marketplace": "Unknown",6        "transactionCount": "222"7      }8    ]9  }10}

              Запрос 3: Взаимодействия на маркетплейсе с высоким количеством транзакций

              Этот запрос выполняет следующие действия:

              • Он извлекает четыре самых активных маркетплейса с более чем 100 транзакциями, исключая маркетплейсы с типом “Unknown”.
              • Он использует перечисления в качестве фильтров, чтобы гарантировать, что включены только допустимые типы маркетплейсов, что повышает точность выполнения запроса.
              1{2  marketplaceInteractions(3    first: 44    orderBy: transactionCount5    orderDirection: desc6    where: { transactionCount_gt: "100", marketplace_not: "Unknown" }7  ) {8    marketplace9    transactionCount10  }11}

              Результат 3

              Ожидаемый вывод включает маркетплейсы, которые соответствуют критериям, каждый из которых представлен значением перечисления:

              1{2  "data": {3    "marketplaceInteractions": [4      {5        "marketplace": "NFTX",6        "transactionCount": "201"7      },8      {9        "marketplace": "OpenSeaV1",10        "transactionCount": "148"11      },12      {13        "marketplace": "CryptoCoven",14        "transactionCount": "117"15      },16      {17        "marketplace": "OpenSeaV1",18        "transactionCount": "111"19      }20    ]21  }22}

              Дополнительные ресурсы

              Дополнительную информацию можно найти в [репозитории] этого руководства (https://github.com/chidubemokeke/Subgraph-Tutorial-Enums⁠).

              ⁠Редактировать на GitHub⁠

              Перенос в The GraphКак обезопасить API-ключи с использованием серверных компонентов Next.js
              На этой странице
              • Что такое Enums (перечисления)?
              • Пример использования Enums (перечислений) в Вашей схеме
              • Преимущества использования перечислений (Enums)
              • Без перечислений (Enums)
              • С перечислениями (Enums)
              • Определение перечислений (Enums) для Маркетплейсов NFT
              • Использование перечислений (Enums) для Маркетплейсов NFT
              • Реализация функции для маркетплейсов NFT
              • Лучшие практики использования перечислений (Enums)
              • Использование перечислений (Enums) в запросах
              • Пример запросов
              • Дополнительные ресурсы
              The GraphСтатусТестовая сетьБрундовые ресурсыФорумБезопасностьПолитика конфиденциальностиУсловия обслуживания