Ваш первый NFT
Last updated
Last updated
Примечание: работа над данным руководством еще не завершена. Кроме того, спецификация Aptos' (Non-Fungible) Token (невзаимозаменяемого Aptos токена) не формализована.
- это невзаимозаменяемый токен или данные, хранящиеся в блокчейне, которые однозначно определяют право собственности на актив. NFT были впервые определены в , а затем расширены в . NFT обычно включают следующие аспекты:
Имя - имя актива, которое должно быть уникальным в коллекции
Описание - описание актива
URL-адрес - неопределенный указатель вне сети для получения дополнительной информации об активе, может быть медиа-объект, такой как изображение или видео, или другие метаданные
Выпуск (supply) - общее количество единиц этого NFT, многие NFT представлены в единичном исполнении, в то время как другие в количестве более одного называются изданиями (editions)
Кроме того, большинство NFT являются частью коллекции или набора NFT с общим атрибутом, например, темой, создателем или минимальным контрактом. Каждая коллекция имеет похожий набор атрибутов:
Имя - название коллекции, которое должно быть уникальным в учетной записи автора
Описание - описание актива
URL-адрес - неопределенный указатель вне сети для получения дополнительной информации об активе, может быть медиа-объект, такой как изображение или видео, или другие метаданные
Реализацию Aptos для основных NFT или Токенов можно найти здесь .
Aptos Token определяется как:
id
GUID:ID
Глобальный уникальный идентификатор этого токена, также необходим для идентификации автора
name
ASCII::String
Имя этого токена должно быть уникальным в рамках коллекции
collection
GUID:ID
Глобальный уникальный идентификатор коллекции, содержащей этот токен
balance
u64
Текущее хранимое количество данного токена по отношению к общему выпуску (supply), 1 <= balance <= supply
Aptos TokenData определяется как:
id
GUID:ID
Глобальный уникальный идентификатор для этого токена, также необходим для идентификации автора
description
ASCII::String
Описывает этот токен
name
ASCII::String
Имя этого токена должна быть уникальным в рамках коллекции
supply
u64
Общее количество изданий этого Токена
uri
ASCII::String
URL-адрес для дополнительной информации/медиа
metadata
TokenType
Общая опционально определяемая пользователем структура, содержащая дополнительную информацию об этом токене он-чейн
Токены определяются с помощью хранилища атрибутов 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 из-за ограничения, заключающегося в том, что функции скрипта не могут поддерживать структуры или дженерики.
Каждая коллекция имеет следующие поля:
tokens
Table<ASCII::String, TokenMetadata<TokenType>>
Отслеживает все Токены, связанные с этой коллекцией
claimed_tokens
Table<ASCII::String, address>
Отслеживает, где хранятся токены с supply == 1
description
ASCII::String
Описывает эту коллекцию
name
ASCII::String
Имя этой коллекции должно быть уникальным в учетной записи создателя для указанного TokenType
uri
ASCII::String
URL-адрес для дополнительной информации/медиа
count
u64
Общее количество отдельных токенов, отслеживаемых этой коллекцией
maximum
Option<u64>
Опционально, максимальное количество токенов, которое можно создать в этой коллекции
Коллекция не является хранилищем для накопления Токенов, поэтому вместо Token
она содержит TokenData
:
id
GUID:ID
Глобальный уникальный идентификатор для этого токена, также необходим для идентификации автора
data
TokenData
Дополнительные данные об этом токене, это набор выпуска токена > 1
Чтобы приобретать и хранить токены, у пользователя должна быть Gallery
TokenType
:
Как и Collections
, это хранится как ресурс в учетной записи Aptos.
Для создания нового токена требуется написать код Move
Функция Script для создания нового токена должна быть специализирована, поскольку Move не поддерживает типы шаблонов или структуры в качестве входных аргументов
Типы шаблонов в функциях скрипта добавляют дополнительные трудности при написании функций скрипта
Это руководство проведет вас через процессы:
создания вашей собственной коллекции Токенов,
Токена вашего любимого кота,
а также передачи этого токена кому-либо другому.
В этом руководстве основное внимание будет уделено first_nft.py
и повторному использованию библиотекиfirst_transaction.py
из прошлого руководства.
Aptos Token позволяет создателям создавать ограниченные или неограниченные коллекции. Многие NFT носят ограниченный характер, когда автор намерен создать только определенное количество навсегда, что усиливает дефицит. В то время как другие токены могут иметь неограниченную природу, например, в коллекции, служащей для утилиты, со временем могут появляться новые токены. Коллекции SimpleToken могут быть созданы с помощью соответствующей функции скрипта:
Для конечной, то есть не больше, чем максимальное количество токенов maximum
, которое может быть когда-либо выпущено:
Для безлимитной, то есть количество токенов, которые можно добавить в коллекцию, не ограничено:
Эти функции скрипта можно запустить через REST API. Далее показано, как это сделать:
Токены могут быть созданы после создания коллекции. Для этого в токене должно быть указано то же самое имя коллекции collection_name
, которое указано в ранее созданной коллекции name
. Функция сценария Move для создания SimpleToken
:
Эти функции скрипта можно запустить через REST API. Далее показано, как это сделать:
Получение ID Токена
Чтобы передать токен, отправитель должен сначала определить идентификатор токена, зная учетную запись создателя, имя коллекции и имя токена. Это можно получить, сделав запрос в REST сервис:
Следующая функция сценария Move поддерживает передачу Token
в другую учетную запись, фактически регистрируя, что другая учетная запись может претендовать на этот токен:
Следующая функция скрипта Move в SimpleToken
поддерживает получение токена, фактически запрашивая токен:
Добавить возможность дополнительного минта
Убедиться, что был произведен хотя бы один токен во время минта
Добавить события — требуется фидбэк о том, какие события
Предоставить изменяемые API для токенов
Написать дымовое тестирование для дженериков и простых токенов напрямую
Обеспечить безопасное сжигание
Как часть нашей основной платформы, Aptos предоставляет базовый интерфейс токена без каких-либо дополнительных данных или явно такой, в котором ресурс TokenMetadata не имеет записи для этого токена. Мотивация такого решения включает следующее:
Данное руководство основано на разделе в качестве библиотеки для этого примера. Руководство содержит пример кода, который можно загрузить, см. пример ниже:
Вы найдете python project
Вы найдете typescript project
В Aptos и Move каждый токен занимает определенное место и на него имеется право собственности. Из-за этого передача токенов не является односторонней и требует двухэтапного процесса, аналогичного доске объявлений. Отправитель должен сначала зарегистрировать, что токен доступен для запроса получателем, а затем получатель должен потребовать этот токен. Это реализовано в экспериментальном move модуле . SimpleToken
предоставляет несколько функций-оболочек для поддержки трансфера токена в другую учетную запись, подтверждения трансфера или его остановки.