Как добавить и сохранить метаданные в смарт-контракте.

Метаданные — важная часть любого контракта 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.

Посмотрите Пиксельные пиццы на Полигоне.