Wie entferne ich einen privaten Schlüssel aus einem Keystore mit eth-lightwallet "No Seed Set"

Ich verwende eth-lightwallet auf einem NodeJS-Server. Ich erhalte einen Stack-Trace, wenn ich versuche, den privaten Schlüssel aus dem Keystore abzurufen. Es markiert diese Zeile "keystore.generateNewAddress(pwDerivedKey);" Ich kann nicht sehen, wie es zusammenhängt. Wenn ich die Zeile "account.prv_key = keystore.exportPrivateKey(sendingAddr, pwDerivedKey);" auskommentiere es scheint einwandfrei zu funktionieren. Mache ich etwas falsch? Der Fehler wirft "No Seed Set", aber wenn ich im Debug-Modus nachschaue, ist der Seed mit Sicherheit gesetzt. Ich bin neu bei Node und vermute, dass es etwas mit der asynchronen Natur von Node zu tun hat. Ich habe den Code und den Stacktrace unten eingefügt. Vielen Dank.

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)

Antworten (1)

Ihre Handler-Funktion hat möglicherweise einen Fehler, der verhindert, dass der Handler korrekt ausgeführt wird. Sie können überprüfen, ob "err" in Ihrem Handler gesetzt wurde, und es ausdrucken, um genau zu sehen, um welchen Fehler es sich handelt. Wenn ich Ihren genauen Code ausführe, musste ich den Verweis auf "Konto" entfernen und "sendingAddr" in die erste Adresse des Schlüsselspeichers ändern, bevor der Code ausgeführt wird. Stellen Sie sicher, dass diese beiden Variablen in Ihrem Codekontext definiert sind. Dies ist der Code, der für mich funktioniert:

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