Как создать NFT на Полигоне


Введение

Нефунгицидные токены (НФТ) взорвали популярность за последний год. И поскольку NFT используются для искусства, PFP, lifestyle брендов, спорта, игр, метавселенной и многого другого, они не собираются исчезать в ближайшее время. Но в нынешнем состоянии НФТ есть несколько проблем – в частности, майнинг на Ethereum может быть непомерно дорогим, а метаданные, лежащие в основе этих НФТ, часто централизованы.

В этой статье мы рассмотрим один из способов решения этих проблем путем создания и развертывания NFT в сети Polygon Network и использования IPFS для хранения метаданных. В нашем примере мы будем использовать Truffle в качестве среды разработки и Infura для подключения и взаимодействия с блокчейном и IPFS.

Краткий обзор НФТ

Легкоплавкие токены – это криптографические токены, которые можно обменять на любой другой такой же токен (1 == 1). К ним относятся такие криптовалюты, как Bitcoin (BTC) или ETH. Один Биткойн точно такой же, как и любой другой Биткойн.

В отличие от них, НМТ не являются взаимозаменяемыми – один токен не может быть заменен другим, и они могут иметь различную стоимость (1 != 1). NFT – это неоспоримое представление цифрового владения. Он может быть использован для представления любой цифровой собственности, такой как изображения, видео, музыка и многое другое.

НМТ на Ethereum и втором уровне

Большинство НМТ создаются в сети Ethereum, поскольку она обеспечивает наибольшую безопасность и децентрализацию. Однако для обычного человека существует серьезная проблема: Транзакции на первом уровне сети Ethereum стоят дорого.

В течение 2021 года несколько решений этой проблемы приобрели популярность. Решения второго уровня, такие как Arbitrum, zkSync и Polygon Network, призваны обеспечить более удобный для пользователей опыт. Комиссия за транзакции в этих сетях в разы меньше, чем в сетях первого уровня, и в большинстве случаев значительно быстрее.

Еще одной актуальной проблемой НФТ является то, что метаданные, которые они содержат, не всегда хранятся децентрализованно. Если организация, в которой хранятся метаданные, исчезнет, то исчезнет и ценность вашей НМТ. Лучшим решением является хранение метаданных с помощью глобальной одноранговой файловой системы, такой как InterPlanetary File Storage (IPFS).

Объединение таких технологий, как Polygon и IPFS, создает экономически эффективный метод развертывания и хранения ваших НФТ более децентрализованным и постоянным способом. Хотя мы могли бы воспользоваться услугами no-code, такими как предоставляемые ConsenSys, гораздо интереснее развернуть его самостоятельно, и вы получите лучшее понимание того, как все это работает за кулисами.

Итак, давайте рассмотрим, как можно создать и развернуть NFT в сети Polygon. Мы будем использовать Truffle в качестве среды разработки и Infura для подключения и взаимодействия с блокчейном, а также для хранения метаданных в IPFS.

Перед развертыванием мы проведем тестирование на локальном экземпляре блокчейна с помощью Ganache. Когда он будет готов к запуску, мы развернем его в тестовой сети Polygon Mumbai и проверим NFT на OpenSea, самой популярной в мире платформе NFT.

Проект

Чему вы научитесь

  • Загружать образ NFT и метаданные в IPFS через Infura
  • Настраивать сеть полигонов в MetaMask и получать тестовые средства
  • Настроите среду разработки Truffle
  • Напишем смарт-контракт NFT
  • Протестируйте развертывание локально с помощью Ganache
  • Развертывание в тестовой сети Polygon с помощью консоли Truffle и Infura
  • Проверить NFT на opensea.io

Что вам понадобится

  • NodeJS / NPM – установка и управление пакетами
  • Truffle – среда разработки
  • Ganache – локальный экземпляр блокчейна для тестирования
  • Учетная запись Infura – используется для взаимодействия с IPFS и Polygon Networks
  • Счет MetaMask – обеспечение средствами для обработки транзакций

Дополнительные ресурсы

  • Документы Polygon
  • Truffle Docs
  • Документы Infura
  • Документы MetaMask

Настройка учетных записей

Прежде чем мы перейдем к таким интересным моментам, как создание и тестирование, давайте настроим наши учетные записи и подготовим все необходимое. Это обеспечит гладкость остальной части процесса.

Получение учетной записи Infura

Infura – это поставщик узлов Ethereum и API. Он позволит нам легко подключиться к сети Polygon Network, а также обеспечит простой в использовании метод использования IPFS.

Первое, что нам нужно сделать, это перейти на сайт infura.io и создать бесплатную учетную запись. После проверки адреса электронной почты мы получим доступ к приборной панели, где можно создавать новые проекты. Однако сеть Polygon Network не включена по умолчанию.

Мы можем добавить Polygon в наш план, выбрав вкладку “Add-Ons” в левой части экрана и прокрутив вниз до “Network Add-Ons”. Далее мы выбираем “Polygon PoS Add-On” и проходим через подсказку для добавления.

Теперь мы готовы к созданию нового проекта. Давайте вернемся на приборную панель и нажмем кнопку “Создать новый проект”. В качестве продукта мы выберем Ethereum и назовем наш проект Polygon-NFT.

Когда наш проект создан, необходимо отметить несколько моментов:

  • ID проекта
  • Секрет проекта
  • Выбор конечных точек
  • Ссылка на нашу конечную точку

Давайте изменим нашу конечную точку с MAINNET на POLYGON MUMBAI, которая является тестовой сетью Polygon. После этого наша ссылка на конечную точку изменится. Значения на этой странице понадобятся нам позже, а пока мы закончили со страницей проекта.

IPFS через Infura

Поскольку мы уже находимся в нашей учетной записи Infura, давайте создадим еще один проект. Этот проект будет предназначен для использования IPFS для хранения образа и метаданных нашего NFT. На этот раз при создании нового проекта мы выберем IPFS в качестве продукта. Назовем этот проект Polygon-NFT-Metadata.

Для следующих шагов нам понадобятся ID проекта, секрет проекта и URL конечной точки, но сначала нам нужно изображение для нашего NFT.

Просто щелкните правой кнопкой мыши и сохраните это на своей машине 😉

Не стесняйтесь использовать свое собственное изображение в дальнейшем. OpenSea рекомендует размер изображения 350 x 350 пикселей.

Теперь давайте загрузим изображение в IPFS!

Используя командный терминал, мы cd в папку, где хранится наше изображение.

Чтобы загрузить изображение, введите следующую команду:

curl -X POST -F file=@myfile  -u "PROJECT_ID:PROJECT_SECRET"  "https://ipfs.infura.io:5001/api/v0/add"
Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание:

Вывод команды должен выглядеть примерно так:

Наиболее важной частью вывода будет наш “Hash”. Мы можем убедиться, что изображение было загружено успешно, вставив этот хэш в следующий URL: https://ipfs.io/ipfs/YOUR_HASH_HERE.

Важно отметить, что Infura по умолчанию сохраняет наши данные в IPFS. Если мы захотим удалить элемент из IPFS, нам придется удалить его. Теперь, когда наше изображение хранится в IPFS, давайте сохраним там и метаданные. Согласно стандартам OpenSea, мы хотим получить метаданные в формате JSON, как показано ниже:

{ 
  "name": "My Sweet Polygon NFT",   
  "description": "Our amazing NFT deployed to the Polygon Network",     
  "image": "ipfs://YOUR_HASH_HERE" 
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Итак, давайте создадим новый текстовый файл в той же папке на локальной машине, что и наш образ NFT. Для этого мы можем использовать любой текстовый редактор; это не должно быть чем-то навороченным.

Мы добавим метаданные в том же формате, что и выше. Однако вместо использования YOUR_HASH_HERE мы вставим фактический хэш для нашего изображения, которое мы только что проверили. Мы сохраним файл как nft-metadata.json. Нам также нужно убедиться, что после последнего элемента в нашем JSON-файле нет запятой. Если запятая есть, то OpenSea не будет правильно отображать NFT.

Теперь мы можем добавить этот файл в IPFS, используя ту же команду, что и в прошлый раз; нам просто нужно заменить имя файла на @nft-metadata.j.

Отлично! Теперь у нас есть наши метаданные, прикрепленные к IPFS, которые имеют ссылку, указывающую на наше уже прикрепленное изображение. Мы скопируем Hash в выходной файл, чтобы использовать его позже.

Настройка MetaMask

Чтобы взаимодействовать с сетью Polygon Network и оплачивать любые транзакции, нам необходимо создать кошелек Web3. Для этого мы будем использовать MetaMask. Он устанавливается как расширение браузера и позволяет нам подключаться к децентрализованным приложениям (dApps).

Давайте перейдем на сайт metamask.io и загрузим расширение для нашего браузера. При использовании такого криптокошелька, как MetaMask, полезно понимать безопасность кошелька.

Помните: Никогда и никому не сообщайте свою seed-фразу! Тот, у кого есть ваша начальная фраза, может вывести ваши токены.

Нам понадобится использовать 12-словную начальную фразу при создании нашего проекта Truffle. Поэтому обязательно запишите ее и сохраните на потом. Когда мы установим MetaMask и откроем его на приборной панели, нам нужно добавить Polygon в выпадающий список Networks.

Когда мы нажмем на выпадающий список, откроется кнопка для добавления новых сетей в список. Поэтому мы нажмем кнопку “Добавить сеть” и добавим как основную сеть Polygon, так и Mumbai Testnet.

Нам нужно будет ввести следующую информацию:

Mumbai Testnet

  • Имя сети: Mumbai (Polygon Testnet)
  • Новый URL RPC: https://rpc-mumbai.maticvigil.com/
  • Идентификатор сети: 80001
  • Символ валюты: MATIC
  • URL блочного обозревателя: https://mumbai.polygonscan.com/

Главная сеть Polygon

  • Название сети: Polygon Mainnet
  • Новый RPC URL: https://polygon-rpc.com/
  • Идентификатор цепи: 137
  • Символ валюты: MATIC
  • URL блочного обозревателя: https://polygonscan.com/

Теперь у нас есть сеть Polygon Network, добавленная в нашу MetaMask, но если мы переключимся на Mumbai Testnet, там нет MATIC! Давайте изменим это. Нам нужно скопировать адрес нашего кошелька, который указан под именем нашего аккаунта. Он начинается с 0x…

Далее мы перейдем на сайт https://faucet.polygon.technology/, который является краном, предоставляющим тестовые средства для разработки. Нам нужно выбрать Mumbai Network, а затем вставить наш адрес в текстовое поле. После нажатия кнопки “Отправить” мы должны увидеть токены MATIC в нашем кошельке MetaMask через минуту или две.

Примечание: Если у вас несколько аккаунтов в кошельке MetaMask, Truffle по умолчанию использует первый. Поэтому не забудьте добавить тестовые токены MATIC на первый счет в вашем списке.

Теперь, когда мы загрузили в наш кошелек несколько тестовых токенов, мы готовы двигаться дальше.

Установите Truffle и Ganache

Truffle

Truffle – это среда разработки, которая предоставляет инструменты, значительно упрощающие создание блокчейна. Чтобы установить его через командную строку, нам понадобится NodeJS v8.9.4 или более поздней версии и Node Package Manager (npm). Если он еще не установлен, посмотрите по этой ссылке.

После того как он установлен на нашей машине, мы можем установить Truffle с помощью этой команды в терминале:

npm install -g truffle
Войти в полноэкранный режим Выйти из полноэкранного режима

После этого мы можем ввести команду truffle version, чтобы убедиться, что установка прошла правильно. Если есть какие-либо ошибки, убедитесь, что модули npm добавлены в ваш путь.

Ganache

Далее мы установим Ganache, локальный экземпляр блокчейна, используемый для тестирования перед развертыванием в Mumbai Testnet.

У Ganache есть версия с графическим интерфейсом, которую можно скачать здесь, но мы будем использовать версию для терминала. Ее можно установить с помощью этой команды:

npm install ganache --global
Войти в полноэкранный режим Выйти из полноэкранного режима

Опять же, мы можем убедиться в правильности установки, проверив версию: ganache --version.

Настройка нашего проекта

Теперь, когда наши учетные записи настроены и все установлено правильно, давайте начнем собирать все вместе. Первым шагом будет переход в терминале к месту, где мы хотим создать наш проект, и создание новой директории.

mkdir polygon-nft-project && cd polygon-nft-project
Войти в полноэкранный режим Выйти из полноэкранного режима

Одна невероятно полезная вещь в Truffle – это полный набор “коробок” для быстрого начала работы. По сути, это шаблоны, включающие полезные модули, готовые смарт-контракты, представления фронтенда и многое другое. Для этого проекта мы будем использовать блок Polygon Box от Truffle. Установка очень проста; нам нужно просто ввести эту команду:

truffle unbox polygon
Войти в полноэкранный режим Выйти из полноэкранного режима

После установки мы видим, что в папке проекта появилось несколько новых файлов. Самые важные из них, с которыми мы будем работать, это файл README.md, truffle-config.polygon.js, 1_deploy_simple_storage.js в папке migrations, и файлы SimpleStorage.sol, которые находятся в папке contracts.

Скорее всего, вы увидите папки ethereum и polygon в папке contracts. Это потому, что обычно, когда проект развертывается в Polygon, он также должен быть развернут в Ethereum, чтобы пользователи могли легко перемещать свои активы туда и обратно. Мы можем удалить контракты SimpleStorage.sol, поскольку мы не будем их использовать.

Бегло просмотрев файл README.md, мы видим, что для развертывания в сети Polygon Network нам нужно добавить две вещи:

  1. Мнемоническую фразу (seed phrase) кошелька, который мы используем
  2. Идентификатор проекта Infura

Мы захотим сохранить их в файле .env и убедиться, что он добавлен в наш .gitignore, чтобы случайно не загрузить эти секреты при хранении нашего проекта в публичном репозитории.

Загрузка Polygon Truffle Box также установила для нас пакет .dotenv. Все, что нам нужно сделать, это создать файл .env в нашей корневой папке.

Мнемоническую фразу для нашего кошелька можно найти в настройках MetaMask под заголовком “Security & Privacy”. Идентификатор проекта можно найти в разделе “Ключи” в настройках проекта Infura. Наш файл .env будет выглядеть примерно так:

MNEMONIC="your twelve words here ..."
INFURA_PROJECT_ID="project ID # here"
Вход в полноэкранный режим Выход из полноэкранного режима

Следующее, что мы должны сделать, это обновить Truffle для использования последней версии Solidity. В нашем файле truffle-config.polygon.js мы можем добавить версию компилятора, которую мы хотим использовать.

В разделе compilers, в фигурных скобках solc, мы добавим следующее: version: "0.8.11" (последняя версия Solidity на момент написания этой статьи).

Это должно выглядеть следующим образом:

// Configure your compilers
compilers: {
    solc: {
        version: "^0.8.11"
    }
},
Вход в полноэкранный режим Выйти из полноэкранного режима

Примечание: Если вы не удалили контракты SimpleStorage.sol, то для правильной компиляции вам потребуется обновить их версию Solidity. Просто измените строку pragma на следующую: pragma solidity >=0.4.21 <0.9.0;.

Последняя подготовительная работа заключается в установке библиотеки контрактов OpenZeppelin, поскольку мы будем импортировать несколько контрактов. Мы можем установить ее, набрав эту команду в корневом каталоге нашего проекта:

npm install @openzeppelin/contracts
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы используем библиотеку OpenZeppelin, чтобы сделать написание нашего смарт-контракта проще и намного безопаснее. Контракты, которые мы будем использовать, прошли тщательный аудит безопасности, и это гарантирует, что мы придерживаемся отраслевого стандарта для NFT.

Когда наш проект настроен должным образом, мы готовы приступить к самому интересному… Созданию NFT!

Умный контракт

Откроем предпочтительный редактор кода из корневой папки проекта. (Я использую vscode, поэтому команда будет code ..) Создадим новый файл в папке contracts с именем PolygonNFT.sol.

Примечание: Если вам нужно подтянуть язык кодирования Solidity, ознакомьтесь с моей серией статей по основам Solidity.

Мы будем использовать следующий смарт-контракт для нашего NFT:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

// Import the OpenZeppelin contracts
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

// Declare our contract and inherit from the OpenZeppelin ERC721 and Ownable contracts 
contract PolygonNFT is ERC721, Ownable {
    // Helpers for counting safely and converting data to strings
    using Counters for Counters.Counter;
    using Strings for uint256;

    // State variable for storing the current token Id
    Counters.Counter private _tokenIds;
    // Map token Ids to token URI
    mapping (uint256 => string) private _tokenURIs;

    // ERC721 requires a name for the NFT collection and a symbol
    constructor() ERC721("PolygonNFT", "PNFT") {}

    // Set the URI (metadata) for tokenId
    function _setTokenURI(uint256 tokenId, string memory _tokenURI)
        internal
        virtual
    {
        _tokenURIs[tokenId] = _tokenURI;
    }

    // Return the Token URI - Required for viewing properly on OpenSea
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId), "Token does not exist");
        string memory _tokenURI = _tokenURIs[tokenId];

        return _tokenURI;
    }

    // Mint the NFT to the provided address, using the provided metadata URI -- only the wallet address that deployed this contract can call this function
    function mint(address recipient, string memory uri)
        public
        onlyOwner
        returns (uint256)
    {
        _tokenIds.increment();
        uint256 newItemId = _tokenIds.current();

        _mint(recipient, newItemId);
        _setTokenURI(newItemId, uri);

        return newItemId;
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Довольно коротко, правда?! Это прекрасная вещь о композитности Web3. OpenZeppelin делает большую часть тяжелой работы здесь с их стандартом ERC721.

По сути, мы просто определяем коллекцию и символ NFT, предоставляем метаданные NFT через функцию _setTokenURI(), собираем их вместе с нашей функцией mint(), а затем предоставляем OpenSea или кому-либо еще способ получить метаданные NFT через нашу функцию tokenURI().

Тестирование развертывания с помощью Ganache

Развертывание на блокчейн довольно просто, но прежде чем мы сможем это сделать, нам нужно изменить файл 1_deploy_simple_storage.js в папке migrations. Нам просто нужно заменить каждый экземпляр SimpleStorage на то, как мы назвали наш смарт-контракт NFT. В нашем случае: PolygonNFT. Мы также должны переименовать файл в 1_deploy_polygon_nft.js, чтобы устранить любую путаницу.

Теперь наш файл миграции должен выглядеть следующим образом:

const PolygonNFT = artifacts.require("PolygonNFT"); 

module.exports = function (deployer) { 
    deployer.deploy(PolygonNFT); 
};
Вход в полноэкранный режим Выход из полноэкранного режима

Перед развертыванием нашего проекта на живом блокчейне обычно принято тестировать его на локальном экземпляре блокчейна. Для этого мы будем использовать Ganache. В новом окне терминала мы используем эту команду, чтобы запустить проект:

ganache 
Войти в полноэкранный режим Выйти из полноэкранного режима

В терминале должно появиться несколько доступных аккаунтов, их личные ключи и т.д.

Чтобы развернуть наш проект в Ganache, откройте исходное окно терминала. В корневом каталоге нашего проекта введите команду:

truffle migrate --config=truffle-config.polygon.js --network=development
Войти в полноэкранный режим Выйти из полноэкранного режима

Поскольку в нашем проекте два конфигурационных файла, нам нужно указать, какой из них использовать. По умолчанию Truffle будет использовать файл truffle-config.js. После нажатия клавиши Enter мы видим, что Truffle компилирует наши контракты, а затем начинает миграцию. Если все пройдет успешно, вы получите квитанцию о транзакции, которая будет выглядеть примерно так:

Запишите адрес контракта

Теперь, когда наш контракт успешно мигрировал на локальный экземпляр блокчейна, мы можем использовать Truffle Console для взаимодействия с ним. Truffle Console – это мощный инструмент, который позволяет нам использовать javascript для прямого взаимодействия с нашим контрактом без необходимости создания фронтенда. Чтобы воспользоваться им, введите команду:

truffle console --config=truffle-config.polygon.js --network=development
Войти в полноэкранный режим Выйти из полноэкранного режима

Обратите внимание, как командная строка изменилась на truffle(development)>. Теперь мы готовы начать взаимодействие с нашим смарт-контрактом.

Сначала нам нужно получить экземпляр нашего контракта. Скопируйте адрес контракта из квитанции о транзакции, чтобы использовать его в этой строке кода:

let instance = await PolygonNFT.at("YOUR_CONTRACT_ADDRESS_HERE")
Войти в полноэкранный режим Выйти из полноэкранного режима

Он вернет неопределенный адрес, но если мы напечатаем instance, он должен вывести ABI нашего контракта. Теперь мы можем вызвать функцию mint. Нам понадобится адрес контракта, на который мы отправим NFT и наш IPFS URI из предыдущего формата: ipfs://YOUR_HASH_HERE.

await instance.mint("YOUR_WALLET_ADDRESS", "YOUR_METADATA_URI")
Вход в полноэкранный режим Выйти из полноэкранного режима

Важно отметить, что функция mint вызывается адресом, который развернул контракт, потому что именно с этим адресом мы вошли в Truffle Console по умолчанию. Адрес, который мы поместили в код выше, является получателем NFT.

Если все прошло хорошо с нашим кодом выше, мы не должны увидеть никаких ошибок после нажатия клавиши Enter! Теперь мы знаем, что наш контракт работает, и мы можем майнить NFT из него. К сожалению, поскольку это локальный экземпляр блокчейна, у нас нет OpenSea или PolygonScan, чтобы проверить, что наш NFT действительно существует. Для этого мы развернем тестовую сеть в Мумбаи.

Развертывание в Polygon Testnet

Процесс развертывания в Mumbai Testnet очень похож на запуск на нашем экземпляре блокчейна Ganache. Нам просто нужно выйти из консоли Truffle, дважды набрав ctrl+c, а затем выполнить те же шаги, что и выше. Единственное отличие – мы заменим network= development на polygon_infura_testnet.

Прежде чем двигаться дальше, нам нужно убедиться, что наши Mnemonic phrase и Project ID правильно настроены в файле .env, иначе следующие шаги не будут работать. (См. шаги в разделе “Настройка проекта”). Теперь наши команды будут выглядеть следующим образом:

truffle migrate --config=truffle-config.polygon.js --network=polygon_infura_testnet
Войти в полноэкранный режим Выйти из полноэкранного режима

Миграция займет немного больше времени, чем у нашего экземпляра Ganache. После ее завершения будет выведена квитанция о транзакции, похожая на нашу предыдущую. На этот раз мы можем проверить, что наш контракт был успешно перенесен в Mumbai Testnet, введя адрес нашего контракта на https://mumbai.polygonscan.com/address/YOUR_ADDRESS_HERE.

Отлично! Наш контракт переведен в Mumbai Testnet! Теперь давайте взаимодействовать с ним и фактически чеканить наш NFT!

Мы получим доступ к Truffle Console, используя те же команды, что и раньше, снова заменив network= development на polygon_infura_testnet.

truffle console --config=truffle-config-polygon.js --network=polygon_infura_testnet
Вход в полноэкранный режим Выход из полноэкранного режима

Получите экземпляр нашего контракта, используя адрес контракта, который был указан в квитанции о транзакции Mumbai Testnet:

let instance = await PolygonNFT.at("YOUR_CONTRACT_ADDRESS_HERE")
Войти в полноэкранный режим Выйти из полноэкранного режима

А теперь, момент, к которому мы шли всю эту статью! Отправляем наш NFT на нужный нам адрес, используя наш IPFS URI в формате: ipfs://YOUR_HASH_HERE.

await instance.mint("YOUR_WALLET_ADDRESS", "YOUR_METADATA_URI")
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Если нет никаких ошибок, мы можем снова проверить наш контракт на mumbai.polygonscan и увидеть, что наша функция mint() была вызвана! На этот раз мы можем проверить, что наш NFT действительно существует, проверив его на OpenSea.

Проверка нашего NFT на OpenSea

Мы можем легко проверить наш новый NFT на OpenSea, скопировав адрес нашего контракта в строку поиска на сайте https://testnets.opensea.io/. Адреса Ethereum имеют две версии: с контрольной суммой и без нее. Разница в том, что в версии без контрольной суммы все буквы строчные. Нам может понадобиться использовать версию без контрольной суммы, чтобы найти наш NFT на OpenSea. Мы можем получить этот адрес, нажав на Txn Hash на mumbai.polygonscan и затем скопировав адрес из Interacted With (To):.

Адрес вашего контракта будет другим

Если наши метаданные были введены правильно, мы должны увидеть наш новый красивый NFT на OpenSea!

Заключение

Поздравляем! Вы успешно развернули NFT в Polygon Mumbai Testnet! Вы загрузили образ NFT и метаданные в IPFS с помощью API Infura, настроили проект Truffle и написали смарт-контракт для создания NFT, протестировали развертывание локально с помощью Ganache, развернули в Polygon Testnet с помощью Truffle, Infura и MetaMask и, наконец, проверили NFT на OpenSea.

Теперь у вас есть знания для развертывания в Polygon Mainnet, просто убедитесь, что у вас есть настоящие токены MATIC в кошельке MetaMask. Кроме того, при развертывании обязательно используйте network=polygon_infura_mainnet вместо polygon_infura_testnet.

Следующим шагом будет развертывание в Ethereum Mainnet, чтобы иметь возможность перевести ваш NFT с уровня 2 на уровень 1. Это тема для другой статьи, поэтому не забудьте пока ознакомиться с документами Polygon.

Спасибо, что следили за этим руководством! Берегите себя, и счастливого строительства!

(Код для этого проекта можно найти здесь: https://github.com/paul-mcaviney/polygon-nft-project)

Оцените статью
Procodings.ru
Добавить комментарий