0

i'm trying to create a smart contract for minting NFT's. When i try to import and use _setTokenUri from OpenZeppelin, there is an error accours in Remix ide says that "Undeclared identifier". I wonder why, so here is my code ;

pragma solidity ^0.8.9;

import '@openzeppelin/contracts/token/ERC721/ERC721.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol';


contract MintNft is ERC721, Ownable {
    uint256 public mintPrice = 0.005 ether;
    uint public totalSupply;
    uint public maxSupply;
    bool public isMintEnabled;

    // Mapping for amount of minted nfts by an address
    mapping(address => uint256) public mintedWallets;

    constructor() payable ERC721('Pokemon Card', 'POKE') {
        maxSupply = 20;
    }
    
    function toggleIsMintEnabled() external onlyOwner {
        isMintEnabled = !isMintEnabled;
    }

    function setMaxSupply(uint256 _maxSupply) external onlyOwner {
        maxSupply = _maxSupply;
    }


    function mint(string memory tokenURI) external payable {
        require(isMintEnabled,"Minting is not enable");
        require(mintedWallets[msg.sender] < 2, 'You have reached maximum mint number');
        require(msg.value == mintPrice, "Wrong value");
        require(maxSupply > totalSupply, "Sold Out ! ");

        mintedWallets[msg.sender]++;
        totalSupply++;
        uint256 tokenId = totalSupply;
        _safeMint(msg.sender, tokenId);
        _setTokenURI(tokenId,tokenURI);

    }
}

Thanks already.

evilmerto
  • 36
  • 5

1 Answers1

0

Okay i figured out that i forget to implement ERC721URIStorage when naming my contract.

i changed it to contract MintNft is ERC721URIStorage, Ownable

Now it works fine.

evilmerto
  • 36
  • 5