Contract Code:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; contract MyNFT is ERC721URIStorage, Ownable { using Counters for Counters.Counter; uint256 public constant MAX_MINT_COUNT = 10; uint256 public constant MINT_PRICE = 0.000018 ether; Counters.Counter private _tokenIdTracker; mapping(address => uint256) private _mintedCount; address payable public ownerWallet; event NFTMinted(address indexed minter, uint256 indexed tokenId); constructor(address payable _ownerWallet) ERC721("MyNFT", "MNFT") { ownerWallet = _ownerWallet; } function mint(string memory metadataURI) external payable { require(_tokenIdTracker.current() < MAX_MINT_COUNT, "Max mint limit reached"); require(msg.value >= MINT_PRICE, "Insufficient ETH sent for minting"); uint256 tokenId = _tokenIdTracker.current() + 1; _safeMint(msg.sender, tokenId); _tokenIdTracker.increment(); _mintedCount[msg.sender] = _mintedCount[msg.sender] + 1; emit NFTMinted(msg.sender, tokenId); _setTokenURI(tokenId, metadataURI); } function mintedCount(address account) external view returns (uint256) { return _mintedCount[account]; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; ownerWallet.transfer(balance); } receive() external payable { _autoWithdraw(); } function _autoWithdraw() internal { uint256 contractBalance = address(this).balance; ownerWallet.transfer(contractBalance); } } mintNFT.js Code
const { Web3 }= require('web3'); const contractABI = require('./contracts/MyNFT.json').abi; const contractAddress = 'contract address'; const web3 = new Web3('my rpc url'); const contract = new web3.eth.Contract(contractABI, contractAddress); async function mintNFT(metadataURI) { try { const accounts = await web3.eth.getAccounts(); const sender = accounts[0]; const gasPrice = await web3.eth.getGasPrice(); const gasLimit = 30000000; const mintPrice = web3.utils.toWei('0.000018', 'ether'); const valueToSend = mintPrice.toString(); const txData = contract.methods.mint(metadataURI).encodeABI(); const tx = { to: contractAddress, gas: gasLimit, gasPrice: gasPrice, data: txData, from: sender, value: valueToSend, }; const txReceipt = await web3.eth.sendTransaction(tx); console.log('NFT minted successfully with transaction hash:', txReceipt.transactionHash); } catch (error) { console.error('Error minting NFT:', error); } } module.exports = mintNFT; NFTCard.js
import React from 'react'; import mintNFT from './mintNFT'; import './NFTCard.css'; const NFTCard = ({ image, title, price }) => { const handleMint = async () => { try { const metadataURI = 'URI'; await mintNFT(metadataURI); } catch (error) { console.error('Error minting NFT:', error); } }; return ( <div className="NFTCard"> <div className="NFTImageContainer"> <img src={image} alt={title} className="NFTImage" /> </div> <div className="NFTContent"> <h3 className="NFTTitle">{title}</h3> <div className="NFTDetails"> <span className="NFTPrice">{price}<img src="/images/sepeth.png" alt="Price Image" className="pricelogo" /></span> <button className="NFTButton" onClick={handleMint}>Mint</button> </div> </div> </div> ); }; export default NFTCard; I did compiled and deployed contract and it deployed successfully But as soon as i click on mint button on frontend it throws error
I also copied the full folder named "contracts" from build to src\components\contracts because contracts cant be accessed outside src
Please help to fix this issue