从 Metamask 获取所有以太坊账户

Posted

技术标签:

【中文标题】从 Metamask 获取所有以太坊账户【英文标题】:Get all Ethereum accounts from Metamask 【发布时间】:2019-03-29 08:02:27 【问题描述】:

我想获取用户在 Metamask 中添加的所有帐户。我尝试了所有 web3.js 方法来获取帐户,但我总是只得到一个始终是当前选择的帐户。

根据 web3.js 文档,web3.eth.getAccounts() 应该返回该节点控制的所有帐户。但是,我得到了一个只有当前选择的数组。不用说,我在 Metamask 中创建了多个帐户。

【问题讨论】:

【参考方案1】:

文档说:Account List Reflects User Preference

当用户在 MetaMask 中选择一个帐户时,该帐户会默默地成为您的 JS 上下文中的 web3.eth.accounts[0],这是 web3.eth.accounts 数组的唯一成员。

我猜这取决于默认情况下 MetaMask 使用的 web3 提供商。结帐Why does web3.eth.getAccounts() return only 1 account? 问题可以看到一些提供商返回多个帐户,这取决于配置。

【讨论】:

【参考方案2】:

一旦您拨打 MetaMask 的getAccounts(),它会提示用户选择要连接的帐户列表。用户可以选择无(拒绝)、一个或多个。出于安全和隐私方面的考虑,只有用户可以控制,而不是实现请求的开发人员。

请注意,API 已更改,window.web3 不再可用。您现在必须使用window.ethereum 对象:

if (typeof window.ethereum !== 'undefined') 
  // connects to MetaMask
  const accounts = await ethereum.request( method: 'eth_requestAccounts' );
 else 
  // tell the user to install an `ethereum` provider extension

【讨论】:

以上是关于从 Metamask 获取所有以太坊账户的主要内容,如果未能解决你的问题,请参考以下文章

Metamask不能访问以太坊账户?隐私模式!

Metamask不能访问以太坊账户?隐私模式!

以太坊搭建私链(小问题1)——如何通过metamask获取账户的私钥

MetaMask 地址与以太坊格式地址

安装 metamask 和 coinbase chrome 扩展时如何获取 metamask 以太坊对象?

轻松通关以太坊--初识以太坊