Как добавить и сохранить метаданные в смарт-контракте.
Метаданные — важная часть любого контракта NFT. Каждый токен содержит данные, которые такие торговые площадки, как OpenSea, извлекают и используют для отображения содержимого ваших NFT. Так что это важная информация.
Итак, как вы его храните, где вы его вообще храните? И как вы реализуете хранение метаданных в NFT? Вот о чем эта статья. Мы также собираемся обсудить несколько важных вещей, которые нужно знать.
Как должен выглядеть файл метаданных?
Файл метаданных для контракта NFT — это файл JSON, хранящийся где-то за пределами блокчейна. С некоторыми хитростями вы можете сделать это в сети, вы можете сделать это в IPFS, или, если у вас уже есть сервер, работающий для вашего веб-сайта, вы можете рассмотреть CDN.
Эти файлы, вероятно, названы в честь tokenId
данных токена, которые они хранят. Я также часто опускаю расширение файла для небольшого улучшения смарт-контракта. Вот как они должны выглядеть согласно OpenSea.
У них есть описание, ссылка на изображение, название и некоторые необязательные атрибуты. Это довольно простой формат JSON, и вы можете узнать больше о стандартах метаданных здесь. Теперь давайте посмотрим, как на самом деле получить эти данные из IPFS или вашей CDN в смарт-контракт.
ERC721 TokenURI и BaseURI
ERC721 — это стандарт, который необходимо внедрить в смарт-контракт, чтобы его можно было назвать NFT. Он реализует IERC721, интерфейс стандарта ERC721. В нем не так много возможностей, но все же большинство коллекций импортируют смарт-контракт от OpenZeppelin.
Контракт ERC721 от OpenZeppelin имеет несколько приятных дополнений и несколько необязательных расширений, о которых мы упомянем позже в этой статье. Но базовый смарт-контракт ERC721 имеет две примечательные функции хранения метаданных: tokenURI
и _baseURI
.
baseURI
является основой всего tokenURI
. Например, если у вас есть коллекция из 10 тысяч токенов, вы, вероятно, сохранили метаданные в папке на CDN или в IPFS. Это означает, что весь URI одинаков для каждого токена, за исключением последней части, которая часто, если tokenId
.
Таким образом, если ваш
baseURI
— это «ipfs://your_folder_hash/», а вашtokenId
определенного токена — 1234, полныйtokenURI
будет «ipfs://your_folder_hash/1234».
Однако нам нужно реализовать функцию _baseURI
самостоятельно. Если она ничего не возвращает, функция tokenURI
вернет пустую строку. Хотя это очень легко добавить.
В свой смарт-контракт добавьте переменную (общедоступную или частную) типа string
, которая будет содержать baseURI
. Мы можем установить эту переменную, вызвав setBaseURI()
из любого места. И смарт-контракт извлекает его, когда кто-то вызывает tokenURI()
, поскольку это автоматически добавляет tokenId
к baseURI
в смарт-контракте OpenZeppelin ERC721.
ERC721URIStorage
Расширением этого является ERC721URIStorage, он позволяет нам устанавливать разные tokenURI
для каждого токена. Это может быть полезно, если вы создаете смарт-контракт для произведений искусства 1/1, которые могут не использовать одну и ту же папку в IPFS или в вашей CDN. Он добавляет следующие функции.
tokenURI(tokenId)
_setTokenURI(tokenId, _tokenURI)
При чеканке вы должны вызвать _setTokenURI()
, чтобы установить tokenURI
для этого нового токена. Он также переопределяет функцию tokenURI
для этой новой функциональности.
Заключение
Метаданные — большая часть NFT. Он хранит изображение и другие важные данные. Мы рассмотрели, как реализовать это с помощью контракта OpenZeppelins ERC721 и небольшого расширения ERC721URIStorage.
Большое спасибо за чтение и хорошего дня.
Подумайте о том, чтобы поддержать меня, подписавшись на Medium. Это мне очень помогает, вам ничего не будет стоить, и вы можете читать сколько угодно статей на Medium!
Следите за мной в Twitter и gm.xyz, чтобы быть в курсе моих проектов.
Ознакомьтесь с проектом NFT Kangaroo Mob.
Посмотрите Пиксельные пиццы на Полигоне.