web3.eth.accounts.create 方法实际上并没有创建新帐户

web3.eth.accounts.create method doesn't actually create new account

我尝试在私有网络中通过 RPC 创建一个 eth 帐户。

到目前为止我所做的是:

  1. 启动geth节点并创建私有网络。
  2. 使用 web3 1.0.0、typescript 创建简单的 javascript 程序
  3. 运行 并得到如下结果,但未创建帐户

代码:

const result = await web3.eth.personal.unlockAccount(senderId, senderPassword, duration)
if (result === true) {
    // const newAccountResult = await web3.eth.personal.newAccount('password')
    const newAccountResult = await web3.eth.accounts.create('user01')
    console.log(newAccountResult)
}

结果:

web3.eth.accounts.createreturns结果如下

{ address: '0xf10105f862C1cB10550F4EeB38697308c7A290Fc',
  privateKey: '0x5cba6b397fc8a96d006988388553ec17a000f7da9783d906979a2e1c482e7fcb',
  signTransaction: [Function: signTransaction],
  sign: [Function: sign],
  encrypt: [Function: encrypt] }

但是web3.eth.getAccounts方法returns只有1个账户。

[ '0xaf0034c41928Db81E570061c58c249f61CFF57f2' ]

似乎web3.eth.accounts.create方法成功了,因为结果包括帐户地址和私钥。 但是我不明白为什么 web3.eth.getAccounts 方法不包括创建的帐户。

我也通过控制台检查了geth,结果是一样的。

> eth.accounts
["0xaf0034c41928db81e570061c58c249f61cff57f2"]

并且eth.personal.newAccount没有用。 我需要在 web3.eth.accounts.create 之后做些什么吗?

感谢任何帮助。

如果我没看错,web.eth.accounts.create 是一种创建帐户而不将它们存储在本地节点上的方法,因此它基本上是一种即时获取有效密钥对而不在本地节点上存储任何内容的方法密钥库)

web3.eth.personal.newAccount() 如果你在你的 geth 节点上激活了 personal-API 应该可用(这是 ganache 的默认行为,geth 你需要通过 geth --dev/testnet --rpc --rpcapi eth,web3,personal(注意:当然你应该非常小心在主网上允许 personal-API,确保 RPC 访问受到限制,所以只有 you/privileged 用户可以访问它)

(async () => {
    let newAccount = await web3.eth.personal.newAccount();
    console.log(newAccount);
    let accounts = await web3.eth.getAccounts();
    console.log(accounts);
})();

应该给出类似的东西

0xb71DCf0191E2B90efCD2638781DE40797895De66
[
    ...
'0xb71DCf0191E2B90efCD2638781DE40797895De66' ]

参考文献 https://medium.com/@andthentherewere0/should-i-use-web3-eth-accounts-or-web3-eth-personal-for-account-creation-15eded74d0eb