簡體   English   中英

MetaMask - RPC 錯誤:執行恢復,簡單的 NFT 迷你 Dapp

[英]MetaMask - RPC Error: execution reverted, Simple NFT Miniting Dapp

我正在構建一個簡單的 NFT 鑄造 Dapp 用於籌款。 我首先在 Polygon 測試網上部署了合約,然后在以太坊測試網 goerli 上部署了合約。 在整合的同時在此處輸入圖像描述 ,我的智能合約前端使用 Ethers.js,我遇到了同樣的錯誤。 我進行了研究並嘗試了一些可用的解決方案,但仍然遇到相同的錯誤。

這是完整的倉庫: https://github.com/DevABDee/WagmiPakistan您可以使用 live-Server 來運行應用程序,我使用的是簡單HTML

我的 hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config({ path: ".env" });

POLYGON_TESTNET_URL = process.env.POLYGON_TESTNET_URL;
GOERLI_TESTNET_URL = process.env.GOERLI_TESTNET_URL;
PRIVATE_KEY = process.env.PRIVATE_KEY;
ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY;

module.exports = {
  solidity: {
    version: "0.8.7",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200,
      },
    },
  },
  networks: {
    matic: {
      url: POLYGON_TESTNET_URL,
      accounts: [PRIVATE_KEY],
      gas: 2100000,
      gasPrice: 8000000000
    },
    goerli: {
      url: GOERLI_TESTNET_URL,
      accounts: [PRIVATE_KEY],
      gas: 2100000,
      gasPrice: 8000000000
    }
  },
  etherscan: {
    apiKey: ETHERSCAN_API_KEY
  }
};

索引.js:

import { ethers } from "https://cdn-cors.ethers.io/lib/ethers-5.5.4.esm.min.js";
import {contractAddress, contractAbi} from  "./constants.js";

const mintBronze = document.getElementById('MintBronze');
const mintSteel = document.getElementById('MintSteel');
const mintGold = document.getElementById('MintGold');
const mintDiamond = document.getElementById('MintDiamond');
const mintPlatinum = document.getElementById('MintPlatinum');

mintBronze.onclick = MintBronze;
mintSteel.onclick = MintSteel;
mintGold.onclick = MintGold;
mintDiamond.onclick = MintDiamond;
mintPlatinum.onclick = MintPlatinum;

async function connect() {

    if (typeof window.ethereum !== 'undifined') {
        await window.ethereum.request({ method: "eth_requestAccounts" })
        console.log("Connected");
    } else {
        console.log("Get A Metamask Wallet");
    }

}

connect();

let provider = new ethers.providers.Web3Provider(window.ethereum)
let signer = provider.getSigner();
let wagmiPakistanContract = new ethers.Contract(contractAddress, contractAbi, signer)


async function MintBronze() {
    const mintBronze = wagmiPakistanContract.mintBronze();
    const Bronze = await mintBronze;
    console.log(`${Bronze} Minted`);
}
async function MintSteel() {
    const mintSteel = wagmiPakistanContract.mintSteel();
    const Steel = await mintSteel;
    console.log(`${Steel} Minted`);
}
async function MintGold() {
    const mintGold = wagmiPakistanContract.mintGold();
    const Gold = await mintGold;
    console.log(`${Gold} Minted`);
}
async function MintDiamond() {
    const mintDiamond = wagmiPakistanContract.mintDiamond();
    const Diamond = await mintDiamond;
    console.log(`${Diamond} Minted`);
}
async function MintPlatinum() {
    const mintPlatinum = wagmiPakistanContract.mintPlatinum();
    const Platinum = await mintPlatinum;
    console.log(`${Platinum} Minted`);
}

請幫幫我。 謝謝

調用合約時您沒有發送任何以太幣,因此msg.value為 0。以下是調用需要msg.value等於 0.001 以太幣的 function 時發送以太幣的方式(因為您在智能合約中定義的 function 需要msg.value為 0.001):

const mintBronze = wagmiPakistanContract.mintBronze({ value: ethers.utils.parseEther("0.001") });

與其他函數類似,語法為:

const mintSteel = wagmiPakistanContract.mintSteel({ value: ethers.utils.parseEther("0.002") });
const mintGold = wagmiPakistanContract.mintGold({ value: ethers.utils.parseEther("0.003") });
const mintDiamond = wagmiPakistanContract.mintDiamond({ value: ethers.utils.parseEther("0.004") });
const mintPlatinum = wagmiPakistanContract.mintPlatinum({ value: ethers.utils.parseEther("0.005") });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM