PetShop 프로젝트, 4일차: PetShop NFT에 메타데이터 추가
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를 실험했습니다. 코드 변경 사항이 없습니다.
참조
Reference
이 문제에 관하여(PetShop 프로젝트, 4일차: PetShop NFT에 메타데이터 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zhengzhong/the-petshop-project-day-4-adding-metadata-to-petshop-nft-4m24텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)