November 26, 2022

Гайд на DNFT с кодом

😚 Вступление 🤗

Каждая моя статья рассматривает что-то новенькое, дабы вы образовывались, а не тупо рассматривали крипту как источник дохода. В общем, данный текст вам пояснит — что такое dNFT и как такой вид NFT сделать самому (код взял из какой-то статьи, оригинал будет в конце)

Следовательно статья будет разделена на две части — первая для нормальных людей, которые просто узнают про нужность dNFT, а вторая для программистов, которые хотят сами воспроизвести эту хуйню

Дисклеймер: автор плохо все понимает, ни в чем не соображает, тупой копипастер и вообще лох и двоечник, фу таким быть. Но он старался, пиздец как старался

🔎 Навигация 🔎

Для нормальных людей

1. dNFT vs NFT

2. Применение dNFT

3. Будущее dNFT

Для программистов хуйни

1. Создание, деплой и тестинг DNFT

🥞 dNFT vs NFT 🧈

Изучив эту тему я кстати для себя понял, что dNFT использовать будут после того, как налутают кеша с обычных типов NFT и начнут появляться ахуенные проекты, которым нужна технология более гибкая, нежели классические статические NFT

Статические NFT

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

Сейчас этот тип используется повсеместно: как искусство, арты, фотографии или для блокчейн-игр.

Из всего этого мы выводим следующие преимущества:

  • Они всегда неизменны
  • Их гораздо проще проверить
  • Они требуют меньших требований к хранилищу и пропускной способности
  • Они более безопасны, поскольку не могут быть изменены в будущем

Недостатки вытекают из преимуществ

  • Нельзя изменить в будущем
По сути это хорошо, подумаете вы, в мерах безопасности и тп.

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

И опять таки плюс для проекта, снова подумаете, можно будет поднять дополнительного бабла на минте GEN 2.

И опять позиция еблана-флипера, которому похуй на будущее криптовалюты. А если через 20 лет будет какой-то невъебенный ВУЗ, который юзает NFT заместо обычных студенческих билетов? Ему придется каждый раз выпускать новые NFT, чтобы для нового потока студентов поменять метаданные, ахуенный мув наверное.

Поэтому и была придумана технология динамических NFT (dynamic NFT)

Динамические NFT

Динамические NFT— это взаимозаменяемые токены, которые могут быть изменены или обновлены после их минта. Изменение dNFT подразумевает то, что могут быть изменены "ТОЛЬКО" метаданные, прикрепленные к динамическим NFT.

Таким образом, dNFT сохраняют уникальный идентификатор токена и адрес контракта, имея при этом возможность обновлять метаданные в будущем.

И опять таки, инструкции и условия для изменения метаданных кодируются в смарт-контракте NFT перед чеканкой NFT, следовательно некая защита есть (и это не совсем как токены какой-то монеты, вы не понимаете, это другое)

Как можно использовать dNFT:

  • DNFT можно использовать для внутриигровых предметов, которые со временем улучшаются по мере прохождения игры (или прокачивается сам персонаж или предмет, это ясно)
наглядный пример прокачки персонажа / предмета
  • DNFT можно использовать для пропусков на какие-либо мероприятия. Метаданные со временем обновляются в зависимости от посещаемости пользователем этих мероприятий (например спортивные игры)
https://opensea.io/collection/formulagp
  • DNFT может быть полезен для учебных заведений, которые хотят постоянно хранить и обновлять информацию об отдельных учениках в своей базе данных (выше описал, действующих примеров не нашел)
  • DNFT могут быть полезны для токенизированных активов реального мира, где несколько показателей меняются на регулярной основе (хотите Авито в WEB3? Получайте)
Метаданные DNFT недвижимости могут отображать историю владельцев, изменений, историю обслуживания и так далее

📋 Будущее DNFT 🧻

Как по мне оба формата выживут, кто-то захочет создать "культуру" и на века сохранить метаданные в блокчейне, а кому-то нужно будет использовать NFT для действительно передовых идей или стартапов. Особенность DNFT развиваться на основе реальных событий делает их более полезными и практичными в любой области.

Однако опять таки — активное использование DNFT будет только тогда, когда криптовалюта выйдет из позиции "поднять бабок и похуй что будет в будущем". Чтобы продвигать нормальное восприятие крипты и нужна вторая часть статьи, которую я мог бы сделать отдельно с названием "Как сделать свой DNFT", но мне по кайфу хуярить огромные полотна

разделение двух рас

👨‍🦰 Создание, деплой и тестинг DNFT 🪂

Вступление и ссылки

Сейчас, вроде единственным, главным поддерживающим инструментом для dNFT является Chainlink. Сами же метаданные изменяются через смарт-контракт с помощью внешних источников данных через оракулов. В общем в гайде будет использоваться именно Chainlink

Репозиторий из статьи: тыкай
Оригинальная и более подробная статья: тыкай
Ссылка на Chainlink: тыкай
Статья для ньюфагов: что такое оракулы + это (Хабр)

Настройка проекта и зависимостей

1) Первое что сделаем - это клонируем уже готовый репозиторий с гх и перейдем в него

git clone https://github.com/ZakAyesh/DynamicNFT.git
cd DynamicNFT

2) Теперь рутина по настройке кода:

  • Читаем readme файл, понимаем что нужны API ключи
  • Регаем аккаунт тут - https://www.infura.io (бесплатно)
  • Дополнительно: мы будем юзать тестовую сеть Rinkeby сети Эфир, следовательно в переменную PRIVATE_KEY нужно будет вставить приватный ключ из кошелька (нпр, Metamask)
export RINKEBY_RPC_URL='www.infura.io/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
  • Установите зависимости с помощью npm install или же yarn install

Изучаем код и вникаем в логику

После установки всех зависимостей перейдите в папку с контрактами (contracts) и откройте DNFT.sol

Первое, что мы увидим, это наследование контракта OpenZeppelin’s ERC721 и Chainlink’s VRFConsumerBase для будущего изменения метаданных:

Затем у нас есть переменные хранилища для VRF, которые будут инициализированы в нашем коде:

Теперь мы начинаем определять переменные, которые будут нужны для создания нашего будущего dNFT. IPFS ссылки у вас будут иные, именно для вашего NFT.

Кстати про IPFS у меня уже есть ахуенная статья - тыкай

Теперь подробнее про код выше:

  • tokenCounter — отслеживает каждый токен dNFT, который мы будем минтить (чеканить звучит лучше кст)
  • EigenValue — это атрибут нашего dNFT, который мы хотим отслеживать on-chain ю ноу?
  • Список из IpfsUri — ссылки которые мы будем юзать для изменений
  • tokenIdToEigenValue — отслеживает EigenValue для каждого NFT
  • requestIdToTokenId — используется для сопоставления всех запросов к Chainlink VRF (Chainlink VRF асинхронный, следовательно юзается именно requestIdToTokenI)
Мы можем заменитьEigenValueна любой атрибут, который хотим отслеживать в цепочке: цвет, размер, имя и т.д.

Теперь рассмотрим функцию createCollectible, которая создает наши dNFT и добавляет им нужные атрибуты. Последнее, что делает функция, - это увеличивает счетчик токенов на единицу:

Далее функция transferFrom, которая фактически вызывает VRF при своем вызове:

  • Переопределяем функцию transferFrom, чтобы добавить новую логику.
  • Затем функция вызывает VRF, используя номер блока в качестве переданного нами начального значения и сохраняет ответ

Теперь функция fulfillRandomness, которая вызывается VRF Chainlink после завершения запроса:

  • мы принимаем значение модуля случайного числа равным 2, чтобы получить либо 0, либо 1.
  • Используем это, чтобы переключиться либо на первый, либо на второй атрибут и переключиться на наш соответствующий URI.

В общем, теперь у нас есть контракт, который позволяет нам создавать dNFT, которые меняются каждый раз, когда контракт вызывается. Кайфарики.

Деплоим эту хуйню

Для запуска мы будем использовать Hardhat. Деплоить будем в тестнете Rinkeby, все нужное для деплоя уже есть в папке deploy репозитория, который мы установили выше.

1) Нам нужно лишь установить зависимости и после запустить деплой:

yarn install
npx hardhat deploy

2) Если вы все сделали верно, то в консоль упадет примерно следующий код:

Compiling 18 files with 0.6.7
Compilation finished successfully
----------------------------------------------------
Deploying dNFT
dNFT deployed to:  0x472fd0039FDD02BcA13a34DaBa788ed1e82bb9A6
Run the following command to fund contract with LINK:
npx hardhat fund-link --contract  0x472fd0039FDD02BcA13a34DaBa788ed1e82bb9A6
Then create a dNFT with the following command:
npx hardhat create-collectible --contract  0x472fd0039FDD02BcA13a34DaBa788ed1e82bb9A6

Из этого кода нам нужен адрес контракта, обращаясь к которому мы будем выполнять запросы.

3) В консоль прописываем команду (которая импортируется из hardhat.config.js):

npx hardhat create-collectible --contract ТВОЙ_АДРЕС_КОНТРАКТА

4) После запуска будет создана твоя первая dNFT, ура 🙌

Тесты покупки и продажи

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

1) Сделаем это следующей командой:

npx hardhat fund-link --contract ТВОЙ_АДРЕС_КОНТРАКТА

2) Теперь переходим на тестнетовый OpenSea (https://testnets.opensea.io/account) и логинимся под тем кошельком, приватный ключ котрого указывали в самом начале.

Там вы увидите свою dNFT (но если не увидели, то надо подождать немного)

В общем на этом можно и закончить, если нужно будет подробнее изучить эту тему, то можете перейти по ссылкам, которые я указывал в самом начале

🚑 Мои каналы 🚒