diff options
| author | Ran Guin <[email protected]> | 2021-05-15 17:10:41 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2021-06-09 16:05:31 -0700 |
| commit | 6746e4b500a342f0d3a770b3a6a06652427cdabc (patch) | |
| tree | 065bb2e08c68bf38a8f9b8a5c315e7114fa1935b | |
| parent | 832cfcce5479390a6bb60ba05909911129a8d084 (diff) | |
| download | coinos-server-6746e4b500a342f0d3a770b3a6a06652427cdabc.tar.gz coinos-server-6746e4b500a342f0d3a770b3a6a06652427cdabc.zip | |
account for missing maker user in database in swaps setup
| -rw-r--r-- | routes/swaps.js | 279 |
1 files changed, 144 insertions, 135 deletions
diff --git a/routes/swaps.js b/routes/swaps.js index 6af3cac5..9d0f9929 100644 --- a/routes/swaps.js +++ b/routes/swaps.js @@ -8,6 +8,8 @@ const getAccount = require("../lib/account"); const { Op, col } = require("sequelize"); const uuidv4 = require("uuid/v4"); +const debug = require('debug')('test') + const shallow = a => { let b = {}; for (x in a) { @@ -753,7 +755,8 @@ app.post( }) ); -if (config.maker) +if (config.maker) { + debug('setup maker account...') config.maker.map(({ amount, c1, c2, currency, askMultiplier, bidMultiplier }) => { setInterval(async () => { if (!app.get("rates")) return; @@ -764,52 +767,18 @@ if (config.maker) } }); - await db.transaction(async transaction => { - let order = await db.Order.findOne( - { - where: { - user_id: user.id, - "$acc1.asset$": c1, - "$acc2.asset$": c2, - accepted: false - }, - include: [ - { - model: db.Account, - as: "acc1" - }, - { - model: db.Account, - as: "acc2" - } - ] - }, - { transaction } - ); - - let params = { - a1: c1, - a2: c2, - v1: amount * SATS, - v2: Math.round( - amount * - SATS * - (((app.get("ask") * app.get("rates")[currency]) / - app.get("rates")["USD"]) * - askMultiplier) - ) - }; - - if (order) { - let bestBid = await db.Order.findOne( + if (!user) { + debug('maker user not defined in database') + } else { + debug('maker: ' + JSON.stringify(user)) + await db.transaction(async transaction => { + let order = await db.Order.findOne( { where: { - "$acc1.asset$": c2, - "$acc2.asset$": c1, - accepted: false, - id: { - [Op.ne]: order.id - } + user_id: user.id, + "$acc1.asset$": c1, + "$acc2.asset$": c2, + accepted: false }, include: [ { @@ -820,80 +789,80 @@ if (config.maker) model: db.Account, as: "acc2" } - ], - order: [["rate", "DESC"]], - limit: 1 + ] }, { transaction } ); - if ( - !bestBid || - (params.v2 / params.v1 > bestBid.rate && - order.acc2.balance >= params.v2) - ) { - order.v1 = params.v1; - order.v2 = params.v2; - await order.save(); - order = order.get({ plain: true }); - order.a1 = params.a1; - order.a2 = params.a2; - order.rate = order.v2 / order.v1; - broadcast("order", shallow(order)); - } - } else { - try { - await swap(user, params); - } catch (e) { - l.warn("Failed to make ask", e.message); - } - } + let params = { + a1: c1, + a2: c2, + v1: amount * SATS, + v2: Math.round( + amount * + SATS * + (((app.get("ask") * app.get("rates")[currency]) / + app.get("rates")["USD"]) * + askMultiplier) + ) + }; - order = await db.Order.findOne( - { - where: { - user_id: user.id, - "$acc1.asset$": c2, - "$acc2.asset$": c1, - accepted: false - }, - include: [ + if (order) { + let bestBid = await db.Order.findOne( { - model: db.Account, - as: "acc1" + where: { + "$acc1.asset$": c2, + "$acc2.asset$": c1, + accepted: false, + id: { + [Op.ne]: order.id + } + }, + include: [ + { + model: db.Account, + as: "acc1" + }, + { + model: db.Account, + as: "acc2" + } + ], + order: [["rate", "DESC"]], + limit: 1 }, - { - model: db.Account, - as: "acc2" - } - ] - }, - { transaction } - ); + { transaction } + ); + if ( + !bestBid || + (params.v2 / params.v1 > bestBid.rate && + order.acc2.balance >= params.v2) + ) { + order.v1 = params.v1; + order.v2 = params.v2; + await order.save(); + order = order.get({ plain: true }); + order.a1 = params.a1; + order.a2 = params.a2; + order.rate = order.v2 / order.v1; - params = { - a1: c2, - a2: c1, - v1: Math.round( - amount * - SATS * - ((app.get("bid") * app.get("rates")[currency]) / - app.get("rates")["USD"]) * - bidMultiplier - ), - v2: amount * SATS - }; + broadcast("order", shallow(order)); + } + } else { + try { + await swap(user, params); + } catch (e) { + l.warn("Failed to make ask", e.message); + } + } - if (order) { - let bestAsk = await db.Order.findOne( + order = await db.Order.findOne( { where: { - "$acc1.asset$": c1, - "$acc2.asset$": c2, - accepted: false, - id: { - [Op.ne]: order.id - } + user_id: user.id, + "$acc1.asset$": c2, + "$acc2.asset$": c1, + accepted: false }, include: [ { @@ -904,39 +873,79 @@ if (config.maker) model: db.Account, as: "acc2" } - ], - order: [["rate", "ASC"]], - limit: 1 + ] }, { transaction } ); - if (bestAsk) - if ( - !bestAsk || - (params.v1 / params.v2 < bestAsk.rate && - order.acc1.balance >= params.v1) - ) { - order.v1 = params.v1; - order.v2 = params.v2; - await order.save(); - order = order.get({ plain: true }); - order.a1 = params.a1; - order.a2 = params.a2; - order.rate = order.v2 / order.v1; + params = { + a1: c2, + a2: c1, + v1: Math.round( + amount * + SATS * + ((app.get("bid") * app.get("rates")[currency]) / + app.get("rates")["USD"]) * + bidMultiplier + ), + v2: amount * SATS + }; - broadcast("order", shallow(order)); - } else { - broadcast("removeOrder", order.id); - await order.destroy({ transaction }); + if (order) { + let bestAsk = await db.Order.findOne( + { + where: { + "$acc1.asset$": c1, + "$acc2.asset$": c2, + accepted: false, + id: { + [Op.ne]: order.id + } + }, + include: [ + { + model: db.Account, + as: "acc1" + }, + { + model: db.Account, + as: "acc2" + } + ], + order: [["rate", "ASC"]], + limit: 1 + }, + { transaction } + ); + + if (bestAsk) + if ( + !bestAsk || + (params.v1 / params.v2 < bestAsk.rate && + order.acc1.balance >= params.v1) + ) { + order.v1 = params.v1; + order.v2 = params.v2; + await order.save(); + order = order.get({ plain: true }); + order.a1 = params.a1; + order.a2 = params.a2; + order.rate = order.v2 / order.v1; + + broadcast("order", shallow(order)); + } else { + broadcast("removeOrder", order.id); + await order.destroy({ transaction }); + } + } else { + try { + await swap(user, params); + } catch (e) { + l.warn("Failed to make bid", e.message); } - } else { - try { - await swap(user, params); - } catch (e) { - l.warn("Failed to make bid", e.message); } - } - }); + }); + } }, 5000); }); +} |
