feat: add ciphertrace base implementation
This commit is contained in:
parent
201fec33e4
commit
904c383431
20 changed files with 258 additions and 39 deletions
|
|
@ -8,7 +8,7 @@ const E = require('../error')
|
|||
|
||||
const PENDING_INTERVAL_MS = 60 * T.minutes
|
||||
|
||||
const massageFields = ['direction', 'cryptoNetwork', 'bills', 'blacklisted', 'addressReuse', 'promoCodeApplied', 'failedWalletScore']
|
||||
const massageFields = ['direction', 'cryptoNetwork', 'bills', 'blacklisted', 'addressReuse', 'promoCodeApplied', 'validWalletScore']
|
||||
const massageUpdateFields = _.concat(massageFields, 'cryptoAtoms')
|
||||
|
||||
const massage = _.flow(_.omit(massageFields),
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ const cashInLow = require('./cash-in-low')
|
|||
|
||||
const PENDING_INTERVAL = '60 minutes'
|
||||
const MAX_PENDING = 10
|
||||
const WALLET_SCORE_THRESHOLD = 10
|
||||
|
||||
const TRANSACTION_STATES = `
|
||||
case
|
||||
|
|
@ -34,13 +33,13 @@ function post (machineTx, pi) {
|
|||
const updatedTx = r.tx
|
||||
let blacklisted = false
|
||||
let addressReuse = false
|
||||
let failedWalletScore = false
|
||||
let walletScore = {}
|
||||
|
||||
return Promise.all([settingsLoader.loadLatest(), checkForBlacklisted(updatedTx), doesTxReuseAddress(updatedTx), doesWalletScoreFail(updatedTx, pi)])
|
||||
.then(([{ config }, blacklistItems, isReusedAddress, walletScoreFailed]) => {
|
||||
return Promise.all([settingsLoader.loadLatest(), checkForBlacklisted(updatedTx), doesTxReuseAddress(updatedTx), getWalletScore(updatedTx, pi)])
|
||||
.then(([{ config }, blacklistItems, isReusedAddress, fetchedWalletScore]) => {
|
||||
const rejectAddressReuse = configManager.getCompliance(config).rejectAddressReuse
|
||||
|
||||
failedWalletScore = walletScoreFailed
|
||||
walletScore = fetchedWalletScore
|
||||
|
||||
if (_.some(it => it.address === updatedTx.toAddress)(blacklistItems)) {
|
||||
blacklisted = true
|
||||
|
|
@ -49,13 +48,14 @@ function post (machineTx, pi) {
|
|||
notifier.notifyIfActive('compliance', 'blacklistNotify', r.tx, true)
|
||||
addressReuse = true
|
||||
}
|
||||
return postProcess(r, pi, blacklisted, addressReuse, failedWalletScore)
|
||||
return postProcess(r, pi, blacklisted, addressReuse, walletScore)
|
||||
})
|
||||
.then(changes => cashInLow.update(db, updatedTx, changes))
|
||||
.then(tx => _.set('bills', machineTx.bills, tx))
|
||||
.then(tx => _.set('blacklisted', blacklisted, tx))
|
||||
.then(tx => _.set('addressReuse', addressReuse, tx))
|
||||
.then(tx => _.set('failedWalletScore', failedWalletScore, tx))
|
||||
.then(tx => _.set('validWalletScore', _.isNil(walletScore) ? true : walletScore.isValid, tx))
|
||||
.then(tx => _.set('walletScore', _.isNil(walletScore) ? null : walletScore.score, tx))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ function checkForBlacklisted (tx) {
|
|||
return Promise.resolve(false)
|
||||
}
|
||||
|
||||
function postProcess (r, pi, isBlacklisted, addressReuse, failedWalletScore) {
|
||||
function postProcess (r, pi, isBlacklisted, addressReuse, walletScore) {
|
||||
if (addressReuse) {
|
||||
return Promise.resolve({
|
||||
operatorCompleted: true,
|
||||
|
|
@ -108,10 +108,11 @@ function postProcess (r, pi, isBlacklisted, addressReuse, failedWalletScore) {
|
|||
})
|
||||
}
|
||||
|
||||
if (failedWalletScore) {
|
||||
if (!_.isNil(walletScore) && !walletScore.isValid) {
|
||||
return Promise.resolve({
|
||||
walletScore: walletScore.score,
|
||||
operatorCompleted: true,
|
||||
error: 'Failed wallet score'
|
||||
error: 'Ciphertrace score is above defined threshold'
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -171,12 +172,17 @@ function doesTxReuseAddress (tx) {
|
|||
return Promise.resolve(false)
|
||||
}
|
||||
|
||||
function doesWalletScoreFail (tx, pi) {
|
||||
function getWalletScore (tx, pi) {
|
||||
if (!tx.fiat || tx.fiat.isZero()) {
|
||||
return pi.rateWallet(tx.toAddress)
|
||||
.then(res => res >= WALLET_SCORE_THRESHOLD)
|
||||
return pi.rateWallet(tx.cryptoCode, tx.toAddress)
|
||||
}
|
||||
return Promise.resolve(false)
|
||||
// Passthrough the previous result
|
||||
return pi.isValidWalletScore(tx.walletScore)
|
||||
.then(isValid => ({
|
||||
address: tx.toAddress,
|
||||
score: tx.walletScore,
|
||||
isValid
|
||||
}))
|
||||
}
|
||||
|
||||
function monitorPending (settings) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue