NFT изнутри или что не так с вашими NFT
Моя первая статья вышла больше месяца назад. Я благодарен всем читателям и комментаторам за внимание и обратную связь! Это была статья ознакомительного уровня. Теперь давайте попробуем пойти немного глубже и посмотреть, как устроен невзаимозаменяемый токен изнутри. И какая из-за этого возникает важная проблема.
Сейчас ETH - самый популярный блокчейн для NFT.
Если вы покупаете NFT, то скорее всего вы покупаете NFT на эфире.
Исключение - карточки NBA Top Shots (блокчейн FLOW) и несколько коллекций на блокчейне WAX.
Основная же масса токенов, продающихся на OpenSea и Rarible, а также все работы на NiftyGateway и Foundation - это токены на эфире. Поэтому говорить пока будем про них.
Блокчейн, смарт-контракт, токен
Токены живут на блокчейнах. Давайте быстро освежим в памяти, что такое блокчейн. И причем тут смарт-контракты.
Блокчейн
Блокчейн - распределенный (децентрализованный) реестр. Или распределенная база данных. То есть данные, записанные в блокчейн, хранятся на множестве компьютеров одновременно, и поэтому не подчиняются никакому регулирующему органу. Данные хранятся в блоках. Данные новых блоков не должны противоречить данным предыдущих, иначе они не будут внесены в цепочку.
Блокчейны устойчивы к взломам, попыткам манипуляций и обеспечивают надежное хранение данных за счет распределенности.
В блокчейне можно хранить разные данные.
Самый популярный блокчейн - блокчейн 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
Самый надежный способ - все-таки попытаться хранить медиа на блокчейне, то есть не отделять медиа от токена.
Это, естественно, накладывает ограничения на свободу творчества. В блокчейне много не сохранишь. Так или иначе, это будут символы, из этих символов и нужно составить изображение.
Проекты, которые хранят медиа полностью на блокчейне:
- Autoglyphs от легендарных Larva Labs. Первый проект с генеративными изображениями, да еще и хранящимися в блокчейне. Цены на автоглифы вполне соответствуют их статусу.
- Совсем свежий проект - ASCII Punks. 2048 панков, составленных из ASCII символов, которые прекрасно хранятся в блокчейне. На мой взгляд - лучший трибьют криптопанкам ever. На момент написания статьи, еще даже доступны к покупке на первичном рынке.
On-chain*
Условное хранение на блокчейне. Тоже очень надежный, но все-таки накладывающий некоторые ограничения на характер произведения, способ.
На блокчейне хранится ключевая информация арта, по которой легко воссоздается оригинальное медиа. Можно назвать такую информацию - ДНК токена.
Добавляем здесь "условно", потому что для того, чтобы восстановить исходный токен все-таки понадобится дополнительное ПО, генератор, который восстановит токен по ДНК. Но если у вас этот генератор есть (или он хранится в надежном распределенном же хранилище, вроде IPFS), то вы от создателей токена перестаете зависеть. ДНК - навсегда в блокчейне, генератор у вас. То есть у вас есть полный контроль и над токеном и над медиа этого токена.
Примеры проектов.
- CryptoKitties - в представлении не нуждаются
- Avastars от известной в NFT тусовке команды NFT42, которая работал с Pranksy над NFTBoxes, к примеру
- DeekHash - хулиганский перспективный проект, где можно из любой строки угодно сделать Deek. Строка с помощью хэш-функции превращается в ДНК, а днк и определяет внешний вид персонажа. ДНК хранится в блокчейне, обеспечивая тем самым интероперабельность и сохранность персонажа. На момент написания статьи, доступны к покупке на первичном рынке, то есть на сайте проекта.
- Pixelchain Art - очень крутой проект, пиксельная графика, которая целиком хранится на блокчейне. Цвет каждого пикселя обозначается символом, и получившаяся строка записывается в блокчейн. Чтобы восстановить картинку, достаточно просто прочитать строку и сформировать изображение из пикселей закодированного цвета.
- Artblocks.io - платформа для художников, которые совместно с командой платформы могут создавать небольшие алгоритмически генерируемые изображения, которые соответственно могут быть описаны векторно, и эти вектора хранятся в блокчейне.
IPFS \ Pinata
Очень многие NFT проекты сейчас используют IPFS для хранения метаданных и медиа для своих токенов.
IPFS расшифровывается как InterPlanetary File System. Если говорить очень упрощенно, то это файловая система, распределенная по множеству компьютеров.
В целом, это неплохое решение.
Когда вы загружаете файл или картинку в IPFS, вы получаете хэш этого объекта.
Этот хеш и будет определять адрес, по которому можно получить доступ к объекту в IPFS.
Пример хэша картинки:
Как видно по его виду, этот хеш можно удобно хранить в контракте.
Но IPFS не идеален, так как его архитектура никак не поощряет ноды за хранение файлов. Поэтому формально сохранность и вечная доступность вашего объекта в IPFS не гарантирована.
Единственный способ гарантировать сохранность - закрепить (pin) этот объект, подняв собственный IPFS узел, или заплатить тем, кто сделает это за вас.
Примером такого сервиса является Pinata.
Но в таком случае, действительно стопроцентная сохранность объекта опять же будет зависеть от того, как долго вы поддерживаете ноду или платите Pinata. То есть концепция децентрализации нарушается.
Единственным плюсом IPFS в этой ситуации остается то, что для адресации используется хэш. Если этот хэш файла с метаданными или с медиа хранится в блокчейне, то он будет доступен всегда. Значит, можно будет забэкапить метаданные и медиа вашего NFT где-то на персональном, к примеру, хранилище, и в случае отказа IPFS, воспользоваться бэкапом, подтвердив оригинальность файлов с помощью хэша.
Это хорошее решение для многих ситуаций, но все-таки хранить криптопанка стоимостью миллион долларов я бы предпочел более надежным способом. И, кажется, такой способ есть.
Arweave
информации.
В основе архитектуры лежит концепция не цепочки блоков (blockchain), а полотна из блоков (blockweave) - когда каждый следующий блок связан с двумя предыдущими.
Для подтверждения транзакций используется механизм Proof of Access. Для того, чтобы подтвердить новую транзакцию (запись информации), узел должен подтвердить быстрый доступ к уже хранящейся.
Таким образом, в сети Arweave узлы финансово мотивированы обеспечивать быстрый и бесперебойный доступ к хранящимся объектам.
И, главное, что платить за хранение данных в Arweave нужно только один раз - в момент загрузки.
На момент написания статьи разработчики Arweave декларируют стоимость в $0.005/MB.
Ложка дегтя в этой бочке меда вечного и доступного хранения - потенциальная модерируемость и цензурируемость контента. Но по меньшей мере, в данном случае модерация осуществляется теми, кто содержит ноды. То есть, более или менее демократическим образом.
Пока очень малое количество проектов используют Arweave, в основном все пользуются IPFS.
Как определить надежность вашего NFT?
Пару месяцев назад вышел сервис для проверки надежности NFT.
Но я его испытал, и на момент написания статьи он работает коряво.
Например, для многих нормально реализованных по 721му стандарту токенов он вообще не может определить URI метаданных, хотя функция tokenURI() в контракте этих токенов работает исправно.
Поэтому я бы советовал изучать информацию по каждому проекту самостоятельно, гуглить, связываться с разработчиками в twitter или discord, или изучать смарт контракт на Etherscan.
Ниже - небольшой обзор способов хранения метаданных и медиа для самых популярных NFT-площадок.
ArtBlocks
Метаданные и медиа хранятся в блокчейне
AsyncArt
Hash для метаданных и для медиа - IPFS.
infiNFT
Метаданные - в блокчейне.
Медиафайл - хэш в IPFS + Arweave
KnownOrigin
Hash для метаданных и для медиа - IPFS.
MakersPlace
Hash для метаданных и для медиа - IPFS.
Mintbase
Метаданные и медиа: хэш в IPFS + Arweave
NiftyGateway
Метаданные: Название коллекции и имя артиста хранятся в блокчейне. Некоторые названия работ - в блокчейне, некоторые офф-чейн.
Работа: IPFS Hash
OpenSea
Технология LazyMinting осложняет однозначное хеширование ресурса.
Метаданные и арт хранятся на собственном хранилище проекта.
Rarible
Hash для метаданных и для медиа - IPFS.
SuperRare
Hash для метаданных и для медиа - IPFS.
Вывод
NFT на самом популярном блокчейне, Ethereum, это просто записи в таблице смарт-контракта, обслуживающего операции с этим токеном.
Информация о медиа (метаданные) и само медиа к этому токену за редкими исключениями не хранятся на блокчейне.
В связи с этим, нужно тщательно проверять, насколько надежно хранят метаданные и медиа те проекты, NFT которых вы покупаете.
При этом, для паники оснований нет, потому что основная масса NFT проектов уже используют довольно надежные способы хранения метаданных и медиа. Поэтому все утверждения о том, что медиа может исчезнуть и ваши NFT могут в мгновение ока обесцениться - в большинстве своем беспочвенны.
Так обстоят дела с NFT на Ethereum.
Мне и самому очень интересно, как устроены стандарты NFT в других блокчейнах, особенно в FLOW и WAX, и решены ли там те проблемы, которые есть у NFT на эфире. Буду с этим разбираться и держать в курсе.
Future work
Тема NFT огромная и вопросов в ней пока больше, чем ответов. Эта статья - часть моего гайда по NFT.
Я открыт к замечаниям и предложениям - как по этой статье, так и в целом по гайду. Пишите, какие моменты относительно NFT осветить подробнее. Это мне очень поможет писать о том, что действительно важно и интересно.