Проект PetShop, день 4: Добавление метаданных в PetShop NFT

Наш контракт PetShop NFT расширяет контракт OpenZeppelin ERC721URIStorageUpgradeable, который является реализацией ERC721, включающей расширения стандарта метаданных (IERC721Metadata), а также механизм метаданных для каждого токена. Таким образом, мы можем дать каждому токену URI, который указывает на файл JSON, соответствующий «ERC721 Metadata JSON Schema».

На четвертый день я собираюсь загрузить несколько изображений и JSON-файлов метаданных ERC721 в IPFS (Межпланетная файловая система) через NTF.Storage и создать еще несколько токенов с URI. Затем я смогу просмотреть новые токены с их изображениями в моей MetaMask.

Создание и загрузка изображений и JSON-файлов метаданных ERC721

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

$ tree images
images
├── cat-chloe.jpg
├── dog-dexter.jpg
└── lizard-leonardo.jpg

0 directories, 3 files
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем мы воспользуемся ipfs-car, чтобы упаковать наш каталог изображений в файл CAR (Content Addressable aRchives).

$ npm install --save-dev ipfs-car
...

$ npx ipfs-car --pack images --output images.car
root CID: bafybeibu5ezf4coffvkp5h76c2clvaabozilrt2koqjnx5knt6xrfe5i6i
  output: images.car
Войти в полноэкранный режим Выход из полноэкранного режима

Перейдите на NFT.storage, войдите в аккаунт GitHub, а затем загрузите images.car. Это даст нам уникальный URI нашего файла CAR, и мы сможем получить индивидуальный URL для каждого из изображений, включенных в CAR.

Затем создайте каталог metadata и добавьте несколько JSON-файлов метаданных ERC721 для наших будущих маркеров. Вот мой каталог metadata:

$ tree metadata
metadata
├── cat-chloe.json
├── dog-dexter.json
└── lizard-leonardo.json

0 directories, 3 files
Войти в полноэкранный режим Выход из полноэкранного режима

А вот metadata/cat-chloe.json:

{
  "name" : "Chloé",
  "description" : "Chloé Cat",
  "image": "https://bafybeibu5ezf4coffvkp5h76c2clvaabozilrt2koqjnx5knt6xrfe5i6i.ipfs.nftstorage.link/images/cat-chloe.jpg"
}
Войти в полноэкранный режим Выход из полноэкранного режима

Обратите внимание на свойство image: Это URL-адрес изображения кошки из файла CAR, который мы только что загрузили.

По такому же принципу создайте CAR-файл для метаданных и загрузите его в NFT.Storage:

$ npx ipfs-car --pack metadata --output metadata.car
root CID: bafybeie7hl2odyogxdgs3raodccmr2zmpdcclbe2lzmwy3kma5py7yqwe4
  output: metadata.car
Войти в полноэкранный режим Выход из полноэкранного режима

Чеканка токенов с метаданными

Теперь я могу майнить еще несколько токенов с метаданными на свой счет Джейсона:

$ export PETSHOP_ADDRESS=0xff27228e6871eaB08CD0a14C8098191279040c13
$ export JASON_ADDRESS=0xCc4c8184CC4A5A03babC13D832cEE3E41bE92d08
$ export METADATA_BASE_URL=https://bafybeie7hl2odyogxdgs3raodccmr2zmpdcclbe2lzmwy3kma5py7yqwe4.ipfs.nftstorage.link/metadata

$ npx hardhat petshop-mint --network goerli 
    --address $PETSHOP_ADDRESS 
    --to      $JASON_ADDRESS 
    --uri     $METADATA_BASE_URL/cat-chloe.json
Loaded contract from 0xff27228e6871eaB08CD0a14C8098191279040c13: Pet Shop (PET)
  * Sending tx...
  * Waiting tx to be mined...
  * Tx executed, gas used: 179504
Looking for Transfer event from receipt...
  event   = Transfer
  from    = 0x0000000000000000000000000000000000000000
  to      = 0xCc4c8184CC4A5A03babC13D832cEE3E41bE92d08
  tokenID = 2

$ npx hardhat petshop-mint --network goerli 
    --address $PETSHOP_ADDRESS 
    --to      $JASON_ADDRESS 
    --uri     $METADATA_BASE_URL/dog-dexter.json
Loaded contract from 0xff27228e6871eaB08CD0a14C8098191279040c13: Pet Shop (PET)
  * Sending tx...
  * Waiting tx to be mined...
  * Tx executed, gas used: 179516
Looking for Transfer event from receipt...
  event   = Transfer
  from    = 0x0000000000000000000000000000000000000000
  to      = 0xCc4c8184CC4A5A03babC13D832cEE3E41bE92d08
  tokenID = 3

$ npx hardhat petshop-mint --network goerli 
    --address $PETSHOP_ADDRESS 
    --to      $JASON_ADDRESS 
    --uri     $METADATA_BASE_URL/lizard-leonardo.json
Loaded contract from 0xff27228e6871eaB08CD0a14C8098191279040c13: Pet Shop (PET)
  * Sending tx...
  * Waiting tx to be mined...
  * Tx executed, gas used: 179576
Looking for Transfer event from receipt...
  event   = Transfer
  from    = 0x0000000000000000000000000000000000000000
  to      = 0xCc4c8184CC4A5A03babC13D832cEE3E41bE92d08
  tokenID = 4
Войти в полноэкранный режим Выйти из полноэкранного режима

После майнинга я могу добавить их в свой кошелек MetaMask:

Заключение

На четвертый день я экспериментировал с метаданными NFT и IPFS / NFT.Storage. Никаких изменений в коде не произошло.

Ссылки

  • Добавление метаданных и платежей к вашему контракту (из OpenSea)

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