diff --git a/bin/lamassu-trx-recovery b/bin/lamassu-trx-recovery new file mode 100644 index 00000000..f3d3bae5 --- /dev/null +++ b/bin/lamassu-trx-recovery @@ -0,0 +1,53 @@ +#!/usr/bin/env node + +require('../lib/environment-helper') +const TronWeb = require('tronweb') +const db = require('../lib/db') +const _ = require('lodash/fp') + +const pify = require('pify') +const fs = pify(require('fs')) + +const MNEMONIC_PATH = process.env.MNEMONIC_PATH + +const defaultPrefixPath = "m/44'/195'/0'/0" +const paymentPrefixPath = "m/44'/195'/1'/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-trx-recovery ') + process.exit(2) +} + +function run (address) { + Promise.all([fetchMnemonic(), searchForHdIndex(address)]) + .then(([mnemonic, hdIndex]) => { + try { + const prefix = !_.isNil(hdIndex) ? `${paymentPrefixPath}/${hdIndex}` : `${defaultPrefixPath}/0` + const privKey = TronWeb.fromMnemonic(mnemonic.replace(/[\r\n]/gm, ' ').trim(), prefix).privateKey + console.log(`Private key: `, privKey.slice(2)) + 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') +} + +run(address) diff --git a/package.json b/package.json index 2aec8828..9aa9fe95 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "lamassu-operator": "./bin/lamassu-operator", "lamassu-coinatmradar": "./bin/lamassu-coinatmradar", "lamassu-eth-recovery": "./bin/lamassu-eth-recovery", + "lamassu-trx-recovery": "./bin/lamassu-trx-recovery", "lamassu-update-cassettes": "./bin/lamassu-update-cassettes", "lamassu-clean-parsed-id": "./bin/lamassu-clean-parsed-id" },