Web3js

未擷取的類型錯誤:e 不是來自 getAccounts() + web3 1.0.0-beta.37 + truffle + React Dapp 的函式

  • June 5, 2019

我正在使用 web3 1.0.0-beta.37 和 trufflfe 創建我的第一個 Dapp

在使用 ganache-CLI 和 Metamask 獲取 app.js 中的帳戶時,出現以下錯誤。

Uncaught TypeError: e is not a function in the console 

以下是我的 App.js 程式碼

import React, { Component } from 'react';
import './App.css';
import FormSubmitContract from './contracts/FormSubmit.json';
import getWeb3 from './utils/getWeb3.js';



class App extends Component {
 state = {
 web3:null,
 address:null,
};

componentDidMount = async () =>{
try{
   const web3 = await getWeb3();
   console.log(web3);
   const accounts = await web3.eth.getAccounts();
   console.log(accounts);
   const networkId = await web3.eth.net.getId();
   const deployedNetwork = FormSubmitContract.networks[networkId];
   const  instance = new web3.eth.contract(FormSubmitContract.abi, 
   deployedNetwork, deployedNetwork.address);
}catch(error){
 console.log(error);
}
}

我可以在控制台日誌中列印 web3

Proxy {_requestManager: s, currentProvider: MetamaskInpageProvider, eth: r, db: e.exports, shh: a, …}

但是在

const accounts = await web3.eth.getAccounts();
console.log(accounts); ==> undefined

我認為獲取帳戶的 web3 1+ 版本已經發生了變化。

幫我。提前致謝

在 Metamask 中,轉到設置 -> 隱私和安全 -> 停用“隱私模式”選項。

如果你想使用隱私模式,那麼你必須修改你的程式碼

https://medium.com/metamask/eip-1102-preparing-your-dapp-5027b2c9ed76

幾件事要試驗:

  1. 嘗試使用 web3 1.0.0-beta.35
  2. 您是否正在呼叫 window.ethereum.enable() 來解鎖選定的使用者帳戶?
  const { ethereum } = window
  if (ethereum) {
     try {
       const web3 = new Web3(ethereum)
       const selectedAccount = await ethereum.enable()
       if (!selectedAccount) {
         // User didn't give permission for dapp to access wallet
         console.log('User opted out')
       } else {
         // User allowed access
         console.log('user gave access!')
       }
       return web3
     } catch (error) {
       // whoopsie!
       console.log(error)
     }

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