Команда TON Foundation опубликовала пример NFT смарт-контракта, который является основой для релиза стандарта NFT смарт-контракта. Давайте разберем то, как работает NFT смарт-контракт в сети TON и чем же он принципиально отличается от существующих смарт-контрактов других блокчейнов.
Начнем с того, что блокчейн TON сам по себе является отличным базисом для размещения NFT, и тому есть две причины:
1. Дешевое размещение токенов
Сеть TON славится своими низкими комиссиями за транзакции, это касается и NFT. За размещение 1 единицы NFT вам потребуется заплатить ~0.05$, что на порядок ниже, нежели в сети Ethereum. За условную NFT коллекцию, состоящую из 5000 элементов, вам потребуется заплатить 250$. Для сравнения, размещение точно такой же коллекции в сети Ethereum обойдется вам в ~100 000$. За счет такого дешевого размещения уменьшается порог входа для авторов, которые хотят разместить свои работы в блокчейне для продажи.
2. Быстрое и бесперебойное размещение токенов
Блокчейн TON построен на принципе шардирования (создания блокчейна в блокчейне). Этот метод позволяет блокчейну TON сохранять высокую скорость работы под колоссальными нагрузками, при которых любой другой блокчейн поднял бы комиссию за транзакции и увеличил бы время этих самых транзакций. В NFT эта особенность также нашла свое применение. Например, если автор захочет разом разместить 1 000 000 своих NFT на маркетплейсе, это никак не повлияет на скорость работы сети и на её комиссию за транзакции. Эта особенность блокчейна также подходит для создания метавселенных на базе TON.
Эти 2 ключевых момента являются показателем того, что работа NFT Смарт-контракта в сети TON будет являться эталонным примером для всех остальных блокчейнов.
Теперь разберем принцип работы NFT Смарт-контракта в TON, его расширения и как его применимость может кардинально изменить рынок NFT.
По текущему стандарту все NFT в TON делятся на две сущности: непосредственно NFT-токен и коллекция NFT-токенов. Стоит уточнить, что каждый токен, как и коллекция — это отдельный смарт-контракт, а значит и адрес в блокчейне TON.
Смарт-контракт NFT-коллекции является хранилищем общих данных каждого отдельного элемента NFT-коллекции. На примере NFT-коллекции Минтозавры: если у вашего NFT-элемента есть ссылка на его контент, то домен https://mintosaurs.com
будет храниться в смарт-контракте NFT-коллекции, а остальная его часть — атрибут Generalissimus
, — будет храниться в смарт-контракте NFT-элемента. В комбинации эти 2 смарт-контракта выдают нам https://mintosaurs.com/generalissimus
.
Также смарт-контракт NFT-коллекции отвечает за добавление NFT в сам блокчейн (mint / minting / чеканка).
Смарт-контракт NFT-элемента является отдельной единицей, хранящейся в смарт-контакте NFT-коллекции. Данный смарт-контракт содержит в себе данные об NFT: порядковый номер в коллекции, адрес смарт-контакта NFT-коллекции, к которой он относится, адрес текущего владельца и метаданные NFT. В метаданных NFT хранится вся информация о создателе и характеристиках каждого отдельно взятого токена.
Для вышеописанных смарт-контрактов существуют расширения:
1. NFTRoyalty — параметр, отвечающий за процентные отчисления с будущих продаж данного токена. Например, вы установили параметр NFTRoyalty в размере 10%. Вы продали ваш токен покупателю и новый владелец решил перепродать ваш токен за 100 Toncoin. С этой перепродажи вы получите 10 Toncoin.
2. NFTEditable — добавляет в смарт-контракт NFT-элемента и NFT-коллекции параметр, отвечающий за возможность добавления адреса Редактора данных. Благодаря редактору данных появляется возможность взаимодействия NFT между собой. Например, вы купили NFT боевого меча и NFT огненных чар. Совместив эти 2 NFT вы получите совершенно новый NFT-элемент с измененными характеристиками и атрибутами.
3. NFTUpgradable — добавляет в смарт-контракт NFT-элемента и NFT-коллекции параметр, отвечающий за возможность добавления адреса Редактора кода. Благодаря редактору кода появляется возможность создания еще более интересного и продвинутого взаимодействия NFT между собой. Например, вы купили NFT боевого меча и NFT огненных чар. Совместив эти 2 NFT вы получите совершенно новый NFT-элемент с измененными характеристиками, атрибутами и внешним видом, который будет зависеть от того, какие NFT вы объединили друг с другом.
Расширения для смарт-контрактов NFT-элементов и коллекций в TON позволяют добиться новых и интересных механик, которые вы вряд ли увидите в других блокчейнах. Да, на данный момент известные NFT-коллекции вводят взаимодействие между своими NFT. Как пример — BAYC выпустили NFT Serum (сыворотку), которая при взаимодействии с их NFT Bored Ape изменяет его внешний вид и характеристики. Однако, данный процесс реализован не в самом блокчейне, а на отдельном сайте. В блокчейне TON вы сможете реализовать данную механику в самом смарт-контракте.
Для хранения контента самой NFT-коллекции предусмотрено 2 варианта:
1. Offchain (Оффчейн) – смарт-контракт хранит только ссылку на JSON-файл.
2. Onchain (Ончейн) – смарт-контракт хранит все данные в блокчейне в формате ключ — значение. Ключом может выступать произвольная строка. Строки по типу «name», «description», «image» являются стандартизированными.
Оба варианта можно совместить для раздельного хранения части коллекции в оффчейне, и другой части в ончейне.
Для создания нового смарт-контракта под продажу NFT пользователю понадобится оплатить его за фиксированную стоимость в Toncoin или же участвовать в аукционе. При создании смарт-контракта маркетплейс, через который осуществляется продажа NFT, задает параметры адреса NFT, цены продажи, максимальной длительности продажи, процент отчисления автору NFT за продажу, процент комиссии маркетплейса. После создания смарт-контракта маркетплейс проверяет данные этого смарт-контракта, и если они верны, то смарт-контракт запускается. После этого продавец размещает свой NFT на смарт-контракте аукциона.
Пример NFT в блокчейне TON, выставленных на продажу на маркетплейсе:
Покупателю для участия потребуется лишь отправить Toncoin на адрес смарт-контракта аукциона. Если покупатель отправил достаточное количество Toncoin, то NFT автоматически передается покупателю, а Toncoin распределятся по заданным параметрам между продавцом, автором и маркетплейсом. Стоит уточнить, что аукционы с некорректными данными попросту не будут отображаться в интерфейсе маркетплейса.
Маркетплейсы вправе добавлять в свои смарт-контракты сторонних получателей, например, при условии партнерской программы или же отчислений в виде пожертвований в благотворительный фонд.
Разберем теперь NFT-смарт контракт с технической точки зрения.
Смарт-контракт NFT-коллекции опционален, и его прямое назначение — хранение пронумерованного порядковыми номерами списка выпущенных в данной коллекции NFT-элементов, а также хранение общего контента всей коллекции.
Обязательными для хранения определяются следующие поля:
1. index
— порядковый номер токена в коллекции, либо уникальный номер единичного NFT, если он не содержится в коллекции;
2. collection_address
— адрес смарт-контракта коллекции NFT, либо нулевой адрес для единичных NFT;
3. owner_address
— адрес владельца токена;
4. editor_address
— адрес редактора токена;
5. individual_content
— произвольное содержимое конкретного токена.
Для реализации смарт-контракта NFT-элемента предлагаются четыре обязательные функции:
1. transfer
— внутренний метод для смены владельца токена, в нем передается информация о новом владельце и описание того, что данный владелец должен сделать с данным токеном;
2. edit
— внутренний метод, позволяющий отредактировать содержимое смарт-контракта конкретного токена, а также передать права на редактирование другому редактору;
3. get_nft_data
— публичный метод, возвращающий все обязательные поля токена (статус инициализации, информацию о коллекции, владельца, редактора и содержимое);
4. get_static_data
– отправляет в ответ неизменяемые данные: порядковый номер и адрес смарт-контракта коллекции.
Выше мы описывали расширения для стандарта смарт-контракта NFT в TON. Разберем NFTRoyalty с технической точки зрения.
Расширение добавляет еще один обязательный метод в виде royalty_params. Он отвечает за процентные отчисления с последующих продаж NFT-элемента. Здесь же указывается адрес, на который будут приходить эти отчисления. На входящее сообщение get_royalty_params смарт-контракт должен отправить в ответ royalty_params данного NFT-элемента.
Больше подробностей о технических аспектах блокчейна TON в Telegram-канале Дайте TON!