Solidity

ethers web3provider 無法第二次連接到 metamask

  • December 26, 2021

我正在 Polygon 上開發一個 React NFT 市場,使用者可以在其中創建、購買和重新列出 NFT。問題是我在成功執行第一次購買後第二次無法連接到 Metamask/web3provider。控制台上的錯誤是

-32603:錯誤:事務恢復:函式呼叫未能執行”

錯誤的快照附在下面。

在此處輸入圖像描述

我的初步理解是這個問題是由點擊“購買”按鈕後觸發的“buyNft”功能引起的。

async function buyNft(nft) {
// console.log("I was able to hit buyNFT")
const web3Modal = new Web3Modal()
const connection = await web3Modal.connect()
const provider = new ethers.providers.Web3Provider(connection)
// console.log("web3 provider", provider) // There is no change in this output in both successful and failed buy transaction.

const signer = provider.getSigner()
const contract = new ethers.Contract(nftmarketaddress, Market.abi, signer)

const price = ethers.utils.parseUnits(nft.price.toString(), 'ether')
const transaction = await contract.createMarketSale(nftaddress, nft.tokenId, {
 value: price
})

await transaction.wait()
loadNFTs()
history.push('/myassets')
}

我作為參數傳遞給 buyNft() 函式的 nft 是一個對象,它看起來像這樣

{
description: "Using Dev 1 Account"
image: "https://ipfs.infura.io/ipfs/QmUksTHetYR6if3yeTx6ckLoqDCgnFdjwVNHGiiideMw7X"
name: "Demo 1"
owner: "0x0000000000000000000000000000000000000000"
price: "100.0"
seller: "0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199"
sold: true
tokenId: 1
}

我假設此錯誤與 web3modal 相關,不包括 loadNfts() 函式、createMarketSale 智能合約和 Market.abi 的程式碼。如果您需要它們,請告訴我。

另一個需要注意的有趣的事情是,如果我導航到創建頁面並創建一個新的 NFT,buyNft 函式可以正常工作並打開元遮罩。但是在第一次之後,它再次為後續點擊拋出相同的“-32603-Internal JSON RPC error”。

我嘗試了 web3modal 的其他變體,例如將 window.ethereum 傳遞給 Web3Provider,不將連接傳遞給 web3provider 並使用 JsonRpcProvider。但其中任何一個都不起作用。

起初這似乎是一個垃圾收集問題,所以我添加了 useEffect 來清理。不確定它是否解決了記憶體洩漏以外的任何問題,問題仍然存在。

請讓我知道我錯過了什麼。

如果有人偶然發現這個問題,它現在工作正常。我刪除了記憶體和工件文件夾,重新啟動了安全帽節點並再次重新部署了合約,同時重置了 metamask 上的帳戶。

引用自:https://ethereum.stackexchange.com/questions/117325