This commit is contained in:
Josh Harvey 2016-04-07 12:00:56 +01:00
parent 184d30209a
commit 14497d81c6

View file

@ -3,6 +3,7 @@
// TODO: Consider using serializable transactions for true ACID // TODO: Consider using serializable transactions for true ACID
var BigNumber = require('bignumber.js')
var pg = require('pg'); var pg = require('pg');
var async = require('async'); var async = require('async');
var _ = require('lodash'); var _ = require('lodash');
@ -173,27 +174,30 @@ function billsAndTxs(client, session, cb) {
// we need to parse, since we know these won't be huge numbers. // we need to parse, since we know these won't be huge numbers.
cb(null, { cb(null, {
billsFiat: parseInt(results[0].rows[0].fiat), billsFiat: parseInt(results[0].rows[0].fiat),
billsSatoshis: parseInt(results[0].rows[0].satoshis), billsSatoshis: new BigNumber(results[0].rows[0].satoshis),
txFiat: parseInt(results[1].rows[0].fiat), txFiat: parseInt(results[1].rows[0].fiat),
txSatoshis: parseInt(results[1].rows[0].satoshis) txSatoshis: new BigNumber(results[1].rows[0].satoshis)
}); });
}); });
} }
function computeSendAmount(tx, totals) { function computeSendAmount(tx, totals) {
var fiatRemaining = (tx.fiat || totals.billsFiat) - totals.txFiat; var fiatRemaining = (tx.fiat || totals.billsFiat) - totals.txFiat;
var satoshisRemaining = (tx.satoshis || totals.billsSatoshis) -
totals.txSatoshis; var satoshisRemaining = tx.satoshis.eq(0)
? totals.billsSatoshis.minus(totals.txSatoshis)
: tx.satoshis.minus(totals.txSatoshis)
var result = { var result = {
fiat: fiatRemaining, fiat: fiatRemaining,
satoshis: satoshisRemaining satoshis: satoshisRemaining
}; };
if (result.fiat < 0 || result.satoshis < 0) { if (result.fiat < 0 || result.satoshis.lt(0)) {
logger.warn({tx: tx, totals: totals, result: result}, logger.warn({tx: tx, totals: totals, result: result},
'computeSendAmount result < 0, this shouldn\'t happen. ' + 'computeSendAmount result < 0, this shouldn\'t happen. ' +
'Maybe timeout arrived after machineSend.'); 'Maybe timeout arrived after machineSend.');
result.fiat = 0; result.fiat = 0;
result.satoshis = 0; result.satoshis = new BigNumber(0);
} }
return result; return result;
} }
@ -240,7 +244,7 @@ function insertOutgoingTx(client, session, tx, totals, cb) {
var authority = tx.fiat ? 'machine' : 'timeout'; var authority = tx.fiat ? 'machine' : 'timeout';
var satoshis = sendAmount.satoshis; var satoshis = sendAmount.satoshis;
var fiat = sendAmount.fiat; var fiat = sendAmount.fiat;
if (satoshis === 0) return cb(null, {satoshis: 0, fiat: 0}); if (satoshis.eq(0)) return cb(null, {satoshis: new BigNumber(0), fiat: 0});
insertOutgoing(client, session, tx, satoshis, fiat, stage, authority, insertOutgoing(client, session, tx, satoshis, fiat, stage, authority,
function(err) { function(err) {
@ -264,7 +268,7 @@ function insertOutgoingCompleteTx(client, session, tx, cb) {
function insertIncoming(client, session, tx, satoshis, fiat, stage, authority, function insertIncoming(client, session, tx, satoshis, fiat, stage, authority,
cb) { cb) {
var realSatoshis = satoshis || 0; var realSatoshis = satoshis || new BigNumber(0);
insertTx(client, session, true, tx, realSatoshis, fiat, stage, authority, cb); insertTx(client, session, true, tx, realSatoshis, fiat, stage, authority, cb);
} }