v12.0.0 - initial commit
This commit is contained in:
commit
e2c49ea43c
1145 changed files with 97211 additions and 0 deletions
67
packages/server/bin/lamassu-eth-recovery
Executable file
67
packages/server/bin/lamassu-eth-recovery
Executable file
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
require('../lib/environment-helper')
|
||||
const hdkey = require('ethereumjs-wallet/hdkey')
|
||||
const hkdf = require('futoin-hkdf')
|
||||
const db = require('../lib/db')
|
||||
const _ = require('lodash/fp')
|
||||
const mnemonicHelpers = require('../lib/mnemonic-helpers')
|
||||
|
||||
const pify = require('pify')
|
||||
const fs = pify(require('fs'))
|
||||
const os = require('os')
|
||||
|
||||
const MNEMONIC_PATH = process.env.MNEMONIC_PATH
|
||||
|
||||
const defaultPrefixPath = "m/44'/60'/1'/0'"
|
||||
const paymentPrefixPath = "m/44'/60'/0'/0'"
|
||||
|
||||
const address = process.argv[2]
|
||||
|
||||
if (!MNEMONIC_PATH) {
|
||||
console.error(`Unable to fetch mnemonic from your account!`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
if (!address) {
|
||||
console.log('Usage: lamassu-eth-recovery <cash-out address>')
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
function run (address) {
|
||||
Promise.all([fetchMnemonic(), searchForHdIndex(address)])
|
||||
.then(([mnemonic, hdIndex]) => {
|
||||
try {
|
||||
const prefix = !_.isNil(hdIndex) ? paymentPrefixPath : defaultPrefixPath
|
||||
console.log(`Private key: `, defaultHdNode(mnemonic, prefix).deriveChild(hdIndex).getWallet().getPrivateKeyString())
|
||||
process.exit(0)
|
||||
} catch (err) {
|
||||
console.error(`Error while retrieving private key!`)
|
||||
process.exit(3)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function searchForHdIndex (address) {
|
||||
const sql = `SELECT hd_index FROM cash_out_txs WHERE to_address = $1`
|
||||
return db.oneOrNone(sql, [address])
|
||||
.then(result => _.get('hd_index', result))
|
||||
}
|
||||
|
||||
function fetchMnemonic () {
|
||||
return fs.readFile(MNEMONIC_PATH, 'utf8')
|
||||
.then(mnemonic => computeSeed(mnemonic))
|
||||
}
|
||||
|
||||
function computeSeed (seed) {
|
||||
const masterSeed = mnemonicHelpers.toEntropyBuffer(seed)
|
||||
return hkdf(masterSeed, 32, { salt: 'lamassu-server-salt', info: 'wallet-seed' })
|
||||
}
|
||||
|
||||
function defaultHdNode (masterSeed, prefix) {
|
||||
if (!masterSeed) throw new Error('No master seed!')
|
||||
const key = hdkey.fromMasterSeed(masterSeed)
|
||||
return key.derivePath(prefix)
|
||||
}
|
||||
|
||||
run(address)
|
||||
Loading…
Add table
Add a link
Reference in a new issue