Merge pull request #1193 from siiky/refact/lam-437/ccxt-tickers

Save CCXT ticker objects
This commit is contained in:
Rafael Taranto 2022-04-26 13:04:36 +01:00 committed by GitHub
commit feaccdb4bc
3 changed files with 62 additions and 50 deletions

View file

@ -1,49 +1,59 @@
const ccxt = require('ccxt') const ccxt = require('ccxt')
const BN = require('../../bn') const BN = require('../../bn')
const { buildMarket, verifyFiatSupport } = require('../common/ccxt') const { buildMarket, verifyFiatSupport } = require('../common/ccxt')
const { getRate } = require('../../../lib/forex') const { getRate } = require('../../../lib/forex')
const RETRIES = 2 const RETRIES = 2
function ticker (fiatCode, cryptoCode, tickerName) { const tickerObjects = {}
const ticker = new ccxt[tickerName]({ timeout: 3000 })
if (verifyFiatSupport(fiatCode, tickerName)) { function ticker (fiatCode, cryptoCode, tickerName) {
return getCurrencyRates(ticker, fiatCode, cryptoCode) if (!tickerObjects[tickerName]) {
} tickerObjects[tickerName] = new ccxt[tickerName]({
timeout: 3000,
return getRate(RETRIES, fiatCode) enableRateLimit: false,
.then(({ fxRate }) => { })
try { }
return getCurrencyRates(ticker, 'USD', cryptoCode)
.then(res => ({ const ticker = tickerObjects[tickerName]
rates: {
ask: res.rates.ask.times(fxRate), if (verifyFiatSupport(fiatCode, tickerName)) {
bid: res.rates.bid.times(fxRate) return getCurrencyRates(ticker, fiatCode, cryptoCode)
} }
}))
} catch (e) { return getRate(RETRIES, fiatCode)
return Promise.reject(e) .then(({ fxRate }) => {
} try {
}) return getCurrencyRates(ticker, 'USD', cryptoCode)
} .then(res => ({
rates: {
function getCurrencyRates (ticker, fiatCode, cryptoCode) { ask: res.rates.ask.times(fxRate),
try { bid: res.rates.bid.times(fxRate)
if (!ticker.has['fetchTicker']) { }
throw new Error('Ticker not available') }))
} } catch (e) {
const symbol = buildMarket(fiatCode, cryptoCode, ticker.id) return Promise.reject(e)
return ticker.fetchTicker(symbol) }
.then(res => ({ })
rates: { }
ask: new BN(res.ask),
bid: new BN(res.bid) function getCurrencyRates (ticker, fiatCode, cryptoCode) {
} try {
})) if (!ticker.has['fetchTicker']) {
} catch (e) { throw new Error('Ticker not available')
return Promise.reject(e) }
} const symbol = buildMarket(fiatCode, cryptoCode, ticker.id)
} return ticker.fetchTicker(symbol)
.then(res => ({
module.exports = { ticker } rates: {
ask: new BN(res.ask),
bid: new BN(res.bid)
}
}))
} catch (e) {
return Promise.reject(e)
}
}
module.exports = { ticker }

View file

@ -33,6 +33,7 @@ const SANCTIONS_UPDATE_INTERVAL = 1 * T.day
const RADAR_UPDATE_INTERVAL = 5 * T.minutes const RADAR_UPDATE_INTERVAL = 5 * T.minutes
const PRUNE_MACHINES_HEARTBEAT = 1 * T.day const PRUNE_MACHINES_HEARTBEAT = 1 * T.day
const TRANSACTION_BATCH_LIFECYCLE = 20 * T.minutes const TRANSACTION_BATCH_LIFECYCLE = 20 * T.minutes
const TICKER_RATES_INTERVAL = 59 * T.seconds
const CHECK_NOTIFICATION_INTERVAL = 20 * T.seconds const CHECK_NOTIFICATION_INTERVAL = 20 * T.seconds
const PENDING_INTERVAL = 10 * T.seconds const PENDING_INTERVAL = 10 * T.seconds
@ -178,6 +179,7 @@ function doPolling (schema) {
notifier.checkNotification(pi()) notifier.checkNotification(pi())
updateCoinAtmRadar() updateCoinAtmRadar()
addToQueue(pi().getRawRates, TICKER_RATES_INTERVAL, schema, QUEUE.FAST)
addToQueue(pi().executeTrades, TRADE_INTERVAL, schema, QUEUE.FAST) addToQueue(pi().executeTrades, TRADE_INTERVAL, schema, QUEUE.FAST)
addToQueue(cashOutTx.monitorLiveIncoming, LIVE_INCOMING_TX_INTERVAL, schema, QUEUE.FAST, settings, false, coinFilter) addToQueue(cashOutTx.monitorLiveIncoming, LIVE_INCOMING_TX_INTERVAL, schema, QUEUE.FAST, settings, false, coinFilter)
addToQueue(cashOutTx.monitorStaleIncoming, INCOMING_TX_INTERVAL, schema, QUEUE.FAST, settings, false, coinFilter) addToQueue(cashOutTx.monitorStaleIncoming, INCOMING_TX_INTERVAL, schema, QUEUE.FAST, settings, false, coinFilter)

View file

@ -7,7 +7,7 @@ const ccxt = require('./plugins/ticker/ccxt')
const mockTicker = require('./plugins/ticker/mock-ticker') const mockTicker = require('./plugins/ticker/mock-ticker')
const bitpay = require('./plugins/ticker/bitpay') const bitpay = require('./plugins/ticker/bitpay')
const FETCH_INTERVAL = 60000 const FETCH_INTERVAL = 58000
function _getRates (settings, fiatCode, cryptoCode) { function _getRates (settings, fiatCode, cryptoCode) {
return Promise.resolve() return Promise.resolve()