Пошаговое создание коллекции NFT
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
👋 Введение
Невзаимозаменяемые токены (NFT) стали одной из самых обсуждаемых тем в мире цифрового искусства и коллекционирования. NFT - это уникальные цифровые активы, использующие технологию блокчейн для подтверждения права собственности и подлинности. Они открыли перед создателями и коллекционерами новые возможности для монетизации и торговли цифровым искусством, музыкой, видео и другими цифровым контентом. За последние годы рынок NFT стремительно вырос, а некоторые сделки достигли миллионов долларов. В этой статье мы пошагово создадим коллекцию NFT на TON.
Вот такая прекрасная коллекция уток будет создана вами к концу этого урока:
🦄 Чему Вы научитесь
- Вы создадите коллекцию NFT на TON.
- Вы поймете, как работают NFT на TON.
- Вы выставите NFT на продажу.
- Вы загрузите метаданные на pinata.cloud.
💡 Необходимые компоненты
У вас уже должен быть testnet кошелек, в котором находится не менее 2 TON. Вы можете получить testnet коины от @testgiver_ton_bot.
- Откройте настройки и нажмите 5 раз на логотип Tonkeeper внизу экрана.
- Активируйте Dev mode.
- Вернитесь в главное меню и создайте новый testnet-кошелек - Добавить кошелек/Добавить аккаунт Testnet.
Мы будем использовать Pinata как систему хранения IPFS, поэтому вам также нужно создать аккаунт на pinata.cloud и получить api_key & api_secreat. Официальная обучающая документация Pinata может помочь в этом. Как только вы получите эти API-токены, возвращайтесь сюда!
💎 Что такое NFT на TON?
Прежде чем перейти к основной части нашего руководства, необходимо понять, как NFT работают на TON в общих чертах. Неожиданно, но мы начнем с объяснения того, как NFT работают на Ethereum (ETH), чтобы понять чем реализация NFT на TON уникальна по сравнению с другими блокчейнами в этой отрасли.
Реализация NFT на ETH
Реализация NFT на ETH крайне проста - существует 1 основной контракт коллекции, который хранит простую хэш-таблицу, содержащую данные NFT из этой коллекции. Все запросы, связанные с этой коллекцией (если какой-либо пользователь хочет передать NFT, выставить его на продажу и т.д.), отправляются именно в этот единый контракт коллекции.
Проблемы такой реализации в TON
Проблемы такой реализации в контексте TON подробно описаны в стандарте NFT в TON:
-
Непредсказуемоееее потребление газа. В TON расход газа на операции со словарем зависит от точного набора ключей. Кроме того, TON - это асинхронный блокчейн. Это означает, что если Вы отправляете сообщение смарт-контракту, то вы не знаете, сколько сообщений от других пользователей дойдет до смарт-контракта раньше вашего сообщения. Таким образом, вы не знаете, каким будет размер словаря в тот момент, когда ваше сообщение достигнет смарт-контракта. Это нормально для простого взаимодействия кошелек -> смарт-контракт NFT, но неприемлемо для цепочек смарт-контрактов, например, кошелек -> смарт-контракт NFT -> аукцион -> смарт-контракт NFT. Если мы не можем предсказать расход газа, то может возникнуть ситуация, когда владелец сменился в смарт-контракте NFT, но для операции аукциона не хватило Тонкоинов. Использование смарт-контрактов без словарей дает детерминированный расход газа.
-
Не масштабируется (становится узким местом). Масштабирование в TON основано на концепции шардинга, то есть автоматическом разделении сети на шардинги при высокой нагрузке. Один большой смарт-контракт популярного NFT противоречит этой концепции. В этом случае многие транзакции будут ссылаться на один смарт-контракт. Архитектура TON предусматривает использование шардинговых смарт-контрактов (см. whitepaper), но на данный момент они не реализованы.
TL;DR Решение ETH не масштабируемо и не подходит для асинхронных блокчейнов, таких, как TON.
Реализация TON NFT
В TON у нас есть мастер-контракт — смарт-контракт нашей коллекции, который хранит метаданные и адрес владельца коллекции. Главное, что если мы хотим создать (минтить) новый NFT-элемент, нам нужно просто отправить сообщение этому контракту коллекции. Этот контракт коллекции затем развернет новый контракт NFT-элемента, используя данные, которые мы предоставим.
Вы можете ознакомиться со статьей Обработка NFT в TON или прочитать стандарт NFT, если хотите более подробно изучить эту тему
⚙ Настройка среды разработки
Давайте начнем с создания пустого проекта:
- Создайте новую папку
mkdir MintyTON
- Откройте эту папку
cd MintyTON
- Инициализируем наш проект
yarn init -y
- Установите typescript
yarn add typescript @types/node -D