Solidity
ethers web3provider 無法第二次連接到 metamask
我正在 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 上的帳戶。