4.4

閱讀時間約 7 分鐘
// 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 非同質化代幣

    尋大神腳印, 亦步亦趨。
    留言0
    查看全部
    發表第一個留言支持創作者!
    從 Google News 追蹤更多 vocus 的最新精選內容