我尝试通过专用网络中的RPC创建一个eth帐户。
到目前为止,我所做的是:
代码:
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
之后我需要做些什么吗?
感谢您的帮助。
答案 0 :(得分:2)
如果我做对了,web.eth.accounts.create
是一种创建帐户而不将其存储在本地节点上的方法,因此它基本上是一种即时获取有效密钥对而不在密钥库中存储任何内容的方法)
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' ]