Как вытащить закрытый ключ из хранилища ключей с помощью eth-lightwallet «Нет начального набора»

Я использую eth-lightwallet на сервере NodeJS. Я получаю трассировку стека, когда пытаюсь получить закрытый ключ из хранилища ключей. Он помечает эту строку "keystore.generateNewAddress(pwDerivedKey);" Я не вижу, как это связано. Когда я закомментирую строку «account.prv_key = keystore.exportPrivateKey(sendingAddr, pwDerivedKey);» кажется, работает безупречно. Я делаю что-то неправильно? Ошибка выдает «Нет начального набора», однако, когда я смотрю в режиме отладки, начальное значение наверняка установлено. Я новичок в Node и подозреваю, что это как-то связано с асинхронной природой Node. Я включил код и трассировку стека ниже. Спасибо.

lightwallet.keystore.deriveKeyFromPassword('mypassword',
    function (err, pwDerivedKey) {
      var seed = lightwallet.keystore.generateRandomSeed();
      var keystore = new lightwallet.keystore(seed, pwDerivedKey);

      keystore.generateNewAddress(pwDerivedKey);
      account.address = keystore.getAddresses()[0];
      account.prv_key = keystore.exportPrivateKey(sendingAddr, pwDerivedKey);
    })



/Users/username/WebstormProjects/eth-project/nodejs-server/node_modules/eth-lightwallet/lib/keystore.js:389
    throw new Error('KeyStore.generateNewAddress: No seed set');
    ^

Error: KeyStore.generateNewAddress: No seed set
    at KeyStore.generateNewAddress (/Users/username/WebstormProjects/eth-project/nodejs-server/node_modules/eth-lightwallet/lib/keystore.js:389:11)
    at /Users/username/WebstormProjects/eth-project/nodejs-server/controllers/ActorService.js:39:20
    at cb (/Users/username/WebstormProjects/eth-project/nodejs-server/node_modules/eth-lightwallet/lib/keystore.js:459:7)
    at /Users/username/WebstormProjects/eth-project/nodejs-server/node_modules/eth-lightwallet/node_modules/scrypt-async/scrypt-async.js:474:9
    at Immediate._onImmediate (/Users/username/WebstormProjects/eth-project/nodejs-server/node_modules/eth-lightwallet/node_modules/scrypt-async/scrypt-async.js:433:11)
    at processImmediate [as _immediateCallback] (timers.js:383:17)

Ответы (1)

Ваша функция обработчика может иметь некоторую ошибку, препятствующую правильному выполнению обработчика. Вы можете проверить, была ли установлена ​​ошибка в вашем обработчике, и распечатать ее, чтобы точно увидеть, что это за ошибка. Для меня, если я запускаю ваш точный код, мне пришлось удалить ссылку на «учетную запись» и изменить «sendingAddr» на первый адрес хранилища ключей до запуска кода. Убедитесь, что эти 2 переменные определены в контексте вашего кода. Это код, который работает для меня:

lightwallet.keystore.deriveKeyFromPassword('mypassword',
function (err, pwDerivedKey) {
  var seed = lightwallet.keystore.generateRandomSeed();
  var keystore = new lightwallet.keystore(seed, pwDerivedKey);

  keystore.generateNewAddress(pwDerivedKey);
  var address = keystore.getAddresses()[0];
  var prv_key = keystore.exportPrivateKey(address, pwDerivedKey);
  console.log('address and key: ', address, prv_key);
})