728x90
안녕하세요!^^
오늘은 BNB Challengers 강의 7일차, 실습가 계속되고있습니다!
NFT의 또다른 모습에 대하여 공부해 보는 시간이었습니다!
ERC-1155란 무엇일까!?! : Multi Token
여러개의 NFT를 발급할 수 있다!!
https://eips.ethereum.org/EIPS/eip-1155
Fungible Token (BEP-20, ERC-20) |
Multi Token (ERC-1155) |
Non Fungible Token (BEP-721, ERC-721) |
|
쪼갤 수 있는가? (dividable) |
O | X | X |
여러개 존재 하는가? | O | O | X |
주 사용처 | 가상화폐 | 게임 인터페이스 | 디지털 컨텐츠 |
화이트리스트!! : 고객관리!?ㅎㅎ
화이트리스트는
- NFT를 구매할수
- NFT를 저렴하개 구매할수
- NFT를 미리 구매할수
등등의 특권이 있다!!
지난수업의 코드에 이어 아래 3가지를 추가해줍니다!!
1. 지갑주소를 받으면 uint 값(구매할수 있는 개수) 을 매핑해준다
2. Owner만 whitelist에 구매할수 있는 개수를 입력 받는다!
3. mint 할때 whitelist인지 확인하고, 맞다면 whitelist 개수를 줄여준다
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MintNFT is ERC721Enumerable, Ownable {
uint constant public TOTAL_NFT = 100;
string public metadataURI;
string public notRevealedURI;
bool public isRevealed;
mapping (address => uint ) whitelist; // white list를 위한 추가부분 1
constructor(string memory _metadataURI, string memory _notRevealedURI) ERC721("BNB,Challenger", "BC") {
metadataURI = _metadataURI;
notRevealedURI = _notRevealedURI;
}
function mintNFT() public {
require(TOTAL_NFT > totalSupply(), "No more mint.");
require(whitelist[msg.sender] > 0 , "Not white List"); // white list를 위한 추가부분 3
uint tokenId = totalSupply() + 1;
_mint(msg.sender, tokenId);
whitelist(msg.sender)--; // white list를 위한 추가부분 3
}
function batchMintNFT(uint _amount) public {
for(uint i = 0; i < _amount; i++) {
mintNFT();
}
}
function tokenURI(uint _tokenId) public override view returns (string memory) {
if(isRevealed == false) return notRevealedURI;
return string(abi.encodePacked(metadataURI, '/', Strings.toString(_tokenId), '.json'));
}
function reveal() public onlyOwner {
isRevealed = true;
}
function setWhitelist(address _whitelist, uint _amount) public onlyOwner { // white list를 위한 추가부분 2
whitelist[_whitelist] = _amount ; // white list를 위한 추가부분 2
} // white list를 위한 추가부분 2
}
배포해보면, 주인도 mintNFT 못하는것을 알수 있다
(화이트 리스트에 안되어있기때문에!!)
그래서!! 내 지갑주소를 화이트리스트에 등록해보쟈!!
이제는 아까와 달리 민팅이 됩니다!!^^
Payable : 수익 창출!!
지금까지 우리는 무료로, 가스비만 지급하면 민팅이 가능했다!!
하지만!! 민팅할 경우 민팅참여자가 가스비 + 수수료를 낸다면,
그 수수료를 우리가 받는다면 좋겠지요~!?
솔리디티 코드로 알아봅시다!
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MintNFT is ERC721Enumerable, Ownable {
uint constant public TOTAL_NFT = 100;
string public metadataURI;
string public notRevealedURI;
bool public isRevealed;
mapping (address => uint ) whitelist;
constructor(string memory _metadataURI, string memory _notRevealedURI) ERC721("BNB,Challenger", "BC") {
metadataURI = _metadataURI;
notRevealedURI = _notRevealedURI;
}
function mintNFT() public payable { // payable 추가부분@@@@ 1
require(TOTAL_NFT > totalSupply(), "No more mint.");
require(whitelist[msg.sender] > 0 , "Not white List");
require(msg.value >=0.1 ether, "Not Enough BNB"); // payable 추가부분@@@@ 2
uint tokenId = totalSupply() + 1;
_mint(msg.sender, tokenId);
whitelist[msg.sender]--;
payable(owner()).transfer(msg.value); // payable 추가부분@@@@ 3
// payable(판매자).transfer(msg.value); // payable 추가부분@@@@ 4
}
function batchMintNFT(uint _amount) public {
for(uint i = 0; i < _amount; i++) {
mintNFT();
}
}
function tokenURI(uint _tokenId) public override view returns (string memory) {
if(isRevealed == false) return notRevealedURI;
return string(abi.encodePacked(metadataURI, '/', Strings.toString(_tokenId), '.json'));
}
function reveal() public onlyOwner {
isRevealed = true;
}
function setWhitelist(address _whitelist, uint _amount) public onlyOwner {
whitelist[_whitelist] = _amount ;
}
}
1. 이함수는 지불하는 함수다 (Payable)
2. 보내는 수수료가 0.1 이더 가 안되면 mintNFT가 안된다!!
3. 보내는 돈을 내 지갑에 넣는다!! 인 마이 포켓!ㅎㅎ
4. 여기까지 주석을 활성화 한다면 판매자에게도 금액을 준다!! like Opensea
감사합니다!%^^
728x90
'블록체인 > 블록체인' 카테고리의 다른 글
재미있는 NFT 프로젝트 알아보기1!! - HAPPIER TOWN (0) | 2022.11.26 |
---|---|
[BNB Challengers 8일차] Dapp 알아보기! - localhost로 Dapp 오픈!! (0) | 2022.11.26 |
[BNB Challengers 6일차] NFT 프로젝트의 발전!! - Owner만 minting 할 수 있게, NFT 전격공개 기능!! (1) | 2022.11.19 |
[BNB Challengers 5일차] 다양한 NFT 프로젝트들!! (0) | 2022.11.18 |
[BNB Challengers 5일차] PFP NFT + Opensea에서 확인하기! (0) | 2022.11.17 |
댓글