Ваш первый NFT
Примечание: работа над данным руководством еще не завершена. Кроме того, спецификация Aptos' (Non-Fungible) Token (невзаимозаменяемого Aptos токена) не формализована.
Токены и NFT в сети Aptos
NFT - это невзаимозаменяемый токен или данные, хранящиеся в блокчейне, которые однозначно определяют право собственности на актив. NFT были впервые определены в EIP-721, а затем расширены в EIP-1155. NFT обычно включают следующие аспекты:
Имя - имя актива, которое должно быть уникальным в коллекции
Описание - описание актива
URL-адрес - неопределенный указатель вне сети для получения дополнительной информации об активе, может быть медиа-объект, такой как изображение или видео, или другие метаданные
Выпуск (supply) - общее количество единиц этого NFT, многие NFT представлены в единичном исполнении, в то время как другие в количестве более одного называются изданиями (editions)
Кроме того, большинство NFT являются частью коллекции или набора NFT с общим атрибутом, например, темой, создателем или минимальным контрактом. Каждая коллекция имеет похожий набор атрибутов:
Имя - название коллекции, которое должно быть уникальным в учетной записи автора
Описание - описание актива
URL-адрес - неопределенный указатель вне сети для получения дополнительной информации об активе, может быть медиа-объект, такой как изображение или видео, или другие метаданные
Реализацию Aptos для основных NFT или Токенов можно найти здесь Token.move.
Определение Aptos Token
Токен
Aptos Token определяется как:
|
| Глобальный уникальный идентификатор этого токена, также необходим для идентификации автора |
|
| Имя этого токена должно быть уникальным в рамках коллекции |
|
| Глобальный уникальный идентификатор коллекции, содержащей этот токен |
|
| Текущее хранимое количество данного токена по отношению к общему выпуску (supply), |
Aptos TokenData определяется как:
Field | Type | Description |
---|---|---|
|
| Глобальный уникальный идентификатор для этого токена, также необходим для идентификации автора |
|
| Описывает этот токен |
|
| Имя этого токена должна быть уникальным в рамках коллекции |
|
| Общее количество изданий этого Токена |
|
| URL-адрес для дополнительной информации/медиа |
|
| Общая опционально определяемая пользователем структура, содержащая дополнительную информацию об этом токене он-чейн |
Токены определяются с помощью хранилища атрибутов move store
, что означает, что их можно сохранять в глобальном хранилище. Токены не могут быть удалены неявным образом и должны быть сожжены, чтобы гарантировать, что общий баланс равен общему выпуску (supply). Токены не могут быть скопированы. То есть общий баланс или выпуск не может быть изменен никем, кроме автора, из-за отсутствия оператора копирования. Обратите внимание, что текущие API не предоставляют возможности минта после создания. Токен может быть однозначно идентифицирован либо по его id
, или TokenType, collection name, and token name
.
TokenData имеет атрибут copy
для упрощения разделения баланса токенов. Разделение токенов может произойти всякий раз, когда пользователь с балансом больше 1
предлагает другому лицу часть своего баланса, меньшую, чем общий баланс. Пользователям, торгующим токенами, следует помнить, что два Токена могут использовать одни и те же данные TokenData, поскольку стандарт Aptos не пытается определить, копирует ли токен атрибуты другого. Повторяя то, что было сказано ранее, токен может быть однозначно идентифицирован либо по его id
, либо TokenType
, имени коллекции, имени токена. Автор может изменить любое значение вTokenType
, имени коллекции или имени токена, чтобы создать похожие, но не идентичные токены.
Коллекция Токенов
Aptos определяет набор коллекций, сгруппированных по их уникальным id
:
Так как Collections
имеет attribute key
, он хранится непосредственно в учетной записи автора. Важно отметить, что если бы не было категории Collections
, а вместо этогоCollection
имела бы key
attribute, учетная запись Aptos могла бы иметь только одну коллекцию, что часто бывает не так. Коллекцию можно искать в наборе Коллекций по имени, что позволяет использовать уникальное имя коллекции.
Структуры Token и TokenData фиксированы по своему содержанию. РесурсTokenMetadata
позволяет создателям хранить дополнительные данные токена. Данные в таблице хранятся как уникальный Token
's ID
. Использование этого является опциональным и требует специализации API из-за ограничения, заключающегося в том, что функции скрипта не могут поддерживать структуры или дженерики.
Каждая коллекция имеет следующие поля:
Field | Type | Description |
---|---|---|
|
| Отслеживает все Токены, связанные с этой коллекцией |
|
| Отслеживает, где хранятся токены с |
|
| Описывает эту коллекцию |
|
| Имя этой коллекции должно быть уникальным в учетной записи создателя для указанного |
|
| URL-адрес для дополнительной информации/медиа |
|
| Общее количество отдельных токенов, отслеживаемых этой коллекцией |
|
| Опционально, максимальное количество токенов, которое можно создать в этой коллекции |
Коллекция не является хранилищем для накопления Токенов, поэтому вместо Token
она содержит TokenData
:
Field | Type | Description |
---|---|---|
|
| Глобальный уникальный идентификатор для этого токена, также необходим для идентификации автора |
|
| Дополнительные данные об этом токене, это набор выпуска токена |
Хранение Токенов
Чтобы приобретать и хранить токены, у пользователя должна быть Gallery
TokenType
:
Как и Collections
, это хранится как ресурс в учетной записи Aptos.
Представление Токенов
Как часть нашей основной платформы, Aptos предоставляет базовый интерфейс токена Token без каких-либо дополнительных данных или явно такой, в котором ресурс TokenMetadata не имеет записи для этого токена. Мотивация такого решения включает следующее:
Для создания нового токена требуется написать код Move
Функция Script для создания нового токена должна быть специализирована, поскольку Move не поддерживает типы шаблонов или структуры в качестве входных аргументов
Типы шаблонов в функциях скрипта добавляют дополнительные трудности при написании функций скрипта
Это руководство проведет вас через процессы:
создания вашей собственной коллекции Токенов,
Токена вашего любимого кота,
а также передачи этого токена кому-либо другому.
Данное руководство основано на разделе Ваша первая транзакция в качестве библиотеки для этого примера. Руководство содержит пример кода, который можно загрузить, см. пример ниже:
В этом руководстве основное внимание будет уделено first_nft.py
и повторному использованию библиотекиfirst_transaction.py
из прошлого руководства.
Вы найдете python project здесь
Создание Коллекции
Aptos Token позволяет создателям создавать ограниченные или неограниченные коллекции. Многие NFT носят ограниченный характер, когда автор намерен создать только определенное количество навсегда, что усиливает дефицит. В то время как другие токены могут иметь неограниченную природу, например, в коллекции, служащей для утилиты, со временем могут появляться новые токены. Коллекции SimpleToken могут быть созданы с помощью соответствующей функции скрипта:
Для конечной, то есть не больше, чем максимальное количество токенов maximum
, которое может быть когда-либо выпущено:
Для безлимитной, то есть количество токенов, которые можно добавить в коллекцию, не ограничено:
Эти функции скрипта можно запустить через REST API. Далее показано, как это сделать:
Создание Токена
Токены могут быть созданы после создания коллекции. Для этого в токене должно быть указано то же самое имя коллекции collection_name
, которое указано в ранее созданной коллекции name
. Функция сценария Move для создания SimpleToken
:
Эти функции скрипта можно запустить через REST API. Далее показано, как это сделать:
Передача Токена
В Aptos и Move каждый токен занимает определенное место и на него имеется право собственности. Из-за этого передача токенов не является односторонней и требует двухэтапного процесса, аналогичного доске объявлений. Отправитель должен сначала зарегистрировать, что токен доступен для запроса получателем, а затем получатель должен потребовать этот токен. Это реализовано в экспериментальном move модуле TokenTransfer
. SimpleToken
предоставляет несколько функций-оболочек для поддержки трансфера токена в другую учетную запись, подтверждения трансфера или его остановки.
Получение ID Токена
Чтобы передать токен, отправитель должен сначала определить идентификатор токена, зная учетную запись создателя, имя коллекции и имя токена. Это можно получить, сделав запрос в REST сервис:
Предложение Токена
Следующая функция сценария Move поддерживает передачу Token
в другую учетную запись, фактически регистрируя, что другая учетная запись может претендовать на этот токен:
Запрос Токена
Следующая функция скрипта Move в SimpleToken
поддерживает получение токена, фактически запрашивая токен:
Задачи для реализации по Токенам
Добавить возможность дополнительного минта
Убедиться, что был произведен хотя бы один токен во время минта
Добавить события — требуется фидбэк о том, какие события
Предоставить изменяемые API для токенов
Написать дымовое тестирование для дженериков и простых токенов напрямую
Обеспечить безопасное сжигание
Last updated