#!/usr/bin/env node var bcoin = require('bcoin'); var utils = bcoin.utils; var assert = utils.assert; var Client = bcoin.http.client; var argv = parseArg(process.argv); if (argv.network) bcoin.protocol.network.set(argv.network); var client = new Client(argv.url || 'localhost:8080', { setNetwork: argv.network == null }); function createWallet(callback) { var options = utils.merge({ id: argv.args[1] }, argv); client.createWallet(options, function(err, wallet) { if (err) return callback(err); utils.print(wallet); wallet.destroy(); callback(); }); } function getWallet(callback) { var options = utils.merge({ id: argv.args[1] }, argv); client.getWallet(options.id, options.passphrase, function(err, wallet) { if (err) return callback(err); utils.print(wallet); wallet.destroy(); callback(); }); } function getTX(callback) { var hash = argv.args[1]; if (bcoin.address.validate(hash)) { return client.getTXByAddress(hash, function(err, txs) { if (err) return callback(err); utils.print(txs); callback(); }); } hash = utils.revHex(hash); client.getTX(hash, function(err, tx) { if (err) return callback(err); utils.print(tx); callback(); }); } function getBlock(callback) { var hash = argv.args[1]; hash = utils.revHex(hash); client.getBlock(hash, function(err, block) { if (err) return callback(err); utils.print(block); callback(); }); } function getCoin(callback) { var hash = argv.args[1]; var index = argv.args[2]; if (bcoin.address.validate(hash)) { return client.getCoinsByAddress(hash, function(err, coins) { if (err) return callback(err); utils.print(coins); callback(); }); } hash = utils.revHex(hash); client.getCoin(hash, index, function(err, coin) { if (err) return callback(err); utils.print(coin); callback(); }); } function getWalletAll(callback) { var id = argv.args[1]; client.getWalletAll(id, function(err, txs) { if (err) return callback(err); utils.print(txs); callback(); }); } function getBalance(callback) { var id = argv.args[1]; client.getWalletBalance(id, function(err, balance) { if (err) return callback(err); utils.print('Confirmed: %s', utils.btc(balance.confirmed)); utils.print('Unconfirmed: %s', utils.btc(balance.unconfirmed)); callback(); }); } function getMempool(callback) { client.getMempool(function(err, txs) { if (err) return callback(err); utils.print(txs); callback(); }); } function send(callback) { var id = argv.args[1]; var address = argv.args[2]; var value = utils.satoshi(argv.args[3]); var options = { address: address, value: value }; client.walletSend(id, options, function(err, tx) { if (err) return callback(err); utils.print(tx); callback(); }); } function zap(callback) { var id = argv.args[1]; var now = utils.now(); var age = 72 * 60 * 60; client.walletZap(id, now, age, function(err) { if (err) return callback(err); utils.print('zapped'); callback(); }); } function main(callback) { switch (argv.args[0]) { case 'wallet': return createWallet(callback); case 'getwallet': return getWallet(callback); case 'balance': return getBalance(callback); case 'history': return getWalletAll(callback); case 'send': return send(callback); case 'zap': return zap(callback); case 'mempool': return getMempool(callback); case 'tx': return getTX(callback); case 'coin': return getCoin(callback); case 'block': return getBlock(callback); } return callback(new Error('Bad command.')); } function parseArg(argv) { var args = []; var options = {}; var arg; argv = argv.slice(); function getarg() { var arg = argv.shift(); if (arg.indexOf('--') === 0) { // e.g. --opt arg = arg.split('='); if (arg.length > 1) { // e.g. --opt=val argv.unshift(arg.slice(1).join('=')); } arg = arg[0]; } else if (arg[0] === '-') { if (arg.length > 2) { // e.g. -abc argv = arg.substring(1).split('').map(function(ch) { return '-' + ch; }).concat(argv); arg = argv.shift(); } else { // e.g. -a } } else { // e.g. foo } return arg; } while (argv.length) { arg = getarg(); switch (arg) { case '--url': options.url = argv.shift(); break; case '-h': case '--help': return process.exit(1); default: if (arg.indexOf('--') === 0) { opt = arg.replace(/^--(no-)?/, ''); options[opt] = !argv[0] || argv[0][0] === '-' ? true : argv.shift(); } else { args.push(arg); } break; } } options.args = args.slice(2); return options; } client.getInfo(function(err, info) { if (err) throw err; if (!argv.args[0]) return utils.print(info); main(function(err) { if (err) { console.error(err.stack + ''); return process.exit(1); } client.destroy(); }); });