Truffle
DOMException:使用 Metamask 和 truffle Ganache 時無法在“Window”錯誤上執行“postMessage”
Uncaught (in promise) DOMException
當我使用 Metamask(chrome) 和 truffle Ganache 開發 Nuxt Web 應用程序時,我遇到瞭如下錯誤。Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Window': function (error, response) { _this2.removeAllListeners(payload.id); if (!error) { ...<omitted>... } could not be cloned.
我試圖做的是將交易發送到本地區塊鏈(Ganache)。
async sendTransaction(obj) { const web3 = await getWeb3(); // get account const accounts = await web3.eth.getAccounts(); const roomFactory = await getRoomFactory(); // *ERROR OCCURS HERE* const result = await roomFactory.methods .createNewRoom(obj._roomId) .send({ from: accounts[0] }); console.log("result", result); },
功能
getWeb3()
如下getRoomFactory()
:// getWeb() const getWeb3 = () => new Promise(async (resolve, reject) => { // Modern dapp browsers... if (window.ethereum) { const web3 = new Web3(window.ethereum); try { // Request account access if needed await window.ethereum.enable(); // Acccounts now exposed resolve(web3); } catch (error) { reject(error); } } // Legacy dapp browsers... else if (window.web3) { try { // Use Mist/MetaMask's provider. const web3 = new Web3(window.web3.currentProvider); console.log("Injected web3 detected."); resolve(web3); } catch (error) { reject(error); } } // Fallback to localhost; use dev console port by default... else { try { const provider = new Web3.providers.HttpProvider( "http://127.0.0.1:8545" ); const web3 = new Web3(provider); console.log("No web3 instance injected, using Local web3."); resolve(web3); } catch (error) { reject(error); } } });
import getWeb3 from "~/plugins/web3.js"; import RoomFactory from "./build/contracts/RoomFactory.json"; // which is build by truffle const getRoomFactory = async () => { const web3 = await getWeb3(); const abi = RoomFactory.abi; const networks = RoomFactory.networks["5781"]; return web3.eth.Contract(abi, networks.address); };
我可以做什麼:
- 從元遮罩提供者獲取帳戶 (
web3.eth.getAccounts()
)- 獲得餘額 (
web3.eth.getBalance(accounts[0])
)我不能做什麼:
- 將交易發送到其他合約 (
Mycontract.methods.myfunction().send()
)- 呼叫 (
Mycontract.methods.myfunction().call()
)版本:
- Web3:1.0.0-beta.36
- 元遮罩:5.3.2
- 松露:5.0.1
類似的問題
metamask-extension
是關於.如果您能幫我一些建議,我將不勝感激。謝謝你。
我通過安裝1.0.0-beta.37解決了這個問題。
我使用 1.0.0-beta.37(有時)遇到了同樣的錯誤。意思是,我將應用程序複製到另一個目錄中。沒有在伺服器端或客戶端站點複製節點模組(它是帶有 DApp 的 MERN)。我使用 >> npm install 重新生成了它們(複製 heroku 中發生的事情)
在原始情況下,它有效(仍然有效)。在新目錄(複製的應用程序)中。..它拋出上面的錯誤。我將它與 npm install 相關聯,做一些不同的事情。