PetShop 프로젝트, 4일차: PetShop NFT에 메타데이터 추가

당사의 PetShop NFT 계약은 메타데이터 표준 확장(ERC721)과 토큰별 메타데이터 메커니즘을 포함하는 ERC721URIStorageUpgradeable 의 구현인 OpenZeppelinIERC721Metadata 계약을 확장합니다. 따라서 "ERC721 메타데이터 JSON 스키마"를 준수하는 JSON 파일을 가리키는 URI를 각 토큰에 부여할 수 있습니다.

넷째 날에는 NTF.Storage을 통해 일부 이미지와 ERC721 메타데이터 JSON 파일을 IPFS(InterPlanetary File System)에 업로드하고 URI로 토큰을 더 발행할 예정입니다. 그러면 내 MetaMask에서 이미지와 함께 새로 발행된 토큰을 볼 수 있습니다.

이미지 및 ERC721 메타데이터 JSON 파일 생성 및 업로드



먼저 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. 이렇게 하면 CAR 파일에 대한 고유한 URI가 제공되고 CAR에 포함된 각 이미지에 대한 개별 URL을 얻을 수 있습니다.



그런 다음 metadata 디렉토리를 생성하고 향후 토큰을 위해 일부 ERC721 메타데이터 JSON 파일을 추가합니다. 내 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 속성을 확인하십시오. 이것은 방금 업로드한 CAR 파일의 고양이 이미지 URL입니다.

동일한 원칙에 따라 메타데이터용 CAR 파일을 생성하고 NFT.Storage에 업로드합니다.

$ npx ipfs-car --pack metadata --output metadata.car
root CID: bafybeie7hl2odyogxdgs3raodccmr2zmpdcclbe2lzmwy3kma5py7yqwe4
  output: metadata.car




메타데이터가 있는 민트 토큰



이제 메타데이터가 포함된 토큰을 제 계정 Jason에 추가로 발행할 수 있습니다.

$ 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를 실험했습니다. 코드 변경 사항이 없습니다.

참조


  • Adding metadata and payments to your contract (from OpenSea)
  • 좋은 웹페이지 즐겨찾기