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

时间:2018-07-25 07:11:39

标签: ethereum web3js

我尝试通过专用网络中的RPC创建一个eth帐户。

到目前为止,我所做的是:

  1. 启动geth节点并创建专用网络。
  2. 使用web3 1.0.0,打字稿创建简单的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.create返回以下结果

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

但是web3.eth.getAccounts方法仅返回1个帐户。

[ '0xaf0034c41928Db81E570061c58c249f61CFF57f2' ]

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

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

> eth.accounts
["0xaf0034c41928db81e570061c58c249f61cff57f2"]

eth.personal.newAccount无效。 web3.eth.accounts.create之后我需要做些什么吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

如果您在geth节点上激活了个人API,则

web3.eth.personal.newAccount()应该是可用的标签(这是ganache的默认行为,对于geth,您需要通过geth --dev/testnet --rpc --rpcapi eth,web3,personal进行激活(注意:当然,在主网上允许使用Personal-API时应非常小心,请确保限制RPC访问,以便只有您/特权用户才能访问它)

(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