我有一个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
你知道我能做什么吗?
答案 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)
答案 4 :(得分:0)