• About
  • FAQ
  • Earn Bitcoin while Surfing the net
  • Buy & Sell Crypto on Paxful
Newsletter
Approx Foundation
  • Home
    • Home – Layout 1
  • Bitcoin
  • Ethereum
  • Regulation
  • Market
  • Blockchain
  • Business
  • Guide
  • Contact Us
No Result
View All Result
  • Home
    • Home – Layout 1
  • Bitcoin
  • Ethereum
  • Regulation
  • Market
  • Blockchain
  • Business
  • Guide
  • Contact Us
No Result
View All Result
Approx Foundation
No Result
View All Result
Home Bitcoin

network – Issue Interacting with ERC721 Contract via Node.js Backend (Error: “missing argument” when calling mintCard), cant mint cards

Moussa by Moussa
October 20, 2024
in Bitcoin
0
peer discovery – how to obtain the IP addresses of nodes for mining pools?
189
SHARES
1.5k
VIEWS
Share on FacebookShare on Twitter


I’m working on a project to interact with an ERC721 contract through a Node.js backend using ethers.js. The contract allows minting collectible cards (NFTs). Here’s an overview of my setup:
Main.sol file:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
    
    contract Main is ERC721, Ownable {
        uint256 public nextTokenId;
        mapping(uint256 => string) private _tokenURIs;
    
        constructor() ERC721("PokemonNFT", "PKMN") {
            nextTokenId = 1;
        }
    
        function mintCard(uint256 collectionId, address to, string memory tokenURI) public onlyOwner {
            uint256 tokenId = nextTokenId;
            _safeMint(to, tokenId);
            _setTokenURI(tokenId, tokenURI);
            nextTokenId += 1;
        }
    
        function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
            require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
            return _tokenURIs[tokenId];
        }
    
        function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal {
            require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
            _tokenURIs[tokenId] = _tokenURI;
        }
    }

Node.js Script (index.js):

require('dotenv').config();
const express = require('express');
const { ethers } = require('ethers');
const app = express();
const port = 3000;

// Contract information
const CONTRACT_ADDRESS = 'contract address'; 
const ABI = [
    {
        "inputs": [],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "collectionId",
                "type": "uint256"
            },
            {
                "internalType": "address",
                "name": "walletAddress",
                "type": "address"
            },
            {
                "internalType": "string",
                "name": "tokenURI",
                "type": "string"
            }
        ],
        "name": "mintCard",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "tokenId",
                "type": "uint256"
            }
        ],
        "name": "tokenURI",
        "outputs": [
            {
                "internalType": "string",
                "name": "",
                "type": "string"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    }
];

// Set up provider and signer
const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545');
const walletPrivateKey = 'walletkey'; 
const signer = new ethers.Wallet(walletPrivateKey, provider); // Create signer
const contract = new ethers.Contract(CONTRACT_ADDRESS, ABI, signer); // Connect contract to signer

// Minting API endpoint
app.get('/mint/:collectionId/:walletAddress/:tokenURI', async (req, res) => {
    const { collectionId, walletAddress, tokenURI } = req.params;

    try {
        const tx = await contract.mintCard(collectionId, walletAddress, tokenURI);
        await tx.wait(); // Wait for the transaction to be confirmed
        res.status(200).json({ success: true, transactionHash: tx.hash });
    } catch (error) {
        console.error(error);
        res.status(500).json({ success: false, message: error.message });
    }
});

// API endpoint to get token information
app.get('/nft/:tokenId', async (req, res) => {
    const tokenId = req.params.tokenId; // Get tokenId from the request parameters
    try {
        const tokenURI = await contract.tokenURI(tokenId); // Call tokenURI function
        res.json({ tokenId, tokenURI }); // Respond with tokenId and tokenURI
    } catch (error) {
        res.status(400).json({ error: 'Token not found' }); // Handle error if token is not found
    }
});

// Start the server
app.listen(port, () => {
    console.log(`Server is running at http://localhost:${port}`);
});

Problem:
When I try to call the /mint endpoint with this URL:
http://localhost:3000/mint/1/0xYourWalletAddressHere/https://metadata-url

I receive an error saying :

node index.js     
Server is running at http://localhost:3000
 Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (error={"reason":"Error: Transaction reverted: function selector was not recognized and there's no fallback function","code":"UNPREDICTABLE_GAS_LIMIT","method":"estimateGas","transaction":{"from":"Mywalletaddress","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"maxFeePerGas":{"type":"BigNumber","hex":"0xc1b71080"},"to":"contractaddress","data":"0xf2afa53c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b8d4736382c43a4ea117af8f57ed95823d42c6c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f74636772657075626c69632e636f6d2f6d656469612f62696e6172792f3030302f3530302f3233382f3530303233382e6a70670000000000","type":2,"accessList":null},"error":{"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":49,\"error\":{\"code\":-32603,\"message\":\"Error: Transaction reverted: function selector was not recognized and there's no fallback function\",\"data\":{\"message\":\"Error: Transaction reverted: function selector was not recognized and there's no fallback function\",\"data\":\"0x\"}}}","error":{"code":-32603,"data":{"message":"Error: Transaction reverted: function selector was not recognized and there's no fallback function","data":"0x"}},"requestBody":"{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0xc1b71080\",\"maxPriorityFeePerGas\":\"0x59682f00\",\"from\":\"walletaddress\",\"to\":\"contreactaddress\",\"data\":\"0xf2afa53c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b8d4736382c43a4ea117af8f57ed95823d42c6c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f74636772657075626c69632e636f6d2f6d656469612f62696e6172792f3030302f3530302f3233382f3530303233382e6a70670000000000\"}],\"id\":49,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"http://127.0.0.1:8545"}}, tx={"data":"0xf2afa53c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b8d4736382c43a4ea117af8f57ed95823d42c6c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f74636772657075626c69632e636f6d2f6d656469612f62696e6172792f3030302f3530302f3233382f3530303233382e6a70670000000000","to":{},"from":"0x7b8D4736382c43A4eA117AF8F57eD95823d42c6C","type":2,"maxFeePerGas":{"type":"BigNumber","hex":"0xc1b71080"},"maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"nonce":{},"gasLimit":{},"chainId":{}}, code=UNPREDICTABLE_GAS_LIMIT, version=abstract-signer/5.7.0)
    at Logger.makeError (/home/kali/collectible-card-game-daar/node_modules/@ethersproject/logger/lib/index.js:238:21)
    at Logger.throwError (/home/kali/collectible-card-game-daar/node_modules/@ethersproject/logger/lib/index.js:247:20)
    at /home/kali/collectible-card-game-daar/node_modules/@ethersproject/abstract-signer/lib/index.js:365:47
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async Promise.all (index 7) {
  reason: 'cannot estimate gas; transaction may fail or may require manual gas limit',
  code: 'UNPREDICTABLE_GAS_LIMIT',
  error: Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="Error: Transaction reverted: function selector was not recognized and there's no fallback function", method="estimateGas", transaction={"from":"walletadress","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"maxFeePerGas":{"type":"BigNumber","hex":"0xc1b71080"},"to":"contractaddress","data":"0xf2afa53c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000007b8

I also have a deployement script that contain this code”└─$

cat 000001-deploy-game.ts 
import 'dotenv/config'
import { DeployFunction } from 'hardhat-deploy/types'

const deployer: DeployFunction = async hre => {
  if (hre.network.config.chainId !== 31337) return
  const { deployer } = await hre.getNamedAccounts()
  await hre.deployments.deploy('Main', { from: deployer, log: true })
}

export default deployer

and an artifcat? json script with”

──(kali㉿kali)-[~/collectible-card-game-daar/contracts/deployments/localhost]
└─$ cat Main.json            
{
  "address": "contractaddress",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "int256",
          "name": "cardCount",
          "type": "int256"
        }
      ],
      "name": "createCollection",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "transactionHash": "0xcd0a1ec8b116b46b2f3c16f8148fc567ab98e37d9a438b700574d80136d95c79",
  "receipt": {
    "to": null,
    "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
    "contractAddress": "contractaddress",
    "transactionIndex": 0,
    "gasUsed": "706710",

”
and another main.json with: ┌──(kali㉿kali)-[~/…/contracts/artifacts/src/Main.sol]
└─$ cat Main.json

{
  "_format": "hh-sol-artifact-1",
  "contractName": "Main",
  "sourceName": "src/Main.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "int256",
          "name": "cardCount",
          "type": "int256"
        }
      ],
      "name": "createCollection",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],

I’m not sure what i’m doing wrong i’m totally new to this and I need help, thanks.



Source link

Related articles

BTC Defends $80K While Inflation And AI Stock Sell-Off Rattle Crypto Markets

BTC Defends $80K While Inflation And AI Stock Sell-Off Rattle Crypto Markets

October 27, 2026
Stablecoin Issuers Face a January Deadline as OCC Finalises GENIUS Act Rules

Visa’s Agent Payment Pilot Highlights the Next Question for Crypto Wallets

October 27, 2026
Share76Tweet47

Related Posts

BTC Defends $80K While Inflation And AI Stock Sell-Off Rattle Crypto Markets

BTC Defends $80K While Inflation And AI Stock Sell-Off Rattle Crypto Markets

by Moussa
October 27, 2026
0

Trusted Editorial content, reviewed by leading industry experts and seasoned editors. Ad Disclosure Bitcoin had a bumpy stretch. After reaching...

Stablecoin Issuers Face a January Deadline as OCC Finalises GENIUS Act Rules

Visa’s Agent Payment Pilot Highlights the Next Question for Crypto Wallets

by Moussa
October 27, 2026
0

Reason to trust Strict editorial policy that focuses on accuracy, relevance, and impartiality Created by industry experts and meticulously reviewed...

Bitcoin++ Announces Antarctica Edition For January 2028

Bitcoin++ Announces Antarctica Edition For January 2028

by Moussa
October 27, 2026
0

Bitcoin developers have gathered all around the world in places like Austin, Berlin, and Florianópolis, to name a few. In...

Monero Hashrate Nears Record Highs as XMR Price Gains 70% in a Year

Monero Hashrate Nears Record Highs as XMR Price Gains 70% in a Year

by Moussa
October 26, 2026
0

Key TakeawaysMonero’s network hashrate reached an estimated 7.12 GH/s on Oct. 26.SupportXMR, Nanopool and Kryptex collectively accounted for approximately 60%...

How does asmap-data deal with wasting hundreds of kilobytes of space on redundant bit allocation?

by Moussa
October 26, 2026
0

soo I was studying about asmap-data, and studying the data from the repo, it comes out that the top ASNs...

Load More

youssufi.com

sephina.com

[vc_row full_width="stretch_row" parallax="content-moving" vc_row_background="" background_repeat="no-repeat" background_position="center center" footer_scheme="dark" css=".vc_custom_1517813231908{padding-top: 60px !important;padding-bottom: 30px !important;background-color: #191818 !important;background-position: center;background-repeat: no-repeat !important;background-size: cover !important;}" footer_widget_title_color="#fcbf46" footer_button_bg="#fcb11e"][vc_column width="1/4"]

We bring you the latest in Crypto News

[/vc_column][vc_column width="1/4"][vc_wp_categories]
[/vc_column][vc_column width="1/4"][vc_wp_tagcloud taxonomy="post_tag"][/vc_column][vc_column width="1/4"]

Newsletter

[vc_raw_html]JTNDcCUzRSUzQ2RpdiUyMGNsYXNzJTNEJTIydG5wJTIwdG5wLXN1YnNjcmlwdGlvbiUyMiUzRSUwQSUzQ2Zvcm0lMjBtZXRob2QlM0QlMjJwb3N0JTIyJTIwYWN0aW9uJTNEJTIyaHR0cHMlM0ElMkYlMkZhcHByb3gub3JnJTJGJTNGbmElM0RzJTIyJTNFJTBBJTBBJTNDaW5wdXQlMjB0eXBlJTNEJTIyaGlkZGVuJTIyJTIwbmFtZSUzRCUyMm5sYW5nJTIyJTIwdmFsdWUlM0QlMjIlMjIlM0UlM0NkaXYlMjBjbGFzcyUzRCUyMnRucC1maWVsZCUyMHRucC1maWVsZC1maXJzdG5hbWUlMjIlM0UlM0NsYWJlbCUyMGZvciUzRCUyMnRucC0xJTIyJTNFRmlyc3QlMjBuYW1lJTIwb3IlMjBmdWxsJTIwbmFtZSUzQyUyRmxhYmVsJTNFJTBBJTNDaW5wdXQlMjBjbGFzcyUzRCUyMnRucC1uYW1lJTIyJTIwdHlwZSUzRCUyMnRleHQlMjIlMjBuYW1lJTNEJTIybm4lMjIlMjBpZCUzRCUyMnRucC0xJTIyJTIwdmFsdWUlM0QlMjIlMjIlM0UlM0MlMkZkaXYlM0UlMEElM0NkaXYlMjBjbGFzcyUzRCUyMnRucC1maWVsZCUyMHRucC1maWVsZC1lbWFpbCUyMiUzRSUzQ2xhYmVsJTIwZm9yJTNEJTIydG5wLTIlMjIlM0VFbWFpbCUzQyUyRmxhYmVsJTNFJTBBJTNDaW5wdXQlMjBjbGFzcyUzRCUyMnRucC1lbWFpbCUyMiUyMHR5cGUlM0QlMjJlbWFpbCUyMiUyMG5hbWUlM0QlMjJuZSUyMiUyMGlkJTNEJTIydG5wLTIlMjIlMjB2YWx1ZSUzRCUyMiUyMiUyMHJlcXVpcmVkJTNFJTNDJTJGZGl2JTNFJTBBJTNDZGl2JTIwY2xhc3MlM0QlMjJ0bnAtZmllbGQlMjB0bnAtcHJpdmFjeS1maWVsZCUyMiUzRSUzQ2xhYmVsJTNFJTNDaW5wdXQlMjB0eXBlJTNEJTIyY2hlY2tib3glMjIlMjBuYW1lJTNEJTIybnklMjIlMjByZXF1aXJlZCUyMGNsYXNzJTNEJTIydG5wLXByaXZhY3klMjIlM0UlQzIlQTBCeSUyMGNvbnRpbnVpbmclMkMlMjB5b3UlMjBhY2NlcHQlMjB0aGUlMjBwcml2YWN5JTIwcG9saWN5JTNDJTJGbGFiZWwlM0UlM0MlMkZkaXYlM0UlM0NkaXYlMjBjbGFzcyUzRCUyMnRucC1maWVsZCUyMHRucC1maWVsZC1idXR0b24lMjIlM0UlM0NpbnB1dCUyMGNsYXNzJTNEJTIydG5wLXN1Ym1pdCUyMiUyMHR5cGUlM0QlMjJzdWJtaXQlMjIlMjB2YWx1ZSUzRCUyMlN1YnNjcmliZSUyMiUyMCUzRSUwQSUzQyUyRmRpdiUzRSUwQSUzQyUyRmZvcm0lM0UlMEElM0MlMkZkaXYlM0UlM0NiciUyRiUzRSUzQyUyRnAlM0U=[/vc_raw_html][/vc_column][/vc_row]
No Result
View All Result
  • Contact Us
  • Homepages
  • Business
  • Guide

© 2024 APPROX FOUNDATION - The Crypto Currency News