从 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 获取所有以太坊账户的主要内容,如果未能解决你的问题,请参考以下文章
以太坊搭建私链(小问题1)——如何通过metamask获取账户的私钥