ERC721 기본적인 코드

아래는 ERC721 표준을 따르는 가장 기본적인 코드이다

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

// 1. openzeppelin 불러오기
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";

contract MintNFT is ERC721Enumerable {

  // 2. 초기 배포 기본값
    constructor() ERC721("BlockChainSchool", "BCS") {}


    // 3 & 4. NFT 민팅 (_mint)
    function mintNFT() public {
        uint tokenId = totalSupply() + 1;

        _mint(msg.sender, tokenId);
    }

    // 5. tokenId와 메타데이터 연결짓기
    function setTokenURI(uint _tokenId, string memory _metadataURI) public {
        metadataURIs[_tokenId] = _metadataURI;
    }

  // 6. 메타데이터 조회
  mapping(uint => string) public metadataURIs;

    function tokenURI(uint _tokenId) public override view returns(string memory) {
        // override를 사용하면 부모컨트랙트에서 사용중인 중복함수를 무시하고 동일 이름을 사용할수 있다
        return metadataURIs[_tokenId];
    }
}

1. openzeppelin 라이브러리에서 ERC721 코드를 상속받아온다


2. ERC721 표준은 배포할때 constructor 로 기본값을 설정해야한다
(토큰이름, 토큰심볼)

constructor() ERC721("BlockChainSchool", "BCS") {}

3. 상속받아온 ERC721 에서 필요한 기능함수만 가져와서 사용할 수 있다
NFT를 만들기 위한 함수는 ‘ERC721.sol’ 에서 _mint 함수로 정의되어있다
_mint 함수를 실행시키기위해 필요한 인자는 (address, tokenId) 이다


4. _mint(address, tokenId) 에서

  • address 인자는 msg.sender (컨트랙트 실행자) 로 들어가고
  • tokenId는 1씩 자동으로 증가해서
  • totalSupply (총발행량)이 증가하게 해준다

5. setTokenURI 함수로 민팅된 NFT에
tokenId 와 metadata를 연결하는 작업을 해줘야한다
NFT에 metadata를 연결해주면 이미지, 속성값 같은게 생긴다
NFT tokenId ↔ metadata


6. tokenURI 함수를 만들어서 tokenId 와 연결된 정보를 조회한다

  • metadataURIs 를 mapping 으로 설정하는데
  • tokenId (숫자) 를 입력하면 metadata (string) 를 반환해준다

override

상속받고 있는 ERC721.sol 에서 tokenURI 이름의 함수를
이미 사용하고 있어서 override 를 사용해줘야한다
override를 사용하면 부모컨트랙트에서 사용중인 중복함수를 무시하고 동일 이름을 사용할수 있다


멀티민팅하기

NFT 여러개 민팅해야할 경우 ex) 100개 NFT 민팅
위의 구현한 기본적인 코드로 민팅을 한다면
한개씩 NFT를 민팅할때마다 gas 수수료가 들고 작업시간도 오래걸린다

그래서 반복문을 돌려 한번에 원하는 만큼씩 NFT를 민팅할 수도 있다

❗ 한번의 트랜잭션으로 여러개의 NFT를 민팅할 수 있다

    function multiMint(uint _amount) public {
        for(uint i = 0; i < _amount; i++) {
            mintNFT();
        }
    }

기존에 코드에서 위의 코드를 추가해주면 멀티민팅이 가능하다


https://wavescats.github.io/solidity/2022/09/28/sol8.html
(👆 KIP17 기반 NFT 만들기)

https://wavescats.github.io/solidity/2022/05/26/sol4.html
(👆 ERC721 기반 NFT 만들기)


ERC721 NFT 멀티민팅 코드

ERC721 NFT 멀티민팅 코드