2024-05-16|閱讀時間 ‧ 約 28 分鐘

4.4

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

    contract MyNFT is ERC721{

    using Strings for uint256;

    address owner;
    uint256 public maxSupply = 10; // 最大發行量
    bool private isOpened = false; // 盲盒是否打開, 預設就是沒開

    uint256 public counter = 0;

    modifier onlyOwner { // 只有owner才可以操作的function
    require(msg.sender == owner);
    _;
    }

    constructor (string memory _name, string memory _symbol) ERC721(_name, _symbol){
    owner = msg.sender; // 佈合約的地址, 就是msg.sender
    }

    // 盲盒打開, 圖片就會變, tokenURI改變
    function openBlindBox() external onlyOwner {
    isOpened = true;
    }

    // 設定NFT的baseURI(盲盒)
    function _baseURI() internal pure overrider returns (string memory) {
    return ipfs://QmahbazMeYgjSyKuSLZ6EqGWVKYYKEtDnH1gXdGGioiYnX"; //
    }

    // 查看NFT MetaData網址
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
    if(!isOpenid) { // 如果盲盒沒有被打開, 就回傳網址
    return _baseURI(); // 不管有沒有開, 都回傳Json檔
    }
    return string(abi.encodePacked("ipfs://QmahbazMeYgjSyKuSLZ6EqGWVKYYKEtDnH1gXdGGioiYnX");
    }

    // 實作mint function, 主要用來demo確認用
    function mint (uint256 amount) external {
    require(amount + count <= maxSupply, "over max supply.");
    // 迴圏批量鑄造NFT
    for(uint256 i = 0; i < amount ; i++){
    //鑄造NFT, counter為NFT的tokenId
    _mint(msg.sender, counter);
    counter ++;
    }
    }
    }// SPDX-License-Identifier: MIT
    pragma solidity ^0.8.24;

    contract MyNFT is ERC721{

    using Strings for uint256;

    address owner;
    uint256 public maxSupply = 10; // 最大發行量
    bool private isOpened = false; // 盲盒是否打開, 預設就是沒開

    uint256 public counter = 0;

    modifier onlyOwner { // 只有owner才可以操作的function
    require(msg.sender == owner);
    _;
    }

    constructor (string memory _name, string memory _symbol) ERC721(_name, _symbol){
    owner = msg.sender; // 佈合約的地址, 就是msg.sender
    }

    // 盲盒打開, 圖片就會變, tokenURI改變
    function openBlindBox() external onlyOwner {
    isOpened = true;
    }

    // 設定NFT的baseURI(盲盒)
    function _baseURI() internal pure overrider returns (string memory) {
    return ipfs://QmahbazMeYgjSyKuSLZ6EqGWVKYYKEtDnH1gXdGGioiYnX"; //
    }

    // 查看NFT MetaData網址
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
    if(!isOpenid) { // 如果盲盒沒有被打開, 就回傳網址
    return _baseURI(); // 不管有沒有開, 都回傳Json檔
    }
    return string(abi.encodePacked("ipfs://QmahbazMeYgjSyKuSLZ6EqGWVKYYKEtDnH1gXdGGioiYnX");
    }

    // 實作mint function, 主要用來demo確認用
    function mint (uint256 amount) external {
    require(amount + count <= maxSupply, "over max supply.");
    // 迴圏批量鑄造NFT
    for(uint256 i = 0; i < amount ; i++){
    //鑄造NFT, counter為NFT的tokenId
    _mint(msg.sender, counter);
    counter ++;
    }
    }
    }

    Create an NFT Lootbox for blockchain games or NFT trading card platforms (NBA Topshot clone)

    Solidity 實戰系列工作坊第 3 場精彩重播: ERC20 同質化代幣與 ERC721 NFT 非同質化代幣

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.