¿Cómo extraigo una clave privada de un almacén de claves usando eth-lightwallet "Sin conjunto de semillas"?

Estoy usando eth-lightwallet en un servidor NodeJS. Obtengo un seguimiento de la pila cuando intento obtener la clave privada del almacén de claves. Está marcando esta línea "keystore.generateNewAddress(pwDerivedKey);" No puedo ver cómo se relaciona. Cuando comento la línea "account.prv_key = keystore.exportPrivateKey(sendingAddr, pwDerivedKey);" parece funcionar perfectamente. ¿Estoy haciendo algo mal? El error es arrojar "No se establece la semilla", sin embargo, cuando miro en el modo de depuración, la semilla ciertamente está configurada. Soy nuevo en Node y sospecho que tiene algo que ver con la naturaleza asíncrona de Node. He incluido el código y el stacktrace a continuación. Gracias.

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)

Respuestas (1)

Su función de controlador puede tener algún error que impida que el controlador se ejecute correctamente. Puede verificar si "err" se configuró en su controlador e imprimirlo para ver exactamente qué error es. Para mí, si ejecuto su código exacto, tuve que eliminar la referencia a "cuenta" y cambiar "sendingAddr" a la primera dirección del almacén de claves antes de que se ejecute el código. Asegúrese de que estas 2 variables estén definidas en el contexto de su código. Este es el código que me funciona:

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