Частная сеть: web3.eth.getAccounts () всегда отправляет пустой массив - PullRequest
0 голосов
/ 01 мая 2018

У меня частная сеть Ethereum. Я использую 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 Пример всей кодовой базы

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

После борьбы нашел решение:

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);

Обновленный источник: Рабочий исходный код

Их явно не делают с хранилищем ключей.

Запустите ваш Geth, используя этот - rpcapi db, eth, net, web3, персональный флаг. Это необходимо. В противном случае вы столкнетесь с ошибкой.

0 голосов
/ 01 мая 2018

web3.eth.accounts.create предоставит вам адрес Ethereum и закрытый ключ. Чтобы сделать новые учетные записи доступными для узла, необходимо сохранить информацию о новой учетной записи в хранилище ключей узла.

Когда вы вызываете create, вы получите такой объект ( из документов ):

web3.eth.accounts.create();
> {
    address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
    privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

Используйте функцию encrypt для генерации зашифрованного хранилища ключей . Это то, что должно храниться в узле, чтобы его можно было получить через web3.eth.getAccounts. Расположение будет различаться в зависимости от клиента узла, ОС и от того, переопределено ли расположение хранилища ключей при запуске узла (например, расположение Geth по умолчанию в Linux - ~/.ethereum/keystore).

...