From 1a109465ea473dbddc026cf4c9e05b0594e44f91 Mon Sep 17 00:00:00 2001 From: Rafael Taranto Date: Fri, 18 Apr 2025 12:22:33 +0100 Subject: [PATCH] fix: trade errors out when no exchange is set --- lib/commission-math.js | 1 - lib/plugins.js | 51 ++++++++++++++++++++---------------------- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/lib/commission-math.js b/lib/commission-math.js index c29a6af9..61103f2d 100644 --- a/lib/commission-math.js +++ b/lib/commission-math.js @@ -35,7 +35,6 @@ function getDiscountRate (discount, commission) { } module.exports = { - truncateCrypto, fiatToCrypto, getDiscountRate } diff --git a/lib/plugins.js b/lib/plugins.js index 9c9d1a29..0c71a515 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -467,6 +467,15 @@ function plugins (settings, deviceId) { * Trader functions */ + function toMarketString (fiatCode, cryptoCode) { + return [fiatCode, cryptoCode].join('-') + } + + function fromMarketString (market) { + const [fiatCode, cryptoCode] = market.split('-') + return { fiatCode, cryptoCode } + } + function buy (rec, tx) { return buyAndSell(rec, true, tx) } @@ -477,14 +486,14 @@ function plugins (settings, deviceId) { function buyAndSell (rec, doBuy, tx) { const cryptoCode = rec.cryptoCode + if (!exchange.active(settings, cryptoCode)) return + return exchange.fetchExchange(settings, cryptoCode) .then(_exchange => { const fiatCode = _exchange.account.currencyMarket const cryptoAtoms = doBuy ? commissionMath.fiatToCrypto(tx, rec, deviceId, settings.config) : rec.cryptoAtoms.negated() - const market = [fiatCode, cryptoCode].join('') - - if (!exchange.active(settings, cryptoCode)) return + const market = toMarketString(fiatCode, cryptoCode) const direction = doBuy ? 'cashIn' : 'cashOut' const internalTxId = tx ? tx.id : rec.id @@ -502,7 +511,7 @@ function plugins (settings, deviceId) { } function consolidateTrades (cryptoCode, fiatCode) { - const market = [fiatCode, cryptoCode].join('') + const market = toMarketString(fiatCode, cryptoCode) const marketTradesQueues = tradesQueues[market] if (!marketTradesQueues || marketTradesQueues.length === 0) return null @@ -550,35 +559,23 @@ function plugins (settings, deviceId) { } function executeTrades () { - return machineLoader.getMachines() - .then(devices => { - const deviceIds = devices.map(device => device.deviceId) - const lists = deviceIds.map(deviceId => { - const localeConfig = configManager.getLocale(deviceId, settings.config) - const cryptoCodes = localeConfig.cryptoCurrencies + const pairs = _.map(fromMarketString)(_.keys(tradesQueues)) + pairs.forEach(({ fiatCode, cryptoCode }) => { + try { + executeTradesForMarket(settings, fiatCode, cryptoCode) + } catch (err) { + logger.error(err) + } + }) - return Promise.all(cryptoCodes.map(cryptoCode => { - return exchange.fetchExchange(settings, cryptoCode) - .then(exchange => ({ - fiatCode: exchange.account.currencyMarket, - cryptoCode - })) - })) - }) - - return Promise.all(lists) - }) - .then(lists => { - return Promise.all(_.uniq(_.flatten(lists)) - .map(r => executeTradesForMarket(settings, r.fiatCode, r.cryptoCode))) - }) - .catch(logger.error) + // Poller expects a promise + return Promise.resolve() } function executeTradesForMarket (settings, fiatCode, cryptoCode) { if (!exchange.active(settings, cryptoCode)) return - const market = [fiatCode, cryptoCode].join('') + const market = toMarketString(fiatCode, cryptoCode) const tradeEntry = consolidateTrades(cryptoCode, fiatCode) if (tradeEntry === null || tradeEntry.cryptoAtoms.eq(0)) return