aboutsummaryrefslogtreecommitdiffstats
path: root/routes/liquid/send.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-04-28 22:09:22 -0700
committerAdam Soltys <[email protected]>2020-04-28 22:33:02 -0700
commit63c18105e6c66b3b4698c398f356bef1b496816f (patch)
treee7ee85e7c3502ed81954448a76be028143990948 /routes/liquid/send.js
parent994dd93f6c45c590ae59a699cbf425d96518da1e (diff)
downloadcoinos-server-63c18105e6c66b3b4698c398f356bef1b496816f.tar.gz
coinos-server-63c18105e6c66b3b4698c398f356bef1b496816f.zip
include account in emitted payments objects
Diffstat (limited to 'routes/liquid/send.js')
-rw-r--r--routes/liquid/send.js105
1 files changed, 61 insertions, 44 deletions
diff --git a/routes/liquid/send.js b/routes/liquid/send.js
index 461b0c0a..4d8b8d4c 100644
--- a/routes/liquid/send.js
+++ b/routes/liquid/send.js
@@ -25,27 +25,32 @@ module.exports = async (req, res) => {
scriptPubKey: { type, addresses }
} = tx.vout[i];
- if (!totals[asset]) totals[asset] = change[asset] = 0;
- totals[asset] += toSats(value);
if (type === "fee") fee = toSats(value);
+ else {
+ if (!totals[asset]) totals[asset] = change[asset] = 0;
+ totals[asset] += toSats(value);
- if (addresses) {
- if (await isChange(addresses[0])) {
- change[asset] += toSats(value);
+ if (addresses) {
+ if (await isChange(addresses[0])) {
+ change[asset] += toSats(value);
+ }
}
}
}
- let assets = Object.keys(totals);
- for (let i = 0; i < assets.length; i++) {
- let asset = assets[i];
- let total = totals[asset];
- if (change[asset]) total -= change[asset];
+ const assets = Object.keys(totals);
+ const payments = [];
+
+ try {
+ await db.transaction(async transaction => {
+ for (let i = 0; i < assets.length; i++) {
+ let asset = assets[i];
+ let total = totals[asset];
+ if (change[asset]) total -= change[asset];
+ if (asset === config.liquid.btcasset) total += fee;
- l.info("attempting liquid payment", user.username, asset, total, fee);
+ l.info("creating liquid payment", user.username, asset, total, fee);
- try {
- await db.transaction(async transaction => {
let account = await db.Account.findOne({
where: {
user_id: user.id,
@@ -67,41 +72,53 @@ module.exports = async (req, res) => {
account.balance -= total;
await account.save({ transaction });
- try {
- if (config.liquid.walletpass)
- await lq.walletPassphrase(config.liquid.walletpass, 300);
+ let payment = {
+ amount: -total,
+ account_id: account.id,
+ fee,
+ user_id: user.id,
+ rate: app.get("rates")[user.currency],
+ currency: user.currency,
+ address,
+ confirmed: true,
+ received: false,
+ network: "LBTC"
+ };
- hex = await lq.blindRawTransaction(hex);
- rawtx = (await lq.signRawTransactionWithWallet(hex)).hex;
- let txid = await lq.sendRawTransaction(rawtx);
+ payment.account = account;
+ payments.push(payment);
+ }
+ });
+ } catch (e) {
+ l.error("problem creating liquid payment", user.username, e.message);
+ return res.status(500).send(e.message);
+ }
- const payment = await db.Payment.create({
- amount: -total,
- account_id: account.id,
- fee,
- user_id: user.id,
- hash: txid,
- rate: app.get("rates")[user.currency],
- currency: user.currency,
- address,
- confirmed: true,
- received: false,
- network: "LBTC"
- }, { transaction });
+ try {
+ if (config.liquid.walletpass)
+ await lq.walletPassphrase(config.liquid.walletpass, 300);
- payment.account = account;
+ hex = await lq.blindRawTransaction(hex);
+ rawtx = (await lq.signRawTransactionWithWallet(hex)).hex;
+ let txid = await lq.sendRawTransaction(rawtx);
- user = await getUser(user.username);
- emit(user.username, "user", user);
- res.send(payment);
- } catch (e) {
- l.error("liquid send failed", e);
- return res.status(500).send(e.message);
- }
- });
- } catch (e) {
- l.warn("insufficient funds for liquid payment", user.username, e.message);
- return res.status(500).send("Not enough satoshis");
+ let main;
+ for (let i = 0; i < assets.length; i++) {
+ p = payments[i];
+ let { account } = p;
+ p.hash = txid;
+ p = await db.Payment.create(p);
+ if (account.ticker !== "BTC" || !main) {
+ main = p.get({ plain: true });
+ main.account = account.get({ plain: true });
+ }
}
+
+ user = await getUser(user.username);
+ emit(user.username, "user", user);
+ res.send(main);
+ } catch (e) {
+ l.error("problem sending liquid", user.username, e.message);
+ return res.status(500).send(e.message);
}
};