Merge pull request #1532 from josepfo/fix/ciphertrace-not-rating-wallet-addresses

LAM-561 Fix: cash-out skips wallet rating in most status
This commit is contained in:
Rafael Taranto 2023-05-30 13:47:20 +01:00 committed by GitHub
commit 595e215dd5
2 changed files with 12 additions and 11 deletions

View file

@ -25,7 +25,7 @@ case
else 'Pending' else 'Pending'
end` end`
module.exports = {post, monitorPending, cancel, PENDING_INTERVAL, TRANSACTION_STATES} module.exports = { post, monitorPending, cancel, PENDING_INTERVAL, TRANSACTION_STATES }
function post (machineTx, pi) { function post (machineTx, pi) {
logger.silly('Updating cashin tx:', machineTx) logger.silly('Updating cashin tx:', machineTx)
@ -51,12 +51,12 @@ function post (machineTx, pi) {
} }
return postProcess(r, pi, blacklisted, addressReuse, walletScore) return postProcess(r, pi, blacklisted, addressReuse, walletScore)
}) })
.then(changes => _.set('walletScore', _.isNil(walletScore) ? null : walletScore.score, changes))
.then(changes => cashInLow.update(db, updatedTx, changes)) .then(changes => cashInLow.update(db, updatedTx, changes))
.then(tx => _.set('bills', machineTx.bills, tx)) .then(tx => _.set('bills', machineTx.bills, tx))
.then(tx => _.set('blacklisted', blacklisted, tx)) .then(tx => _.set('blacklisted', blacklisted, tx))
.then(tx => _.set('addressReuse', addressReuse, tx)) .then(tx => _.set('addressReuse', addressReuse, tx))
.then(tx => _.set('validWalletScore', _.isNil(walletScore) ? true : walletScore.isValid, tx)) .then(tx => _.set('validWalletScore', _.isNil(walletScore) ? true : walletScore.isValid, tx))
.then(tx => _.set('walletScore', _.isNil(walletScore) ? null : walletScore.score, tx))
}) })
} }
@ -180,9 +180,9 @@ function doesTxReuseAddress (tx) {
} }
function getWalletScore (tx, pi) { function getWalletScore (tx, pi) {
pi.isWalletScoringEnabled(tx) return pi.isWalletScoringEnabled(tx)
.then(isEnabled => { .then(isEnabled => {
if(!isEnabled) return null if (!isEnabled) return null
if (!tx.fiat || tx.fiat.isZero()) { if (!tx.fiat || tx.fiat.isZero()) {
return pi.rateWallet(tx.cryptoCode, tx.toAddress) return pi.rateWallet(tx.cryptoCode, tx.toAddress)
} }

View file

@ -115,22 +115,23 @@ function processTxStatus (tx, settings) {
} }
function getWalletScore (tx, pi) { function getWalletScore (tx, pi) {
const rejectEmpty = message => x => _.isNil(x) || _.isEmpty(x) ? Promise.reject({ message }) : x const rejectEmpty = message => x => _.isNil(x) || _.isEmpty(x) ? Promise.reject(new Error(message)) : x
const statuses = ['published', 'authorized', 'confirmed'] const statuses = ['published', 'authorized', 'confirmed', 'insufficientFunds']
if (_.includes(tx.status, statuses) && _.isNil(tx.walletScore)) if (!_.includes(tx.status, statuses) || !_.isNil(tx.walletScore)) {
return tx return tx
}
// Transaction shows up on the blockchain, we can request the sender address // Transaction shows up on the blockchain, we can request the sender address
return pi.isWalletScoringEnabled(tx) return pi.isWalletScoringEnabled(tx)
.then(isEnabled => { .then(isEnabled => {
if (!isEnabled) return tx if (!isEnabled) return tx
return pi.getTransactionHash(tx) return pi.getTransactionHash(tx)
.then(rejectEmpty("No transaction hashes")) .then(rejectEmpty('No transaction hashes'))
.then(txHashes => pi.getInputAddresses(tx, txHashes)) .then(txHashes => pi.getInputAddresses(tx, txHashes))
.then(rejectEmpty("No input addresses")) .then(rejectEmpty('No input addresses'))
.then(addresses => Promise.all(_.map(it => pi.rateWallet(tx.cryptoCode, it), addresses))) .then(addresses => Promise.all(_.map(it => pi.rateWallet(tx.cryptoCode, it), addresses)))
.then(rejectEmpty("No score ratings")) .then(rejectEmpty('No score ratings'))
.then(_.maxBy(_.get(['score']))) .then(_.maxBy(_.get(['score'])))
.then(highestScore => .then(highestScore =>
// Conservatively assign the highest risk of all input addresses to the risk of this transaction // Conservatively assign the highest risk of all input addresses to the risk of this transaction