204 ERC721 - Edit Mint Windows, Allowlist Mapping

閱讀時間約 8 分鐘

1. Modify / Edit mint windows

// Modify the mint windows
function editMintWindows(
bool _publicMintOpen,
bool _allowListMintOpen
) external onlyOwner {
publicMintOpen = _publicMintOpen;
allowListMintOpen = _allowListMintOpen;
}

2. Set allowlist mapping to save allowlist addresses

  • only hardcore people, certain people can mint this NFT
  • set the allowlist, remember to add [""]
  • create array for mapping
  • create a for loop

3. Clean up code

  • internalMint
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract EmilPD is ERC721, ERC721Enumerable, ERC721Pausable, Ownable {
uint256 private _nextTokenId;
uint256 maxSupply = 2000;

bool public publicMintOpen = false;
bool public allowListMintOpen = false;

mapping(address => bool) public allowList;

constructor(address initialOwner)
ERC721("EmilPD", "ED")
Ownable(initialOwner)
{}

function _baseURI() internal pure override returns (string memory) {
return "ipfs://QmZc8roJUDqCGipgGbZ9gz9dzpKAW17NkdfjQx2qnUk2JY/";
}

function pause() public onlyOwner {
_pause();
}

function unpause() public onlyOwner {
_unpause();
}

// Modify the mint windows
function editMintWindows(
bool _publicMintOpen,
bool _allowListMintOpen
) external onlyOwner {
publicMintOpen = _publicMintOpen;
allowListMintOpen = _allowListMintOpen;
}

// require only the allowList people to mint
// Add publicMint and allowListMintOpen Variables
function allowListMint() public payable {
require(allowListMintOpen, "AllowList Mint Closed");
require(allowList[msg.sender], "You are not on the allow list");
require(msg.value == 0.001 ether, "Not Enough Funds");
internalMint();
}

// Add Payment
// Add limiting of supply
function publicMint() public payable {
require(publicMintOpen, "Public Mint Closed");
require(msg.value == 0.01 ether, "Not Enough Funds");
internalMint();
}

function internalMint() internal {
require(totalSupply() < maxSupply, "We Sold Out!");
uint256 tokenId = _nextTokenId++;
_safeMint(msg.sender, tokenId);
}

// Populate the Allow List
function setAllowList(address[] calldata addresses) external onlyOwner {
for(uint256 i = 0; i < addresses.length; i++){
allowList[addresses[i]] = true;
}
}

// The following functions are overrides required by Solidity.

function _update(address to, uint256 tokenId, address auth)
internal
override(ERC721, ERC721Enumerable, ERC721Pausable)
returns (address)
{
return super._update(to, tokenId, auth);
}

function _increaseBalance(address account, uint128 value)
internal
override(ERC721, ERC721Enumerable)
{
super._increaseBalance(account, value);
}

function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC721Enumerable)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}
尋大神腳印, 亦步亦趨。
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容