获取 web3.eth.accounts (MetaMask) 的问题

Posted

技术标签:

【中文标题】获取 web3.eth.accounts (MetaMask) 的问题【英文标题】:Issue with getting web3.eth.accounts (MetaMask) 【发布时间】:2018-07-06 14:20:06 【问题描述】:

我的 MetaMask 已启用,但在控制台中我看到空数组 image here,当我尝试 console.log(web3.eth.accounts[0]) 时,它返回 undefined

但是当我使用console.log(web3.eth) 时,我会在控制台中看到所有数据image here

有人知道为什么web3.eth.accounts[0]web3.eth.accounts 不起作用吗?

<html>
    <head>
        <title>TEST</title>
    </head>
    <body>
        <script>
            window.addEventListener('load', function()
                if( typeof web3 !='undefined')
                    console.log('web3 detected');
                    web3 = new Web3(web3.currentProvider);                                    
                    console.log(web3.eth.accounts);
                else
                    alert("please install MetaMask");
                
            );
                       
        </script>
    </body>
</html>

【问题讨论】:

【参考方案1】:

我解决了问题,使用:

 web3.eth.getAccounts((err, res) =>                    
                   console.log(res[0]);
);

但无论如何,问题仍然存在,为什么 web3.eth.accounts[0] 不起作用?

【讨论】:

它不起作用,因为它不是您期望的帐户列表。它是您可以使用的整个包的构造函数。查看docs了解更多详情【参考方案2】:

要获取当前连接的帐户,您需要编写,

const web3 = new Web3(window.ethereum);
web3.eth.requestAccounts().then(accounts => console.log(accounts));

【讨论】:

【参考方案3】:

web3.eth.accounts[0] 不起作用,因为web3.eth.accounts 不是帐户列表,正如docs 中所说:

像这样获取帐户:

var account = null;
web3.eth.getAccounts(async function(error, accounts) 
  if (error == null && accounts.length > 0) 
      account = accounts[0];
   

【讨论】:

以上是关于获取 web3.eth.accounts (MetaMask) 的问题的主要内容,如果未能解决你的问题,请参考以下文章

web3.eth.accounts.decrypt 在 cryp.createDecipheriv 抛出错误

web3.eth.accounts[0] 返回未定义

如何使用 1.2.x 版本从 web3 获取特定帐户?

[Contract] web3.eth.getAccounts, web3.eth.getCoinbase 使用场景区别

web3js eth vs 帐户 vs 个人

使用 web3.js v0.2.6 创建帐户