From c07ee43b85b62c57426c1038340141c4440ae66e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20S=C3=A1?= Date: Fri, 21 Jan 2022 16:00:03 +0000 Subject: [PATCH 1/3] fix: correctly calculate fiat profit --- lib/new-admin/services/transactions.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/new-admin/services/transactions.js b/lib/new-admin/services/transactions.js index e420355a..690f13fc 100644 --- a/lib/new-admin/services/transactions.js +++ b/lib/new-admin/services/transactions.js @@ -124,21 +124,28 @@ function simplifiedBatch (data) { ...it, status: getStatus(it), fiatProfit: getProfit(it).toString(), - cryptoAmount: getCryptoAmount(it) + cryptoAmount: getCryptoAmount(it).toString() })) return _.compose(_.map(_.pick(fields)), addSimplifiedFields)(data) } -const getCryptoAmount = it => coinUtils.toUnit(BN(it.cryptoAtoms), it.cryptoCode).toString() +const getCryptoAmount = it => coinUtils.toUnit(BN(it.cryptoAtoms), it.cryptoCode) const getProfit = it => { - const discountValue = _.isNil(it.discount) ? BN(100) : BN(100).minus(it.discount) - const discountPercentage = BN(discountValue).div(100) - const commissionPercentage = BN(it.commissionPercentage).times(discountPercentage) - const getCommissionFee = it => BN(commissionPercentage).times(BN(it.fiat)) - if (!it.cashInFee) return getCommissionFee(it) - return getCommissionFee(it).plus(BN(it.cashInFee)) + /* fiat - crypto*tickerPrice + fee */ + const calcCashInProfit = (fiat, crypto, tickerPrice, fee) => fiat.minus(crypto.times(tickerPrice)).plus(fee) + /* crypto*tickerPrice - fiat */ + const calcCashOutProfit = (fiat, crypto, tickerPrice) => crypto.times(tickerPrice).minus(fiat) + + const fiat = BN(it.fiat) + const crypto = getCryptoAmount(it) + const tickerPrice = BN(it.rawTickerPrice) + const isCashIn = it.txClass === 'cashIn' + + return isCashIn + ? calcCashInProfit(fiat, crypto, tickerPrice, BN(it.cashInFee)) + : calcCashOutProfit(fiat, crypto, tickerPrice) } const getCashOutStatus = it => { From 2cb4ad144324eb1b17c3679d9ed57b4ea18276b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20S=C3=A1?= Date: Fri, 21 Jan 2022 16:01:39 +0000 Subject: [PATCH 2/3] fix: export fiatProfit to simplified transaaction logs --- lib/new-admin/graphql/resolvers/transaction.resolver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/new-admin/graphql/resolvers/transaction.resolver.js b/lib/new-admin/graphql/resolvers/transaction.resolver.js index 96bb406e..6c26a297 100644 --- a/lib/new-admin/graphql/resolvers/transaction.resolver.js +++ b/lib/new-admin/graphql/resolvers/transaction.resolver.js @@ -11,7 +11,7 @@ const logDateFormat = require('../../../logs').logDateFormat const transactionsLoader = new DataLoader(ids => transactions.getCustomerTransactionsBatch(ids)) const txLogFields = ['txClass', 'id', 'deviceId', 'toAddress', 'cryptoAtoms', - 'cryptoCode', 'fiat', 'fiatCode', 'fee', 'status', + 'cryptoCode', 'fiat', 'fiatCode', 'fee', 'status', 'fiatProfit', 'dispense', 'notified', 'redeem', 'phone', 'error', 'created', 'confirmedAt', 'hdIndex', 'swept', 'timedout', 'dispenseConfirmed', 'provisioned1', 'provisioned2', From 59af490613fb3a3bf734b9abce431f865cd23a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20S=C3=A1?= Date: Fri, 21 Jan 2022 16:01:59 +0000 Subject: [PATCH 3/3] fix: profit calculation in transactions list --- .../src/pages/Transactions/DetailsCard.js | 41 ++++++++++++++----- .../src/pages/Transactions/Transactions.js | 1 + 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/new-lamassu-admin/src/pages/Transactions/DetailsCard.js b/new-lamassu-admin/src/pages/Transactions/DetailsCard.js index c960a3ee..f625c59c 100644 --- a/new-lamassu-admin/src/pages/Transactions/DetailsCard.js +++ b/new-lamassu-admin/src/pages/Transactions/DetailsCard.js @@ -78,6 +78,27 @@ const CANCEL_CASH_IN_TRANSACTION = gql` } ` +const getCryptoAmount = tx => + coinUtils.toUnit(new BigNumber(tx.cryptoAtoms), tx.cryptoCode).toNumber() + +/* Port of getProfit() from lib/new-admin/services/transactions.js */ +const getCommission = tx => { + const calcCashInProfit = (fiat, crypto, tickerPrice, fee) => + fiat - crypto * tickerPrice + fee + const calcCashOutProfit = (fiat, crypto, tickerPrice) => + crypto * tickerPrice - fiat + + const fiat = Number.parseFloat(tx.fiat) + const crypto = getCryptoAmount(tx) + const tickerPrice = Number.parseFloat(tx.rawTickerPrice) + const isCashIn = tx.txClass === 'cashIn' + const cashInFee = isCashIn ? Number.parseFloat(tx.cashInFee) : 0 + + return isCashIn + ? calcCashInProfit(fiat, crypto, tickerPrice, cashInFee) + : calcCashOutProfit(fiat, crypto, tickerPrice) +} + const formatAddress = (cryptoCode = '', address = '') => coinUtils.formatCryptoAddress(cryptoCode, address).replace(/(.{5})/g, '$1 ') @@ -108,13 +129,15 @@ const DetailsRow = ({ it: tx, timezone }) => { } ) + const commission = getCommission(tx).toFixed(2) + const commissionPercentage = + Number.parseFloat(tx.commissionPercentage, 2) * 100 + const cashInFee = isCashIn ? Number.parseFloat(tx.cashInFee) : 0 const fiat = Number.parseFloat(tx.fiat) - const crypto = coinUtils.toUnit(new BigNumber(tx.cryptoAtoms), tx.cryptoCode) - const commissionPercentage = Number.parseFloat(tx.commissionPercentage, 2) - const commission = Number(fiat * commissionPercentage).toFixed(2) - const discount = tx.discount ? `-${tx.discount}%` : null - const exchangeRate = BigNumber(fiat / crypto).toFormat(2) + const crypto = getCryptoAmount(tx) + const exchangeRate = (fiat / crypto).toFixed(2) const displayExRate = `1 ${tx.cryptoCode} = ${exchangeRate} ${tx.fiatCode}` + const discount = tx.discount ? `-${tx.discount}%` : null const parseDateString = parse(new Date(), 'yyyyMMdd') @@ -263,7 +286,7 @@ const DetailsRow = ({ it: tx, timezone }) => {
- {`${commission} ${tx.fiatCode} (${commissionPercentage * 100} %)`} + {`${commission} ${tx.fiatCode} (${commissionPercentage} %)`} {discount && (
{discount} @@ -273,11 +296,7 @@ const DetailsRow = ({ it: tx, timezone }) => {
-
- {isCashIn - ? `${Number.parseFloat(tx.cashInFee)} ${tx.fiatCode}` - : 'N/A'} -
+
{isCashIn ? `${cashInFee} ${tx.fiatCode}` : 'N/A'}
diff --git a/new-lamassu-admin/src/pages/Transactions/Transactions.js b/new-lamassu-admin/src/pages/Transactions/Transactions.js index 546f7476..028484f2 100644 --- a/new-lamassu-admin/src/pages/Transactions/Transactions.js +++ b/new-lamassu-admin/src/pages/Transactions/Transactions.js @@ -116,6 +116,7 @@ const GET_TRANSACTIONS = gql` isAnonymous batched batchTime + rawTickerPrice } } `