diff options
Diffstat (limited to 'routes/liquid/receive.js')
| -rw-r--r-- | routes/liquid/receive.js | 80 |
1 files changed, 30 insertions, 50 deletions
diff --git a/routes/liquid/receive.js b/routes/liquid/receive.js index 24d17a35..8d2d6ca8 100644 --- a/routes/liquid/receive.js +++ b/routes/liquid/receive.js @@ -1,3 +1,4 @@ +const axios = require("axios"); const reverse = require("buffer-reverse"); const zmq = require("zeromq"); const { Op } = require("sequelize"); @@ -47,27 +48,26 @@ zmqRawTx.on("message", async (topic, message, sequence) => { let confirmed = 0; - if (asset === config.liquid.btcasset) { - user.pending += value; - } else { - const params = { - user_id: user.id, - asset, - }; + const params = { + user_id: user.id, + asset, + }; - const account = await db.Account.findOne({ - where: params - }); + const account = await db.Account.findOne({ + where: params + }); - if (account) { - account.pending += value; - await account.save(); - } else { - params.balance = 0; - params.pending = value; - l.info("creating", params); - await db.Account.create(params); - } + if (account) { + account.pending += value; + await account.save(); + } else { + let assets = await axios.get("https://assets.blockstream.info/"); + let { ticker, precision, name } = assets[asset]; + params = { ...params, ...{ticker, precision, name }}; + + params.balance = 0; + params.pending = value; + account = await db.Account.create(params); } user.confidential = await lq.getNewAddress(); @@ -81,6 +81,7 @@ zmqRawTx.on("message", async (topic, message, sequence) => { addresses[user.liquid] = user.username; const payment = await db.Payment.create({ + account_id: account.id, user_id: user.id, hash: blinded.txid, amount: value - tip, @@ -127,47 +128,26 @@ setInterval(async () => { let p = await db.Payment.findOne({ where: { hash, confirmed: 0, received: 1 } + include: { + model: db.Account, + as: "account", + }, }); - const user = await getUser(p.user_id); - p.confirmed = 1; - const asset = await db.Account.findOne({ - where: { - user_id: user.id, - asset: p.asset - } - }); - - l.info("asset", p.asset); - if (p.asset === config.liquid.btcasset) { - user.balance += p.amount + p.tip; - user.pending -= Math.min(user.pending, p.amount + p.tip); - } else { - asset.balance += p.amount + p.tip; - asset.pending -= Math.min(user.pending, p.amount + p.tip); - await asset.save(); - } + l.info("account", p.account); + p.account.balance += p.amount + p.tip; + p.account.pending -= Math.min(p.account.pending, p.amount + p.tip); + await p.account.save(); l.info("liquid confirmed", user.username, p.asset, p.amount, p.tip); - emit(user.username, "user", user); - await user.save(); await p.save(); - let payments = await db.Payment.findAll({ - where: { - user_id: user.id, - received: { - [Op.ne]: null - } - }, - order: [["id", "DESC"]], - limit: 12 - }); + user = await getUser(user.username); + emit(user.username, "user", user); - emit(user.username, "payments", payments); delete queue[hash]; } }, 1000); |
