我正在运行一个私有的以太坊网络。我使用https://aws.amazon.com/blockchain/templates/
整个设置已完成。事情看起来在AWS上正确设置。现在,我正在尝试创建帐户并检索所有这些帐户。为此,我使用的方法如下。
Web3Service.js
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider(process.env.NETWORK_URL));
exports.getAccounts = function () {
return web3.eth.getAccounts();
};
exports.createAccount = function () {
return web3.eth.accounts.create();
};
app.js
var newAccount = await web3Service.createAccount();
console.log('newAccount ', newAccount);
var accounts = await web3Service.getAccounts();
console.log('accounts ', accounts);
我根本没有遇到任何错误。但是在web3Service.getAccounts();
的响应中,它始终为空[]
数组。
我已经验证了Etherium设置。所有节点都运行良好。
您可以在此处找到整个代码库:blockchain-node Sample entire codebase
答案 0 :(得分:0)
web3.eth.accounts.create
将为您提供以太坊地址和私钥。为了使新帐户可用于节点,您必须将新帐户信息存储在节点的密钥库中。
当你致电create
时,你会得到一个这样的对象(from the docs):
web3.eth.accounts.create();
> {
address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
signTransaction: function(tx){...},
sign: function(data){...},
encrypt: function(password){...}
}
使用encrypt
功能生成encrypted keystore。这是需要与节点一起存储的内容,以便可以通过web3.eth.getAccounts
进行检索。位置将根据节点客户端,操作系统以及启动节点时覆盖密钥库位置(例如,Linux上的默认Geth位置为~/.ethereum/keystore
)而有所不同。
答案 1 :(得分:0)
挣扎后找到解决方案:
Web3Service.js
/**
*
* Accounts Functions
*/
exports.createAccount = function () {
/* *
* Create Account Local Machine Only.
* It will not return in web3.eth.getAccounts(); call
*/
return web3.eth.accounts.create();
};
exports.createPersonalAccount = function (password) {
/* *
* Create Account in Node.
* web3.eth.getAccounts();
*/
return web3.eth.personal.newAccount(password);
};
app.js
var personalAccount = await web3Service.createPersonalAccount('123456789');
console.log('personalAccount ', personalAccount);
var accounts = await web3Service.getAccounts();
console.log('accounts ', accounts);
更新了来源:Working Source Code
Thier没有明确地对密钥库做任何事情。
使用 - rpcapi db,eth,net,web3,personal 标志启动您的Geth。有必要。否则,您将面临错误。