【问题标题】:MetaMask - RPC Error: Internal JSON-RPC errorMetaMask - RPC 错误:内部 JSON-RPC 错误
【发布时间】:2022-01-04 15:05:37
【问题描述】:

我正在 CELO 上开发一个 NFT 铸币网站。我的 mint 函数如下所示:

function safeMint(address to) public payable {
    require(msg.value >= mintPrice, "Not enough ETH sent; check price!"); 
    uint256 tokenId = _tokenIdCounter.current();
    _safeMint(to, tokenId);
    _tokenIdCounter.increment();
   // string memory token_uri=tokenURI(tokenId);
}

我的反应前端是这样的:

async function mintNFT() {

if (typeof window.ethereum !== 'undefined') {
  
  await requestAccount()
  const provider = new ethers.providers.Web3Provider(window.ethereum);
  const signer = provider.getSigner();
  const contract = new ethers.Contract(t_tokenAddress, Token.abi, signer);
  
  try{
    await window.ethereum.enable();
  const transation = await contract.safeMint(userAccount);
  await transation.wait();
  fetchNFTIndex();
}
catch(e){
  console.log(e.data.message);
 }
}

}

当我使用 mintPrice =1 wei 或 ether 运行事务时出现以下错误: Error

当我使用 mintPrice=0 ether 或 wei 运行交易时,它工作正常。我不知道这里有什么问题。我的账户中有 5 个 celo,所以我有足够的资金,我假设以太币在 CELO 中转换和支付。 谁能理解这里的问题!

【问题讨论】:

    标签: error-handling ethereum solidity metamask nft


    【解决方案1】:

    链接的错误包含自定义消息“Not enough ETH sent”,这意味着错误源自require() 条件。

    require(msg.value >= mintPrice, "Not enough ETH sent; check price!"); 
    

    您的 JS sn-p 执行该函数,但不随交易发送任何 ETH 值。

    为了发送ETH值,你需要在overrides参数中定义它。

    const transation = await contract.safeMint(userAccount, {
        // send along 1 wei
        value: 1
    });
    

    【讨论】:

    • 感谢您的回复。交易现在可以正常工作了。
    • 我想用 1 个以太币而不是 wei 来铸造 NFT。我已经使用此代码来完成此 const transation = await contract.safeMint(account_address, { value: ethers.utils.parseEther("0.1")。但是它不起作用,因为在这种情况下我发送了 0.1 个以太币,而我的合约需要 1 个以太币但是交易还是成功的,你知道这是否有转机
    • @Maliha 我在您的原始代码中没有看到对 1 ETH 的要求。你可以这样添加:require(msg.value >= 1 ether);
    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多