2022.11.27 - [CHALLENGER : BNB 체인 해커톤] - 5회차 해시립스 (hashlips) 사용해서 대량 이미지 만들기
# 이전 글에서 만든 이미지로 NFT 를 대량으로 발행해보기
1. pinata 에 사진 업로드
2. 메타데이터에 사진 링크 업데이트
3. NFT 발행 시 메타데이터 설정해주기
-------------------------------------------------------
# 메타데이터에 사진 링크 업데이트
hashlips 코드에서 src/config.js 에 desctiption과 baseUri를 업데이트 해준다.
pinata에 업로드한 경로를 baseUri로 넣어준다. 이 때 맨 끝에 / 는 빼줘야 한다.
const description = "Under The Movie NFT, for all movie lovers";
const baseUri = "https://gateway.pinata.cloud/ipfs/...";
코드를 수정한 후 껐다 켜고, 아래 명령어로 업데이트 해준다.
npm run update:metadata
> nftchef-art-engine@2.2.0 update:metadata
> node utils/updateInfo.js
/Users/hyeonjeonghan/Projects/art-engine-main/src/config.js
Running with options { options: {} }
Updated baseUri for images to ===> https://gateway.pinata.cloud/ipfs/...
Updated Description for all to ===> Under The Movie NFT, for all movie lovers
그러면 아래와 같이 json 파일이 잘 업데이트 되어있다.
이렇게 업데이트 된 메타데이터 json 파일을 다시 pinata 에 올려서 스마트 컨트렉트에 반영해주어야 한다.
# 스마트 컨트랙트에서 메타데이터 설정해주기
지난 번 작업한 코드에 이어서 작성
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
contract MintNFT is ERC721Enumerable{
uint constant public MAX_NFT = 100;
string public metadataURI;
constructor(string memory _metadataURI) ERC721("UTM", "underTheMovie"){
metadataURI = _metadataURI;
}
function mintNFT() public {
require(MAX_NFT > totalSupply(), string(abi.encodePacked('can\'t mint more than ', Strings.toString(MAX_NFT), '. current supply :', Strings.toString(totalSupply()))));
uint tokenId = totalSupply() + 1; // tokenId starts from 1 -> images links should start from 1
_mint(msg.sender, tokenId);
}
function burnNFT(uint _tokenId) public{
require(msg.sender == ownerOf(_tokenId), "Fail to burn NFT. Requester is Not the Owner of NFT.");
_burn(_tokenId);
}
function batchMinfNFT(uint _amount) public{
for(uint i =0; i<_amount; ++i){
mintNFT();
}
}
function tokenURI(uint _tokenId) public override view returns(string memory){
return string(abi.encodePacked(metadataURI, '/', Strings.toString(_tokenId), '.json'));
}
}
실행 결과
배포 시에 메타데이터 uri 를 넣어주어야 한다. (마지막 / 지워주기 : 코드에서 '/' 를 추가해줬기 때문에...)
그리고 20개 batchMint 20개를 실행해보았습니다.
tokenUri 함수를 실행시켜 metadata를 확인해서 이미지가 잘 들어가 있는 지 확인해볼 수 있다.
발행한 NFT를 테스트넷에서 확인해 볼 수 있다.
반응형
'CHALLENGER : BNB 체인 해커톤' 카테고리의 다른 글
BNB 체인 해커톤 데모데이 후기 | NFT 프로젝트 | 멋사 해커톤 | NFT서비스 만들기 (0) | 2022.12.17 |
---|---|
solidity modifier | Ownable 이해하기 (0) | 2022.12.06 |
5회차 해시립스 (hashlips) 사용해서 대량 이미지 만들기 (0) | 2022.11.27 |
4회차 강의 정리 | NFT 메타데이터 추가 | NFT 민팅하기 | Pinata 사용하기 | IPFS 란 (2) | 2022.11.16 |
3회차 강의 정리 | NFT 스탠다드 | BEP-721이란? | OpenZeppelin 사용하기 | 민팅 구현하기 | 민팅해보고 OpenSea에서 확인하기 (0) | 2022.11.11 |