From ed1376fc6f41103f1e686c0aceec9245c79121b1 Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Sun, 27 Mar 2016 18:13:09 +0200 Subject: [PATCH] WIP --- lib/plugins.js | 17 ++++++++++++----- lib/routes.js | 44 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/lib/plugins.js b/lib/plugins.js index 84da6173..cdc3b0e3 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -18,6 +18,8 @@ var DEPOSIT_TIMEOUT = 130 * 1000; var db = null; +var cryptoCoins = null; + var tickerPlugins = {}; var traderPlugin = null; var walletPlugins = {}; @@ -333,7 +335,7 @@ exports.trade = function trade(session, rawTrade, cb) { ], cb); }; -exports.sendBitcoins = function sendBitcoins(session, rawTx, cb) { +exports.sendCoins = function sendCoins(session, rawTx, cb) { executeTx(session, rawTx, 'machine', cb); }; @@ -380,7 +382,7 @@ exports.fiatBalance = function fiatBalance(cryptoCoin) { // `balance.transferBalance` is the balance of our transfer account (the one // we use to send Bitcoins to clients) in satoshis. - var transferBalance = lastBalances.transferBalance; + var transferBalance = lastBalance.transferBalance; var fiatTransferBalance = (transferBalance * rate) / lowBalanceMargin; @@ -485,10 +487,11 @@ exports.getDeviceRate = function getDeviceRate(cryptoCoin) { return lastRate[deviceCurrency]; }; -exports.getBalance = function getBalance() { - if (!lastBalances) return null; +exports.getBalance = function getBalance(cryptoCoin) { + var lastBalance = lastBalances[cryptoCoin] + if (!lastBalance) return null; - return lastBalances.transferBalance; + return lastBalance.transferBalance; }; /* @@ -548,3 +551,7 @@ exports.verifyUser = function verifyUser(data, cb) { exports.verifyTx = function verifyTx(data, cb) { idVerifierPlugin.verifyTransaction(data, cb); }; + +exports.getCryptoCoins = function getCryptoCoins () { + return cryptoCoins; +} diff --git a/lib/routes.js b/lib/routes.js index 4bcc5939..f937a609 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -20,9 +20,37 @@ var STALE_BALANCE = 180000; var pids = {} var reboots = {} +function buildRates () { + var cryptoCoins = plugins.getCryptoCoins(); + var cashInCommission = settings.commission; + var cashOutCommission = settings.fiatCommission || cashInCommission; + + var rates = {} + cryptoCoins.forEach(function (coin) { + var rate = plugins.getDeviceRate(coin).rates + rates[coin] = { + cashIn: rate.ask.times(cashInCommission), + cashOut: rate.bid.div(cashOutCommission) + } + }) + + return rates +} + +function buildBalances () { + var cryptoCoins = plugins.getCryptoCoins(); + + var balances = {} + cryptoCoins.forEach(function (coin) { + var balance = plugins.fiatBalance(coin) + balances[coin] = balance + }) + + return balance + +} + function poll(req, res) { - var rateRec = plugins.getDeviceRate(); - var balanceRec = plugins.getBalance(); var fingerprint = getFingerprint(req) var pid = req.query.pid @@ -30,6 +58,12 @@ function poll(req, res) { logger.debug('poll request from: %s', fingerprint); + var rateRec = plugins.getDeviceRate(); + var balanceRec = plugins.getBalance(); + + var rates = buildRates() + var balances = buildBalances() + // `rateRec` and `balanceRec` are both objects, so there's no danger // of misinterpreting rate or balance === 0 as 'Server initializing'. if (!rateRec || !balanceRec) { @@ -81,7 +115,9 @@ function poll(req, res) { twoWayMode: cartridges ? true : false, zeroConfLimit: settings.zeroConfLimit, fiatTxLimit: settings.fiatTxLimit, - reboot: reboot + reboot: reboot, + rates: rates, + balances: balances }; if (response.idVerificationEnabled) @@ -99,7 +135,7 @@ function trade(req, res) { } function send(req, res) { - plugins.sendBitcoins(session(req), req.body, function(err, status) { + plugins.sendCoins(session(req), req.body, function(err, status) { // TODO: use status.statusCode here after confirming machine compatibility // FIX: (joshm) set txHash to status.txId instead of previous status.txHash which wasn't being set // Need to clean up txHash vs txId