dApp:Web3.eth.getCoinbase(function(err,account)从metamask

时间:2019-12-23 18:42:28

标签: node.js heroku web-deployment ethereum web3

我有一个dApp可以在我的本地Ganache网络上运行,但不能在Heroku上部署的Rinkeby上运行

我在App.js中有以下代码:

// Load account data
    web3.eth.getCoinbase(function(err, account) {
      if (err === null) {
        App.account = account;
        $("#accountAddress").html("Your Account: " + account);
      }
    });

但这就是我得到的: 您的帐户:null

http://filmproductiondapp.herokuapp.com/ 这是文件:https://github.com/Louvivien/filmproductiondapp/blob/master/src/js/app.js

你知道我能做什么吗?

5 个答案:

答案 0 :(得分:2)

默认情况下,元掩码可能不会启用连接。 试试这个:

if(web3.currentProvider.enable){
    //For metamask
    web3.currentProvider.enable().then(function(acc){
        App.account = acc[0];
        $("#accountAddress").html("Your Account: " + App.account);
    });
} else{
    App.account = web3.eth.accounts[0];
    $("#accountAddress").html("Your Account: " + App.account);
}

Metamask将弃用对web3js的支持,而推荐使用ethereumProvider。 使用ethereumProvider的上述替代方法:

if(window.ethereum){
    ethereum.enable().then(function(acc){
        App.account = acc[0];
        $("#accountAddress").html("Your Account: " + App.account);
    });
}

根据MetaMask文档,返回的帐户对象尽管仅服务一个帐户,但仍作为以后扩展的列表保存。

使用MetaMask获取所选地址的另一种简便方法:

web3.currentProvider.selectedAddress

答案 1 :(得分:1)

检查metamask扩展的设置。 设置->连接->添加'Localhost' 而已。对我有用 希望这行得通。

答案 2 :(得分:0)

Metamask不支持web3.eth.getCoinbase(),因为它是轻客户端 https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md#dizzy-all-async---think-of-metamask-as-a-light-client

web3.eth.getCoinbase()返回您的采矿奖励所使用的帐户。

web3.eth.getAccounts()[0]返回您创建的第一个帐户(索引0)

尝试: var account = web3.eth.getAccounts()[0];

答案 3 :(得分:0)

我花了一个小时来解决这个问题,最后我得到了:

只需在metamsk的设置中添加连接http://localhost:3000

enter image description here

答案 4 :(得分:0)

好像一切又变了。现在,您可以将 MetaMask 连接到您的销售网站的菜单位置在这里:

enter image description here