NFT мини техничка
Привет всем молодым миллионерам! С вами Тёма!
Сегодня мы будем разбираться в том, что такое нфт и как они вообще работают
Сразу предупрежу самых умных любителей флипа - тут не будет ничего про сигнатуру и фронтран!
Начнем!
NFT = токен
Я считаю что стоит начать с самых основ. Поэтому начнем с того, что НФТ по сути своей является токеном, да, таким же как $USDT, $SAND, $UNI, просто другого формата
Что это за форматы такие?
Нативный токен
Это основной токен сети, в котором платится комиссия (в эфире - эфир, в полигоне - матик и тд). Информация о балансах таких токенов хранится прямо в самом блокчейне
ERC-20
Это уже не просто токен, это кастомный токен. Практически все монетки на эфире являются производной от данного алгоритма, те же $USDT, $SAND, $UNI и тд. Хранятся они не на кошельке, а в смартконтракте (да да, $USDT это смартконтракт по своей сути), то есть прямо в контракте хранится информация подобного вида:
Слева указывается адрес, справа количество токенов на этом адресе. Соответсвенно чтобы получить баланс на кошельке, необходимо просто передать в контракт адрес интересующего нас кошелька
Вот например контракт $USDT, ТЫК
Чтобы узнать баланс, перейдите в "Contract" (с зеленой галочкой штука), после в "Read Contract" и там найдите поле "BalanceOf". Вбейте туда интересующий вас адрес и получите количество $USDT на этом кошельке
ERC-721
Вот мы наконец и подобрались к НФТ (ERC-721 - научное название нфт)
НФТ - Non-fungi... Да, согласен, это все мы и так миллион раз слышали, поэтому объясню чуть по-другому. Если в случае с нативным токеном и ERC-20 токеном вы можете отсылать их в каком угодно количестве, хоть 10, хоть 0.123583, то ERC-721 токены (нфт) можно отсылать только поштучно
Нфт так же хранятся не на кошельке, а на контракте. Выгляди схема хранения нфт примерно вот так:
Слева указывается номер нфт, а справа адрес, которому принадлежит нфт. Соотвественно мы можем передать в контракт номер нфт и получить кошелек холдера
Вот например контракт Otherdeed (земли BAYC) ТЫК
Мы все так же можем перейти в "Contract", после в "Read Contract" и там найти уже новое поле, а именно "ownerOf". Вбиваем туда интересующей нас номер нфт и получаем адрес холдера!
Так, теперь мы уже крутые и знаем разницу между разными протоколами, но все же, что такое это ваше нфт и как там вообще оказались картинки???
Нфт = сайт
Да, любая нфт является по своей сути обычным сайтом!
А теперь разберемся более подробно
Существует два основных вида хранения нфт: On-Chain и Off-Chain
Off-Chain
Это хранение нфт не в блокчейне! Да, вот и децентрализация ваша надуваловом оказалась (ладно, шучу, дальше об этом подробнее)
Это наиболее распространенный вариант для нфт, потому что он тратит меньше газа на минт (подробнее о газе в статьях про EVM), но если коротко, то ссылка (просто небольшой набор символов) занимает намного меньше памяти, чем полноценная картинка (очень много символов, в разы больше), а газ очень сильно зависит от объема передаваемой памяти (чем больше информации передаете, тем больше газа платите)
Но чем по своей сути является хранение Off-Chain?
Это просто хранение ссылки на сторонний ресурс (просто сайт) с картинкой. Давайте разберем это на примере все тех же Otherdeed (земли BAYC), напоминаю их контракт - ТЫК
Теперь мы снова переходим в контракт и находим поле "TokenURI" и вводим туда номер интересующей нас нфт
Вау! А вот и ссылка! Давайте по ней перейдем (просто вбейте в поисковую строку)
Так, много символов и так мало смысла, но самом деле нет. Во всех этих данных зашита какая-то информация. Например в самом начале у нас написано "attributes" - это трейты данной нфт. Вы можете перейти на OpenSea и сверить это все
Теперь мы копируем поле "image" (я его уже выделил) и снова просто вбиваем его в поисковую строку
Оп! А вот и картинка появилась!
Как мы можем увидеть справа в инструментах разработчика (серое поле) у нас имеется просто ссылка на .jpg файл и все, вот ваше нфт
On-Chain
А вот и децентрализация подъехала, ведь это хранение нфт непосредственно в блокчейне! Но как???
Суть тут в том, что мы храним полноценную картинку в тексте, то есть если раньше по запросу "TokenURI" вам выдавала ссылку на сайт, то теперь вам выдает просто сайт, в том смысле что это ПОЛНОСТЬЮ КОД ВСЕЙ СТРАНИЦЫ САЙТА
Давайте так же на примере попробуем разобрать работу данного вида нфт
Для примера возьмем контракт коллекции OnChainMonkey - ТЫК
Переходим во все то же поле "Contract", там снова в "Read Contract", снова находим "TokenURI" и вводим туда номер интересующей нас нфт
Блин, в этот раз выглядит в разы страшнее!
Так, не отчаиваемся, берем себя в руки и снова копируем все что видим и вбиваем в поисковую строку
Еще один набор непонятных символов? Опять же, нет!
Тут мы так же можем увидеть название нфт "OnChain Monkey #1111", трейты и тд, но самое главное тут снова в поле "image". Снова копируем и вставляем в поисковую строку
(по факту то, что мы скопировали - svg завернутый в base64, если вы не поняли что я сейчас написал, то вам это и не надо)
Вау! BAYC на минималках привет!
Что мы видим перед собой? Да ничего особенного, простую страничку, на которой при помощь разнообразных геометрических фигур (справа в панели разработчика они описаны) изображена наша нфт!