Solidity

以固定價格列出 NFT 集合的正確功能是什麼?

  • March 22, 2022

這裡是新的 Solidity 學習者。我創建了一個用於鑄造 NFT 的可靠程式碼。但是我正在努力創建一個函式來幫助我為所有列出的代幣設置一個固定的乙太幣價格。非常感謝任何幫助或指導。附上我用來通過 IPFS 在 testnet.opensea.io 中部署 NFTS 的範常式式碼。

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract NFT_TOKEN is ERC721Enumerable, Ownable {
   using Strings for uint256;
   
   string public baseURI;
   string public baseExtension = ".json";
   uint256 public cost = 0.01 ether;
   uint256 public maxSupply = 10000;
   uint256 public maxMintAmount = 20;
   bool public paused = false;
   
   constructor(
       string memory _name,
       string memory _symbol,
       string memory _initBaseURI
   )   ERC721(_name, _symbol) {
       setBaseURI(_initBaseURI);
       mint(msg.sender, 1);
           
   }
     
   // internal
   function _baseURI() internal view virtual override returns (string memory) {
       return baseURI;
   }
   
   // public
   function mint(address _to, uint256 _mintAmount) public payable {
       uint256 supply = totalSupply();
       require(!paused);
       require(_mintAmount > 0);
       require(_mintAmount <= maxMintAmount);
       require(supply + _mintAmount <= maxSupply);
       
       if(msg.sender != owner()) {
           require(msg.value >= cost * _mintAmount);
       }
       
       for (uint256 i = 1; i <= _mintAmount; i++) {
           _safeMint(_to, supply + i);
       }
         
   }
     
   function walletOfOwner(address _owner)
       public
       view
       returns (uint256[] memory)
           
     {
       uint256 ownerTokenCount = balanceOf(_owner);
       uint256[] memory tokenIds = new uint256[](ownerTokenCount);
       for (uint256 i; i < ownerTokenCount; i++) {
           tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
       }
       return tokenIds;
   }
   
   function tokenURI(uint256 tokenId)
       public
       view
       virtual
       override
       returns (string memory)
     {
       require(
           _exists(tokenId),
           "ERC721Metadata: URI query for nonexistent token"
       );
       
       string memory currentBaseURI = _baseURI();
       return 
         bytes(currentBaseURI).length > 0
           ? string(abi.encodePacked(baseURI, tokenId.toString(), baseExtension))
           : "";
   }
     
   // only owner
   function  setCost(uint256 _newCost) public onlyOwner() {
       cost = _newCost;
         
   }
     
   function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
       maxMintAmount = _newmaxMintAmount;
   }
     
   function setBaseURI(string memory _newBaseURI) public onlyOwner() {
       baseURI = _newBaseURI;
   }
     
   function setBaseExtension(string memory _newBaseExtension) public onlyOwner() {
       baseExtension = _newBaseExtension;
   }
     
   function pause(bool _state) public onlyOwner() {
       paused = _state;
   }
     
   function withdraw() public payable onlyOwner() {
       require(payable(msg.sender).send(address(this).balance));
   }

}

使用此mint功能,您已經設置好接收 NFT 的付款。要在有人呼叫您的鑄幣函式時強制付款,請將交易價值要求添加為等於每 NFT x 鑄幣數量的成本。

require(msg.value == cost * _mintAmount, "Not the right amount of ETH");

由於無法更新您的,cost這是固定付款。

正如@randomquestion 所提到的,您需要在智能合約中設定價格以收集初始銷售收入,並且此銷售應該發生在您的鑄幣頁面上。

opensea是一個二級交易平台,鑄幣的使用者如果想交易,會為自己的nft設置自己選擇的價​​格。

除非您想將所有 nfts 鑄造到您的錢包中,然後在輔助平台上以不同的價格列出每個,否則不推薦,因為列出每個 nft 會花費您很多時間。

我希望你現在有這個想法,因為它晚了 6 個月。

引用自:https://ethereum.stackexchange.com/questions/109432