【问题标题】:Web3 Library Javascript - getAccounts vs accounts.wallet[0]Web3 库 Javascript - getAccounts 与 accounts.wallet[0]
【发布时间】:2022-10-05 13:17:49
【问题描述】:
我有以下代码:
const web3 = new Web3(window.ethereum);
console.log('Accounts:', await web3.eth.getAccounts());
console.log('Wallet Account:', web3.eth.accounts.wallet[0]);
这给了我两个不同的东西。第一个返回“Accounts: 0xEF..42a3”,这是我的钱包地址,而另一个返回“未定义”
如果这两种方式适用于同一个领域,为什么会有如此不同?
【问题讨论】:
标签:
javascript
web3js
web3
【解决方案1】:
documentation for web3.eth.getAccounts() 内容如下:
返回节点控制的帐户列表。
回报:
Promise 返回 Array - 由节点控制的地址数组。
而documentation for web3.eth.accounts 内容如下:
web3.eth.accounts [object] 包含生成以太坊账户和签署交易和数据的功能。
所以,它们指的不是同一个东西,web.eth.getAccounts() 就是你要找的东西. web3.eth.getAccounts() 返回一个帐户数组,但 web.eth.accounts 是一个执行一般操作的对象。
您可能对web.eth.accounts.wallet[0] 返回undefined 而不是错误感到困惑。这只是一个奇怪的 JS 事情。在 JS 中,数组实际上是带有数字键的对象。所以,wallet[0] 实际上意味着“从对象wallet 中获取键0 的值”。因为wallet 是一个对象,所以不会返回错误。但是,wallet 没有密钥 0,因此返回了 undefined。