Tool to recover seeds stored in [Frame](https://frame.sh/)
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

73 Zeilen
2.1KB

  1. const { computeAddress } = require('ethers').utils;
  2. const hdKey = require('hdkey');
  3. const HotSignerWorker = require('../HotSigner/worker');
  4. class SeedSignerWorker extends HotSignerWorker {
  5. constructor() {
  6. super()
  7. this.seed = null
  8. //process.on('message', (message) => this.handleMessage(message))
  9. }
  10. unlock({ encryptedSeed, password }, pseudoCallback) {
  11. try {
  12. this.seed = this._decrypt(encryptedSeed, password)
  13. pseudoCallback(null)
  14. } catch (e) {
  15. pseudoCallback('Invalid password')
  16. }
  17. }
  18. lock(_, pseudoCallback) {
  19. this.seed = null
  20. pseudoCallback(null)
  21. }
  22. encryptSeed({ seed, password }, pseudoCallback) {
  23. pseudoCallback(null, this._encrypt(seed.toString('hex'), password))
  24. }
  25. signMessage({ index, message }, pseudoCallback) {
  26. // Make sure signer is unlocked
  27. if (!this.seed) return pseudoCallback('Signer locked')
  28. // Derive private key
  29. const key = this._derivePrivateKey(index)
  30. // Sign message
  31. super.signMessage(key, message, pseudoCallback)
  32. }
  33. signTypedData({ index, typedMessage }, pseudoCallback) {
  34. // Make sure signer is unlocked
  35. if (!this.seed) return pseudoCallback('Signer locked')
  36. // Derive private key
  37. const key = this._derivePrivateKey(index)
  38. // Sign message
  39. super.signTypedData(key, typedMessage, pseudoCallback)
  40. }
  41. signTransaction({ index, rawTx }, pseudoCallback) {
  42. // Make sure signer is unlocked
  43. if (!this.seed) return pseudoCallback('Signer locked')
  44. // Derive private key
  45. const key = this._derivePrivateKey(index)
  46. // Sign transaction
  47. super.signTransaction(key, rawTx, pseudoCallback)
  48. }
  49. _derivePrivateKey(index) {
  50. let key = hdKey.fromMasterSeed(Buffer.from(this.seed, 'hex'))
  51. key = key.derive("m/44'/60'/0'/0/" + index)
  52. return key.privateKey
  53. }
  54. _deriveAddress(index) {
  55. const key = hdKey.fromMasterSeed(Buffer.from(this.seed, 'hex'));
  56. const publicKey = key.derive("m/44'/60'/0'/0/" + index).publicKey;
  57. const address = computeAddress(publicKey);
  58. return address;
  59. }
  60. }
  61. //const seedSignerWorker = new SeedSignerWorker() // eslint-disable-line
  62. module.exports = SeedSignerWorker