From 134a016bbd8298ecef2eaf43ba22344120c1119b Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Thu, 16 Mar 2017 17:32:57 +0200 Subject: [PATCH] WIPP --- lib/bn.js | 2 +- lib/plugins.js | 27 ++++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/bn.js b/lib/bn.js index a9016d39..2c16ef94 100644 --- a/lib/bn.js +++ b/lib/bn.js @@ -2,5 +2,5 @@ const BigNumber = require('bignumber.js') BigNumber.config({ROUNDING_MODE: BigNumber.ROUND_HALF_EVEN}) -function BN (s) { return new BigNumber(s) } +function BN (s, radix) { return new BigNumber(s, radix) } module.exports = BN diff --git a/lib/plugins.js b/lib/plugins.js index aa224af6..a68684d0 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -1,9 +1,9 @@ const uuid = require('uuid') const _ = require('lodash/fp') -const BigNumber = require('bignumber.js') const argv = require('minimist')(process.argv.slice(2)) const crypto = require('crypto') +const BN = require('./bn') const dbm = require('./postgresql_interface') const db = require('./db') const logger = require('./logger') @@ -36,18 +36,19 @@ function plugins (settings, deviceId) { const cryptoCodes = config.cryptoCurrencies const cashOut = config.cashOutEnabled - const cashInCommission = new BigNumber(config.cashInCommission).div(100).plus(1) - const cashOutCommission = cashOut && new BigNumber(config.cashOutCommission).div(100).plus(1) + const cashInCommission = BN(1).minus(BN(config.cashInCommission).div(100)) + const cashOutCommission = cashOut && BN(1).plus(BN(config.cashOutCommission).div(100)) const rates = {} console.log('DEBUG444: %j', tickers) + console.log('DEBUG445: %j', [config.cashOutCommission, cashOutCommission]) cryptoCodes.forEach((cryptoCode, i) => { const rateRec = tickers[i] if (Date.now() - rateRec.timestamp > STALE_TICKER) return logger.warn('Stale rate for ' + cryptoCode) const rate = rateRec.rates rates[cryptoCode] = { - cashIn: rate.ask.times(cashInCommission), + cashIn: rate.ask.div(cashInCommission), cashOut: cashOut ? rate.bid.div(cashOutCommission) : undefined } }) @@ -203,22 +204,22 @@ function plugins (settings, deviceId) { ]) .then(([rates, balanceRec]) => { const rawRate = rates.rates.ask - const commission = (new BigNumber(config.cashInCommission).div(100)).plus(1) + const cashInCommission = BN(1).minus(BN(config.cashInCommission).div(100)) const balance = balanceRec.balance if (!rawRate || !balance) return null - // The rate is actually our commission times real rate. - const rate = rawRate.times(commission) + const rate = rawRate.div(cashInCommission) // `lowBalanceMargin` is our safety net. It's a number > 1, and we divide // all our balances by it to provide a safety margin. - const lowBalanceMargin = (new BigNumber(config.lowBalanceMargin).div(100)).plus(1) + const lowBalanceMargin = (BN(config.lowBalanceMargin).div(100)).plus(1) - const unitScale = new BigNumber(10).pow(coins[cryptoCode].unitScale) - const fiatTransferBalance = balance.div(unitScale).times(rate).div(lowBalanceMargin) + const unitScale = BN(10).pow(coins[cryptoCode].unitScale) + const fiatTransferBalance = balance.mul(rate.div(unitScale)).div(lowBalanceMargin) - return {timestamp: balanceRec.timestamp, balance: fiatTransferBalance.round(3).toNumber()} + console.log('DEBUG444: %s', fiatTransferBalance) + return {timestamp: balanceRec.timestamp, balance: fiatTransferBalance.truncated().toString()} }) } @@ -308,7 +309,7 @@ function plugins (settings, deviceId) { if (filtered.length === 0) return null const cryptoAtoms = filtered - .reduce((prev, current) => prev.plus(current.cryptoAtoms), new BigNumber(0)) + .reduce((prev, current) => prev.plus(current.cryptoAtoms), BN(0)) const timestamp = filtered.map(r => r.timestamp).reduce((acc, r) => Math.max(acc, r), 0) @@ -425,7 +426,7 @@ function plugins (settings, deviceId) { } function randomCode () { - return new BigNumber(crypto.randomBytes(3).toString('hex'), 16).shift(-6).toFixed(6).slice(-6) + return BN(crypto.randomBytes(3).toString('hex'), 16).shift(-6).toFixed(6).slice(-6) } function getPhoneCode (phone) {