#!/usr/bin/env node require('../lib/environment-helper') const settingsLoader = require('../lib/new-settings-loader') const configManager = require('../lib/new-config-manager') const wallet = require('../lib/wallet') const { utils: coinUtils } = require('@lamassu/coins') const BN = require('../lib/bn') const inquirer = require('inquirer') const ticker = require('../lib/ticker') const [toAddress, cryptoValue, cryptoCode] = process.argv.slice(2) function computeCrypto (cryptoCode, value) { try { const cryptoRec = coinUtils.getCryptoCurrency(cryptoCode) const unitScale = cryptoRec.unitScale return new BN(value).shiftedBy(unitScale) } catch (err) { return null } } if (!toAddress || !cryptoValue || !cryptoCode) { console.log('Usage: lamassu-send-coins
') console.log('Example: lamassu-send-coins 3FUv7vKaP11idnsUKyQ2pxdWxCDMyr5HKJ 0.009 BTC') process.exit(1) } const cryptoAtoms = computeCrypto(cryptoCode, cryptoValue) if (!cryptoAtoms) { console.log(`Unsupported coin: ${cryptoCode}.\n`) console.log('Usage: lamassu-send-coins
') console.log('Example: lamassu-send-coins 3FUv7vKaP11idnsUKyQ2pxdWxCDMyr5HKJ 0.009 BTC') process.exit(2) } console.log('Loading ticker...') settingsLoader.loadLatest() .then(settings => { const fiatCode = configManager.getGlobalLocale(settings.config).fiatCurrency return wallet.isStrictAddress(settings, cryptoCode, toAddress) .then(isValid => { if (!isValid) { console.log(`Invalid ${cryptoCode} address: ${toAddress}.`) console.log('Please check your command.\n') console.log('Usage: lamassu-send-coins
') console.log('Example: lamassu-send-coins 3FUv7vKaP11idnsUKyQ2pxdWxCDMyr5HKJ 0.009 BTC') process.exit(3) } }) .then(() => ticker.getRates(settings, fiatCode, cryptoCode)) .then(rates => { const fiatAmount = rates.rates.ask.times(cryptoValue).toFixed(2) const questions = [ { type: 'confirm', name: 'confirm', message: `Are you sure you want to send ${cryptoValue} ${cryptoCode} (${fiatAmount} ${fiatCode}) to the address ${toAddress}?`, default: false } ] console.log('\nPlease look over this transaction carefully!') return inquirer.prompt(questions) .then(answers => { if (!answers.confirm) { console.log('Transaction cancelled.') process.exit(0) } console.log('Sending...') return wallet.sendCoins(settings, { toAddress, cryptoAtoms, cryptoCode }) .then(() => { console.log('Success.') process.exit(0) }) .catch(e => console.log(e.message)) }) .catch(e => console.log(e.message)) }) .catch(e => console.log(e.message)) })