NFT 폴더 배포

frookie·2023년 4월 24일
0

Remix IDE

목록 보기
2/2

다양한 NFT 만들기

NFT 이미지 폴더 만들기

  1. layer를 활용해 요소들을 여러 종류로 만들기 ex) Background1,2,3,4... / Face1,2,3,4...
  2. 파일로 만들고 파일명을 layers로 변경
  3. layer로 저장한 이미지들을 테마별로 분류 ex)Background / Face
  4. 각 파일에 분류된 layer들의 네이밍을 특징#확률로 변경 ex) Black#20

Hashlips를 활용해 이미지 섞기

  1. https://github.com/HashLips 에서 다운로드
  2. 기존 layers 폴더를 내 layers 폴더로 바꾸기
  3. VSCode로 hashlips 폴더 열기
  4. 기본 설치
npm update
npm istall
  1. layerConfigurations 내용에 layers 폴더 내, 분류한 폴더 이름 적기
  • config.js
const layerConfigurations = [
  {
    growEditionSizeTo: n,		▶ n = 생산할 개수
    layersOrder: [{ name: "Background" }, { name: "Clown" }],
  },
];
  1. 실행 후 build>images 파일 확인
npm run build		▶ NFT 이미지 만들기 실행
  1. images 파일 Pinata에 파일째 업로드
  2. 업로드 후 name, description, uri config.js 에 삽입
  • config.js
const namePrefix = "Clown";
const description = "Clown face";
const baseUri =
  "https://gateway.pinata.cloud/ipfs/본인 주소/";
  1. 업데이트 후, build>json 폴더에서 변경 내용 확인
npm run update_info		▶변경한 내용 업데이트 할 때
  1. 변경 됐다면 json 폴더도 Pinata에 업로드

NFT 민트

  1. Remix IDE 접속 후 작성
  • mintNft.sol
// 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;
    uint public mintedNft;

    constructor(
        string memory _name, 
        string memory _symbol, 
        string memory _metadataUri, 
        uint _totalNft
    ) ERC721(_name, _symbol) {
        metadataUri = _metadataUri;
        totalNft = _totalNft;
    }

    function mintNft() public {
        require(totalNft > mintedNft, "No more mint.");

        mintedNft++;

        _mint(msg.sender, mintedNft);
    }

    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);
    }
}
  1. 이전 방식과 같이 Auto Compile 체크, Injected Provider-MetaMask 선택
  2. Deploy 에 NAME, SYMBOL, METADATAURI, TOTALNFT(총 발행량) 작성
  3. batchMint를 통해 개수를 적고 전체 발행
  4. testnet opensea에서 확인
profile
비전공자의 코딩, 블록체인 공부 일지

0개의 댓글