본문 바로가기
블록체인/─NFT(ERC-721)

토큰 ID 랜덤으로 Reveal 필요 없이 NFT 발행 (2) 마무리

by SABU 2023. 12. 3.

블록체인, NFT, 이더리움 개발자 모임의 커뮤니티: https://coinhigh.xyz

코인하이 - NFT 커뮤니티, 블록체인 개발자, 비트코인, 이더리움

Coin High는 NFT와 블록체인 생태계의 핵심 개발자들과 함께 특화된 커뮤니티입니다. NFT 프로젝트, 비트코인, 이더리움, 암호화폐

coinhigh.xyz

 
NFT 제작의뢰: https://kmong.com/gig/520626

이더리움, 폴리곤 등 NFT 프로젝트의 모든 개발 - 크몽

oRES 전문가의 IT·프로그래밍 서비스를 만나보세요. 현대는 아이디어가 모든 것을 결정짓는 시대입니다. 특히 블록체인 시장에서는 좋은 아이디어만...

kmong.com


1편: https://sabustory.tistory.com/29

토큰 ID 랜덤으로 Reveal 필요 없이 NFT 발행 (1)

블록체인, NFT, 이더리움 개발자 모임의 커뮤니티: https://coinhigh.xyz 코인하이 - NFT 커뮤니티, 블록체인 개발자, 비트코인, 이더리움 Coin High는 NFT와 블록체인 생태계의 핵심 개발자들과 함께 특화된

sabustory.tistory.com

이더리움, 폴리곤 NFT 프로젝트에 필요한 모든 개발 - 크몽

oRES 전문가의 IT·프로그래밍 서비스를 만나보세요. 현대는 아이디어가 모든 것을 결정짓는 시대입니다. 특히 블록체인 시장에서는 좋은 아이디어만...

kmong.com


Reveal 할 필요없이 발행할때마다 랜덤으로 NFT를 발행하는 것이다.
순서대로가 아닌 처음부터 마지막 순서의 NFT가 발행될 수도 있다. 전 포스트에서는 하나만 전송하는걸로 테스트했지만, 이번 포스트에서는 동시에 여러개의 NFT를 전송할 수 있게 업그레이드를 했다.
 

1. 랜덤으로 토큰id를 제너레이트하는 함수이다. 
- generateRandomTokenId() 함수는 블록 타임스탬프, 블록 기본 수수료, 메시지 발신자 및 _tokenIdCounter를 조합하여 해시 값을 생성한다. 그리고 이 해시 값을 100으로 나눈 나머지에 1을 더하여 1부터 100 사이의 임의의 숫자인 토큰 ID를 얻는다. 만약 해당 토큰 ID가 이미 _tokenExists 맵에 존재한다면, _tokenIdCounter를 증가시키고 다시 해시 값을 계산하여 새로운 토큰 ID를 생성하고 이를 통해 유일한 토큰 ID를 얻는 식이다.
 

2. NFT를 전송하는 함수이다.
TransForOwner() 함수는 _mintAmount 매개 변수로 전달된 수만큼의 NFT를 생성하는 역할을 한다. 이 함수는 onlyOwner 한정자에 의해 소유자만 호출할 수 있으며, nonReentrant 한정자에 의해 중복 호출 방지를 추가했다.
 
_mintAmount 값이 0보다 크고 maxMintAmount 이하인지, 그리고 supply + _mintAmount 값이 maxSupply 이하인지를 확인하는 조건문이 있고, for 루프를 사용하여 _mintAmount에 지정된 수만큼의 NFT를 생성한다. 루프 내부에서는 이미 maxSupply에 도달하거나 _mintedCount가 maxSupply를 초과한 경우 함수를 종료하면 된다.

그리고 위의 generateRandomTokenId() 함수를 호출하여 임의의 토큰 ID를 얻고 만약 해당 토큰 ID가 이미 _tokenExists 맵에 존재한다면, 다시 generateRandomTokenId() 함수를 호출하여 새로운 토큰 ID를 얻는다.
_safeMint(msg.sender, tokenId) 함수를 호출하여 NFT를 생성하고, _tokenExists 맵에 해당 토큰 ID가 존재함을 표시하고,  _mintedCount, supply도 증가시킨다.
 

테스트 완료!
 
https://github.com/Joyangho/randomNFT

GitHub - Joyangho/randomNFT

Contribute to Joyangho/randomNFT development by creating an account on GitHub.

github.com

 


// 메인슬라이더 오토