[멋쟁이 사자처럼 블록체인 스쿨 3기] 23-04-24

임형석·2023년 4월 24일
0

NFT 대량 민팅

hashlips 이미지 생성

해시립스를 사용해서 한번에 많은 이미지와 메타데이터를 생성할 수 있다.

해시립스 아트엔진

  1. git clone

  2. cd "사용할 폴더" (주의: 영어로된 폴더 or 띄어쓰기 없는 폴더가 상위 폴더여야 함.)

  3. 아래 코드 차례대로 입력

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 사이트에 업로드한다.

Pinata

업로드하고 링크를 복사한다.

/ 앞까지만 복사.

아까 열었던 config.js 파일에서

name / description / uri 모두 바꿔준다.

name / description 은 마음대로 설정.

그리고 다시

npm run build

다 했다면, 메타데이터도 업데이트 해준다.

npm run update_info

메타데이터 업로드

업데이트 된 메타데이터를 pinata 에 업로드

민팅에 pinata 메타데이터 링크를 사용하면 된다.


컨트랙트 배포 및 NFT 민팅

컨트랙트 배포를 위해 remix 에 접속.

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개 발행 완료 !

0개의 댓글