1

New solidity learner here. I have created a solidity code to mint NFTs. But I am struggling to create a function that would help me set a fixed price in ether for all listed tokens. Any help or guidance is much appreciated. Attaching the sample code below that I used to deploy NFTS in testnet.opensea.io via IPFS.

// 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));
    }

}
0

With this mint function you are already set up to receive payments for your NFTs. To enforce payments when someone calls your mint function, add a requirement for transaction value to equal cost per NFT x number of NFTs being minted.

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

Since there is no way to update your cost this is a fixed payment.

New contributor
Random Question is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.