EthereumEthereum
0xb7...76d5
Bothead Collection

Bothead Collection

BH

收藏品
底价
0.0044 ETH
$2,345.34
大小
1,593
收藏品
所有者
540
34% 独特的所有者
此合同的源代码已经过验证!
合同元数据
编译器
0.8.7+commit.e28d00a7
语言
Solidity
合同源代码
文件 1 的 13:Address.sol
合同源代码
文件 2 的 13:Context.sol
合同源代码
文件 3 的 13:ERC165.sol
合同源代码
文件 4 的 13:ERC721.sol
合同源代码
文件 5 的 13:ERC721Enumerable.sol
合同源代码
文件 6 的 13:IERC165.sol
合同源代码
文件 7 的 13:IERC721.sol
合同源代码
文件 8 的 13:IERC721Enumerable.sol
合同源代码
文件 9 的 13:IERC721Metadata.sol
合同源代码
文件 10 的 13:IERC721Receiver.sol
合同源代码
文件 11 的 13:Ownable.sol
合同源代码
文件 12 的 13:Strings.sol
合同源代码
文件 13 的 13:bothead1.sol
pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.3/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.3/contracts/access/Ownable.sol";

contract BotHead is ERC721Enumerable, Ownable {
    address benefitAddr = 0x1Aa03735CB96F4C1b73eDDBf422dBA0882ba8882;
    
    string baseURI;

    uint256 public constant MAX_BOTHEADS = 10000;
    uint256 public price = 80000000000000000;  //0.08 ETH
    uint256 public prePrice = 75000000000000000;  //0.075 ETH
    
    bool public publicSale = false;
    bool public preSale = false;
    
    mapping (address => uint256) public preMintAddrs;
    uint256 public preMintNums;
    uint256 public ownerMintedNum;
    
    constructor(string memory name, string memory symbol) ERC721(name, symbol) {
    }
    
    function getPreMintAddrNums() public view returns (uint256){
        return preMintAddrs[_msgSender()];
    }
    
    function getPrice() public view returns (uint256){
        return price;
    }
    
    function getPrePrice() public view returns (uint256){
        return prePrice;
    }
    
    function getSoldNum() public view returns (uint256){
        return totalSupply();
    }
    
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(benefitAddr).transfer(balance);
    }

    function flipSaleState() public onlyOwner {
        publicSale = !publicSale;
    }
    
    function flipPreSaleState() public onlyOwner {
        preSale = !preSale;
    }
    
    function changePrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function changePrePrice(uint256 newPrice) public onlyOwner {
        prePrice = newPrice;
    }
    
    function setBaseURI(string memory _uri) public onlyOwner {
        baseURI = _uri;
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    
    function ownerMint(uint nums) public onlyOwner{
        require(ownerMintedNum + nums <= 300, "onwer mint limit reached.");
        require(totalSupply() + nums < MAX_BOTHEADS, "heroes sold out.");
        
        for(uint i = 0; i < nums; i++){
            uint id = totalSupply();
            if(id < MAX_BOTHEADS){
                _safeMint(0xcdc114094a76727CB95304bA257F4C578e5Bd018, id);
            }
        }
        ownerMintedNum = ownerMintedNum + nums;
    }
    
    function setPreMintAddr(address[] memory addr) public onlyOwner{
        require(preSale, "Pre Sale not started.");

        uint addrLength = addr.length;

        for(uint i = 0; i < addrLength; i++){
            preMintAddrs[addr[i]] = preMintAddrs[addr[i]] + 5;
        }
    }
    
    function preMint(uint nums) external payable {
        require(preSale, "Pre Sale not started.");
        require(preMintAddrs[_msgSender()] >= nums, "can not pre mint more than you own.");
        require(preMintNums < 800, "ony 800 address can pre mint.");
        require(totalSupply() < MAX_BOTHEADS, "sold out.");
        require(totalSupply() + nums <= MAX_BOTHEADS, "not enough left.");
        
        uint salePrice = prePrice * nums;
        require(msg.value >= salePrice, "not enough funds to purchase.");
        
        for(uint i = 0; i < nums; i++){
            uint id = totalSupply();
            if(id < MAX_BOTHEADS){
                _safeMint(_msgSender(), id);
            }
        }
        
        preMintAddrs[_msgSender()] = preMintAddrs[_msgSender()] - nums;
        preMintNums = preMintNums + 1;
    }
    
    function mint(uint nums) external payable {
        require(publicSale, "Sale not started.");
        require(nums <= 20, "nums not more than 20.");
        require(totalSupply() < MAX_BOTHEADS, "sold out.");
        require(totalSupply() + nums <= MAX_BOTHEADS, "not enough left.");
        
        uint salePrice = price * nums;
        require(msg.value >= salePrice, "not enough funds to purchase.");
        
        for(uint i = 0; i < nums; i++){
            uint id = totalSupply();
            if(id < MAX_BOTHEADS){
                _safeMint(_msgSender(), id);
            }
        }
    }
}

设置
{
  "compilationTarget": {
    "contracts/bothead1.sol": "BotHead"
  },
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_BOTHEADS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreMintAddrNums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSoldNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nums","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nums","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerMintedNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nums","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMintAddrs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintNums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"setPreMintAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]