NFT изнутри на основе ethereum
Блокчейн, смарт-контракт, токен
Токены живут на блокчейнах. Давайте быстро освежим в памяти, что такое блокчейн. И причем тут смарт-контракты.
Блокчейн
Блокчейн - распределенный (децентрализованный) реестр. Или распределенная база данных. То есть данные, записанные в блокчейн, хранятся на множестве компьютеров одновременно, и поэтому не подчиняются никакому регулирующему органу. Данные хранятся в блоках. Данные новых блоков не должны противоречить данным предыдущих, иначе они не будут внесены в цепочку.
Блокчейны устойчивы к взломам, попыткам манипуляций и обеспечивают надежное хранение данных за счет распределенности.
В блокчейне можно хранить разные данные.
Самый популярный блокчейн - блокчейн Bitcoin. В нем хранятся только данные об операциях с этой криптовалютой.
Ethereum и смарт-контракты
Но что если компьютеры, обслуживающие блокчейн (ноды) будут не только хранить данные, но и исполнять код?
Наверное, какой-то такой вопрос задавал себе Виталик Бутерин перед тем, как придумать Ethereum - второй по популярности блокчейн в мире.
В Ethereum вы можете загрузить в блокчейн свою программу и она будет исполняться на нодах сети. Эта программа и называется смарт-контракт.
Возможность исполнять смарт-контракты - главная особенность Ethereum. А одноименная криптовалюта - это не ценность сама по себе, она нужна для того, чтобы обеспечивать расчеты внутри системы. Самый кайф в том, что раз валюта у нас тоже на блокчейне, то смарт-контракты могут сами отслеживать переводы и производить эти переводы.
Токены
Смарт-контракт может обслуживать любую задачу.
Одной из самых распространенных задач оказалось обслуживание операций с некоторыми условными единицами ценности - токенами.
Токен появляется в тот момент, когда появляется смарт-контракт, его обслуживающий.
То есть обеспечивающий учет владения токенами, передачу и обмен токенов, использование токенов для выполнения каких-либо задач.
Токен, по меньшей мере, токен на эфире - в этом смысле отличается от физической монеты или жетона, которые есть у вас несмотря ни на что.
Ваш токен - это просто запись в таблице смарт-контракта.
В этой таблице записано - сколько токенов принадлежит какому ETH кошельку.
Передача токенов - это просто исполнение функции в смарт-контракте, которая переписывает данные в таблице владения.
Создание токена - добавление новой записи в эту таблицу.
Токен неотделим от смарт-контракта. Это не какая-то единица, существующая сама по себе, она существует только внутри системы, его обслуживающей.
NFT
Вы наверняка уже встречались с этими обозначениями: токен стандарта ERC-721, стандарта ERC-1155, стандарта ERC-998.
Они хоть и называются стандартами на токены, на самом деле являются стандартами на смарт-контракты. Они задают требования к смарт-контрактам, обслуживающим невзаимозаменяемые токены. Эти требования описывают, какие функции должны быть в смарт-контракте, чтобы сторонние приложение - например, биржи, такие как OpenSea, могли работать со всеми токенами одинаково.
А кроме этого, они как раз обеспечивают хранение информации о том, какие именно токены кому принадлежат.
То есть и ваш NFT - это тоже только запись в таблице смарт-контракта.
А где тогда картинка?
Вот мы и подобрались к самому интересному.
NFT = запись в блокчейне + метаданные + медиа
Про запись в блокчейне разобрались, а где все остальное?
Медиа и данные об этих медиа в большинстве существующих сейчас токенов не хранятся в блокчейне.
Хранить большие объемы данных в блокчейне Ehereum очень дорого. Даже если вы просто захотите хранить название и, к примеру, вектор характеристик вашего NFT меча в блокчейне, это будет вам стоить дополнительных 20-30 долларов в момент выпуска этого меча. И каждое изменение в его характеристиках (если вы будете его улучшать, например), тоже нужно будет вносить в блокчейн, а, значит, платить за газ.
А большие медиа хранить не просто дорого, но еще и неудобно.
Поэтому в блокчейне обычно хранится только адрес (URI), по которому можно найти информацию о токене (metadata) и медиа.
Почему это плохо?
Из-за такой ситуации сам токен и медиа оказываются не связанными друг с другом.
Токен хранится на блокчейне, а метаданные и медиа - где-то еще.
В худшем случае, если метаданные и медиа хранятся в менее надежном месте, это грозит тем, что они окажутся недоступны. Да, у вас будет токен, и он по-прежнему может представлять ценность, например, работать пропуском в некий клуб владельцев. Но все же доказать, что именно этот токен был связан с конкретным медиа будет невозможно.
Или медиа будет изменено. Это легко может произойти, если метаданные и само медиа раздаются с серверов создателей токена.
В таком случае, вам остается только доверять компании или человеку, который этот токен создал или обслуживает. Но даже если допустить кристальную порядочность этих субъектов, есть еще форс-мажоры. В общем, мы снова сталкиваемся со всеми проблемами централизованных сервисов - надежность, доверие, и т.д.
Конечно, в NFT сообществе эти проблемы хорошо известны, и все крупные игроки так или иначе работают над тем, чтобы максимально увеличить децентрализацию хранения медиа части невзаимозаменяемых токенов.
Существующие решения
On-chain
Самый надежный способ - все-таки попытаться хранить медиа на блокчейне, то есть не отделять медиа от токена.
Это, естественно, накладывает ограничения на свободу творчества. В блокчейне много не сохранишь. Так или иначе, это будут символы, из этих символов и нужно составить изображение.
On-chain*
Условное хранение на блокчейне. Тоже очень надежный, но все-таки накладывающий некоторые ограничения на характер произведения, способ.
На блокчейне хранится ключевая информация арта, по которой легко воссоздается оригинальное медиа. Можно назвать такую информацию - ДНК токена.
Добавляем здесь "условно", потому что для того, чтобы восстановить исходный токен все-таки понадобится дополнительное ПО, генератор, который восстановит токен по ДНК. Но если у вас этот генератор есть (или он хранится в надежном распределенном же хранилище, вроде IPFS), то вы от создателей токена перестаете зависеть. ДНК - навсегда в блокчейне, генератор у вас. То есть у вас есть полный контроль и над токеном и над медиа этого токена.
IPFS \ Pinata
Очень многие NFT проекты сейчас используют IPFS для хранения метаданных и медиа для своих токенов.
IPFS расшифровывается как InterPlanetary File System. Если говорить очень упрощенно, то это файловая система, распределенная по множеству компьютеров.
В целом, это неплохое решение.
Когда вы загружаете файл или картинку в IPFS, вы получаете хэш этого объекта.
Этот хеш и будет определять адрес, по которому можно получить доступ к объекту в IPFS.
Пример хэша картинки:
QmahYjHD6SayTZTdyvH7GyaeiwU85HRm7FUPvnaNmfcghA
Вывод
NFT на самом популярном блокчейне, Ethereum, это просто записи в таблице смарт-контракта, обслуживающего операции с этим токеном.
Информация о медиа (метаданные) и само медиа к этому токену за редкими исключениями не хранятся на блокчейне.
В связи с этим, нужно тщательно проверять, насколько надежно хранят метаданные и медиа те проекты, NFT которых вы покупаете.
При этом, для паники оснований нет, потому что основная масса NFT проектов уже используют довольно надежные способы хранения метаданных и медиа. Поэтому все утверждения о том, что медиа может исчезнуть и ваши NFT могут в мгновение ока обесцениться - в большинстве своем беспочвенны.