다양한 NFT 만들기
NFT 이미지 폴더 만들기
- layer를 활용해 요소들을 여러 종류로 만들기 ex) Background1,2,3,4... / Face1,2,3,4...
- 파일로 만들고 파일명을 layers로 변경
- layer로 저장한 이미지들을 테마별로 분류 ex)Background / Face
- 각 파일에 분류된 layer들의 네이밍을
특징#확률
로 변경 ex) Black#20
Hashlips를 활용해 이미지 섞기
- https://github.com/HashLips 에서 다운로드
- 기존 layers 폴더를 내 layers 폴더로 바꾸기
- VSCode로 hashlips 폴더 열기
- 기본 설치
npm update
npm istall
- layerConfigurations 내용에 layers 폴더 내, 분류한 폴더 이름 적기
const layerConfigurations = [
{
growEditionSizeTo: n, ▶ n = 생산할 개수
layersOrder: [{ name: "Background" }, { name: "Clown" }],
},
];
- 실행 후 build>images 파일 확인
npm run build ▶ NFT 이미지 만들기 실행
- images 파일 Pinata에 파일째 업로드
- 업로드 후 name, description, uri config.js 에 삽입
const namePrefix = "Clown";
const description = "Clown face";
const baseUri =
"https://gateway.pinata.cloud/ipfs/본인 주소/";
- 업데이트 후, build>json 폴더에서 변경 내용 확인
npm run update_info ▶변경한 내용 업데이트 할 때
- 변경 됐다면 json 폴더도 Pinata에 업로드
NFT 민트
- Remix IDE 접속 후 작성
// 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);
}
}
- 이전 방식과 같이 Auto Compile 체크, Injected Provider-MetaMask 선택
- Deploy 에 NAME, SYMBOL, METADATAURI, TOTALNFT(총 발행량) 작성
- batchMint를 통해 개수를 적고 전체 발행
- testnet opensea에서 확인