diff options
| author | Adam Soltys <[email protected]> | 2020-09-16 23:05:14 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2020-09-16 23:05:14 -0700 |
| commit | 49883ffcf2b01f4ca85f87cd55ba17cc8d6aaea9 (patch) | |
| tree | eb3befe88898a91a153690729d025e5f339f4cbf /routes | |
| parent | 55a37c3a545928553d6a540431f6266cb24fa401 (diff) | |
| download | coinos-server-49883ffcf2b01f4ca85f87cd55ba17cc8d6aaea9.tar.gz coinos-server-49883ffcf2b01f4ca85f87cd55ba17cc8d6aaea9.zip | |
add account network, fix internal asset transfers
Diffstat (limited to 'routes')
| -rw-r--r-- | routes/assets.js | 12 | ||||
| -rw-r--r-- | routes/invoices.js | 3 | ||||
| -rw-r--r-- | routes/liquid/receive.js | 13 | ||||
| -rw-r--r-- | routes/send.js | 60 | ||||
| -rw-r--r-- | routes/users.js | 15 |
5 files changed, 52 insertions, 51 deletions
diff --git a/routes/assets.js b/routes/assets.js index 06ad42dc..2468b394 100644 --- a/routes/assets.js +++ b/routes/assets.js @@ -1,7 +1,8 @@ const axios = require("axios"); const crypto = require("crypto"); -app.get("/assets", ah(async (req, res) => { +let fetchAssets; +(fetchAssets = async () => { try { const { data: assets } = await axios.get( "https://assets.blockstream.info/" @@ -16,11 +17,18 @@ app.get("/assets", ah(async (req, res) => { if (!assets[a.asset]) assets[a.asset] = a; }); - res.send(assets); + app.set('assets', assets); } catch (e) { l.error("error fetching assets", e.message); res.status(500).send("error fetching assets"); } + + setTimeout(fetchAssets, 7200000); +})(); + +app.get("/assets", ah(async (req, res) => { + if (app.get('assets')) res.send(app.get('assets')); + else app.status(500).send('Problem fetching blockstream asset registry data'); })); app.post("/assets", auth, ah(async (req, res) => { diff --git a/routes/invoices.js b/routes/invoices.js index 092b5eae..934ff96c 100644 --- a/routes/invoices.js +++ b/routes/invoices.js @@ -47,7 +47,8 @@ app.post("/invoice", ah(async (req, res, next) => { const exists = await db.Invoice.findOne({ where: { [Op.or]: { - address: invoice.address || "undefined", + address: invoice.address || "", + unconfidential: invoice.unconfidential || "", text: invoice.text, }, }, diff --git a/routes/liquid/receive.js b/routes/liquid/receive.js index 64b8e37d..097dc53a 100644 --- a/routes/liquid/receive.js +++ b/routes/liquid/receive.js @@ -12,7 +12,7 @@ const network = config.liquid.network === "mainnet" ? "liquid" : config.liquid.network ]; -const getAccount = async (params, pending) => { +const getAccount = async (params) => { let account = await db.Account.findOne({ where: params }); @@ -29,7 +29,7 @@ const getAccount = async (params, pending) => { let ticker = asset.substr(0, 3).toUpperCase(); let precision = 8; - const assets = (await axios.get("https://assets.blockstream.info/")).data; + const assets = app.get('assets'); if (assets[asset]) { ({ domain, ticker, precision, name } = assets[asset]); @@ -51,7 +51,7 @@ const getAccount = async (params, pending) => { params = { ...params, ...{ domain, ticker, precision, name } }; params.balance = 0; - params.pending = pending; + params.network = 'liquid'; return db.Account.create(params); }; @@ -103,17 +103,20 @@ zmqRawTx.on("message", async (topic, message, sequence) => { let { account } = invoice; - if (account.asset === asset) { + if (account.asset === asset && (!account.pubkey || account.network === 'liquid')) { account.pending += value; await account.save(); } else { account = await getAccount( { + seed: account.seed, + path: account.path, user_id: user.id, asset, pubkey: account.pubkey, + pending: value, + index: 0, }, - value ); } diff --git a/routes/send.js b/routes/send.js index b0047010..9080dc0c 100644 --- a/routes/send.js +++ b/routes/send.js @@ -58,7 +58,7 @@ module.exports = ah(async (req, res, next) => { emit(user.username, "user", user); if (username) { - user = await db.User.findOne({ + let recipient = await db.User.findOne({ where: { username }, include: { model: db.Account, @@ -66,46 +66,33 @@ module.exports = ah(async (req, res, next) => { } }); - const invoice = await db.Invoice.findOne({ - where: { - user_id: user.id, - network: "bitcoin" - }, - order: [["id", "DESC"]], - include: { - model: db.Account, - as: "account" - } - }); - - if (invoice) ({ account } = invoice); - else if (user.account.asset === asset && !user.account.pubkey) - ({ account } = user); + let a2; + if (recipient.account.asset === asset && !recipient.account.pubkey) + ({ a2 } = recipient); else { let params = { - user_id: user.id, + user_id: recipient.id, asset, pubkey: null }; - account = await db.Account.findOne({ + a2 = await db.Account.findOne({ where: params, lock: transaction.LOCK.UPDATE, transaction }); } - if (account) { - account.balance += amount; - await account.save({ transaction }); + if (a2) { + a2.balance += amount; + await a2.save({ transaction }); } else { let name = asset.substr(0, 6); let domain; let ticker = asset.substr(0, 3).toUpperCase(); let precision = 8; - const assets = (await axios.get("https://assets.blockstream.info/")) - .data; + const assets = app.get('assets'); if (assets[asset]) { ({ domain, ticker, precision, name } = assets[asset]); @@ -125,19 +112,20 @@ module.exports = ah(async (req, res, next) => { } } - params = { ...params, ...{ domain, ticker, precision, name } }; + params = { asset, ...params, ...{ domain, ticker, precision, name } }; params.balance = amount; params.pending = 0; - account = await db.Account.create(params, { transaction }); + params.network = 'liquid'; + a2 = await db.Account.create(params, { transaction }); } - payment = await db.Payment.create( + let p2 = await db.Payment.create( { amount, - account_id: account.id, - user_id: user.id, - rate: app.get("rates")[user.currency], - currency: user.currency, + account_id: a2.id, + user_id: recipient.id, + rate: app.get("rates")[recipient.currency], + currency: recipient.currency, confirmed: true, hash: "Internal Transfer", memo, @@ -147,13 +135,13 @@ module.exports = ah(async (req, res, next) => { { transaction } ); - payment = payment.get({ plain: true }); - payment.account = account.get({ plain: true }); - emit(user.username, "account", account); - emit(user.username, "payment", payment); + p2 = p2.get({ plain: true }); + p2.account = a2.get({ plain: true }); + emit(recipient.username, "account", p2.account); + emit(recipient.username, "payment", p2); - l.info("received internal", user.username, amount); - notify(user, `Received ${amount} ${account.ticker} sats`); + l.info("received internal", recipient.username, amount); + notify(recipient, `Received ${amount} ${a2.ticker} sats`); } res.send(payment); }); diff --git a/routes/users.js b/routes/users.js index d1bdfc0c..5de71a54 100644 --- a/routes/users.js +++ b/routes/users.js @@ -259,7 +259,7 @@ app.post( "/accounts", auth, ah(async (req, res) => { - const { name, seed, pubkey, ticker, precision, path } = req.body; + const { name, seed, pubkey, ticker, precision, path, network } = req.body; const { user } = req; let account = await db.Account.create({ @@ -272,7 +272,8 @@ app.post( precision, pubkey, seed, - path + path, + network }); emit(user.username, "account", account); @@ -421,12 +422,12 @@ app.post( pubkey, path, hide, - index, + index } = req.body; try { await db.Account.update( - { name, ticker, precision, domain, seed, pubkey, path, hide }, + { name, ticker, precision, domain, seed, pubkey, path, hide, index }, { where: { id, user_id: user.id } } @@ -472,12 +473,12 @@ app.post( } }); user.payments = payments; - user.account = account; + user.account = account.get({ plain: true }); - emit(user.username, "account", account.get({ plain: true })); + emit(user.username, "account", user.account); emit(user.username, "user", user); - res.end(); + res.send(user); } catch (e) { l.error(e.message); return res.status(500).send("There was a problem switching accounts"); |
