해시립스를 사용해서 한번에 많은 이미지와 메타데이터를 생성할 수 있다.
git clone
cd "사용할 폴더" (주의: 영어로된 폴더 or 띄어쓰기 없는 폴더가 상위 폴더여야 함.)
아래 코드 차례대로 입력
npm update
npm install -g node-gyp
npm install
그리고 생성된 layers 라는 폴더에 4가지 재료 폴더를 만들어준다.
"#" 뒤의 숫자는, 생성 확률이다. 3가지이니 33/33/34 = 100%
이러한 재료들을 해시립스가 섞어 하나의 이미지를 만들어 준다.
다음은 src/config.js
이 부분을 폴더 이름과 맞게 수정해준다.
해시립스에 재료 정보를 설정한다.
다 되었다면,
npm run build
다 끝났으면, 생성된 build 폴더에서 이미지와 json 파일을 확인할 수 있다.
쉽게 NFT 이미지와 메타데이터를 여러개 만들어 낼 수 있다.
이미지 파일의 폴더를 Pinata 사이트에 업로드한다.
업로드하고 링크를 복사한다.
/ 앞까지만 복사.
아까 열었던 config.js 파일에서
name / description / uri 모두 바꿔준다.
name / description 은 마음대로 설정.
그리고 다시
npm run build
다 했다면, 메타데이터도 업데이트 해준다.
npm run update_info
업데이트 된 메타데이터를 pinata 에 업로드
민팅에 pinata 메타데이터 링크를 사용하면 된다.
컨트랙트 배포를 위해 remix 에 접속.
아래 코드를 복붙해준다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
contract MintNft is ERC721Enumerable {
string public metadataUri;
uint public totalNft;
constructor(
string memory _name,
string memory _symbol,
string memory _metadataUri,
uint _totalNft
) ERC721(_name, _symbol) {
metadataUri = _metadataUri;
totalNft = _totalNft;
}
function mintNft() public {
require(totalNft > totalSupply(), "No more mint.");
uint tokenId = totalSupply() + 1;
_mint(msg.sender, tokenId);
}
function batchMint(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'));
}
function burnNFT(uint _tokenId) public {
require(msg.sender == ownerOf(_tokenId), "Caller is not token owner.");
_burn(_tokenId);
}
}
이 코드에선 batchmint 함수가 작성되어있다.
민팅 반복 함수이다.
코드 복붙 후,
deploy 탭에서
name, symbol,
그리고 방금 업로드한 메타데이터 uri 를 붙여준다.
/ 앞까지만 복사해서 붙여야 함.
마지막으론, 민팅할 NFT 갯수.
저 갯수를 초과하여 민팅할 수 없다.
더 민팅하고 싶다면, 다시 컨트랙트를 배포해야 함.
컨트랙트 배포가 끝났다면,
Deployed contracts 탭으로 이동.
batchMint 함수.
아까 컨트랙트에서 작성했던 민팅 반복 함수이다.
여기에 컨트랙트에서 입력한 최대 민팅 값인 5 이하의 값을 적고,
transact 하면 여러개의 nft 를 한번에 발행할 수 있다.
5개 발행 완료 !