关于solidity:简易版NFT合约代码

51次阅读

共计 1459 个字符,预计需要花费 4 分钟才能阅读完成。

原本是想一步一步从 solidity 根底语法做个系列教程,然而这种基础知识,网上材料曾经很多了,一搜一大片,而且官网的文档也讲的很具体,所以本文默认是曾经理解了相干的常识。

什么是 NFT

NFT 是咱们用以代表独特物品所有权的代币。NFT 让咱们把诸如艺术品、收藏品、甚至房地产等物品代币化。他们一次只有一个正式客人,并且受到以太坊区块链的爱护 – 没有人能够批改所有权记录或者依据现有的 NFT 复制粘贴一份新的。

NFT 代表 非同质化 代币。非同质化是一个经济术语,您能够用它来形容家具、歌曲文件或您的电脑等物品。这些货色不能与其余物品调换,因为它们具备独特属性。

另一方面,同质化 物品能够调换,这取决于它们的价值而非独特属性。例如,ETH 或美元具备同质化属性,因为 1 ETH/1 USD 能够兑换成另外的 1 ETH/1 USD。

简易版 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);
    }
}

正文完
 0