zl程序教程

您现在的位置是:首页 >  工具

当前栏目

NFT智能合约分红系统开发搭建(现成源码)

源码系统智能开发 搭建 合约 NFT 分红
2023-06-13 09:13:59 时间

NFT 合约代码

pragma solidity ^0.8.4;
import '@openzeppelin/contracts/token/ERC721/ERC721.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

// 继承ERC721, Ownable
contract SimpleMintContract is ERC721, Ownable {
    // mint 价格
    uint256 public mintPrice = 0.05 ether;
    // 总共已经被mint数量
    uint256 public totalSupply;
    // 可以mint的最大数量
    uint256 public maxSupply;
    // 是否开启mint
    bool public isMintEnabled;
    // 每个地址mint => 数量
    mapping(address => uint256) public mintedWallets;

    // 构造函数,部署合约的时候,设置最大数量为2
    constructor() payable ERC721('Simple Mint', 'SIMPLEMINT') {
        maxSupply = 2;
    }

    // 外部调用函数,开启mint
    function toggleIsMintEnabled() external onlyOwner {
        isMintEnabled = !isMintEnabled;
    }

    // 设置最大mint数量
    function setMaxSuppley(uint256 _maxSupply) external onlyOwner {
        maxSupply = _maxSupply;
    }

    // mint函数
    function mint() external payable {
        // require判断函数,前半部判断为false,则抛出后半部分信息
        // 判断是否开启mint
        require(isMintEnabled, 'minting not enabled');
        // 判断地址是否已经mint
        require(mintedWallets[msg.sender] < 1, 'exceeds max per wallet');
        // 判断发送到合约的eth数量是否跟mint价格一样
        require(msg.value == mintPrice, 'wrong value');
        // 判断是否还有可以mint的数量
        require(maxSupply > totalSupply, 'sold out');

        mintedWallets[msg.sender]++;
        totalSupply++;
        uint256 tokenId = totalSupply;
        _safeMint(msg.sender, tokenId);
    }
}