aboutsummaryrefslogtreecommitdiffstats
path: root/routes/liquid/fee.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2021-02-19 21:46:21 -0800
committerAdam Soltys <[email protected]>2021-02-19 21:46:21 -0800
commitfb2a1a9f7262c58636b62fe1eee1b95e88a481c8 (patch)
treefc05ad9ac87f402ec48e08d8792e44df72631d23 /routes/liquid/fee.js
parent035afbbbc1c00f15d3956dbd21adb3a9c82c223e (diff)
downloadcoinos-server-fb2a1a9f7262c58636b62fe1eee1b95e88a481c8.tar.gz
coinos-server-fb2a1a9f7262c58636b62fe1eee1b95e88a481c8.zip
instant lightning->liquid conversion
Diffstat (limited to 'routes/liquid/fee.js')
-rw-r--r--routes/liquid/fee.js89
1 files changed, 43 insertions, 46 deletions
diff --git a/routes/liquid/fee.js b/routes/liquid/fee.js
index 489c5c4b..82bb7604 100644
--- a/routes/liquid/fee.js
+++ b/routes/liquid/fee.js
@@ -1,25 +1,18 @@
const buildTx = require("../../lib/buildliquidtx");
-module.exports = ah(async (req, res) => {
- let { user } = req;
- let { address, asset, amount, feeRate, replaceable } = req.body;
+liquidTx = async ({ address, asset, amount, feeRate, replaceable, user }) => {
let tx, fee;
if (user.account.pubkey) {
- try {
- let psbt = await buildTx({
- address,
- asset,
- amount,
- feeRate,
- replaceable,
- user
- });
- return res.send(psbt);
- } catch (e) {
- l.error(e.message, e.stack);
- return res.status(500).send(e.message);
- }
+ let psbt = await buildTx({
+ address,
+ asset,
+ amount,
+ feeRate,
+ replaceable,
+ user
+ });
+ return psbt;
}
let invoice = await db.Invoice.findOne({
@@ -35,47 +28,51 @@ module.exports = ah(async (req, res) => {
let { ismine } = await lq.getAddressInfo(address);
if (ismine) {
emit(user.username, "to", invoice.user);
- return res.end();
+ return;
}
}
- try {
- if (config.liquid.walletpass)
- await lq.walletPassphrase(config.liquid.walletpass, 300);
+ if (config.liquid.walletpass)
+ await lq.walletPassphrase(config.liquid.walletpass, 300);
- amount = parseInt(amount);
+ amount = parseInt(amount);
- let params = {
- subtractFeeFromOutputs: amount === user.balance ? [0] : []
- };
+ let params = {
+ subtractFeeFromOutputs: amount === user.balance ? [0] : []
+ };
- let value = (amount / SATS).toFixed(8);
- if (feeRate) params.feeRate = (feeRate / SATS).toFixed(8);
+ let value = (amount / SATS).toFixed(8);
+ if (feeRate) params.feeRate = (feeRate / SATS).toFixed(8);
- let info = await lq.getAddressInfo(address);
+ let info = await lq.getAddressInfo(address);
- tx = await lq.createRawTransaction(
- [],
- {
- [address]: (amount / SATS).toFixed(8)
- },
- 0,
- replaceable,
- {
- [address]: asset
- }
- );
+ tx = await lq.createRawTransaction(
+ [],
+ {
+ [address]: (amount / SATS).toFixed(8)
+ },
+ 0,
+ replaceable,
+ {
+ [address]: asset
+ }
+ );
+
+ tx = await lq.fundRawTransaction(tx, params);
- tx = await lq.fundRawTransaction(tx, params);
+ let blinded = await lq.blindRawTransaction(tx.hex);
+ let signed = await lq.signRawTransactionWithWallet(blinded);
- let blinded = await lq.blindRawTransaction(tx.hex);
- let signed = await lq.signRawTransactionWithWallet(blinded);
+ decoded = await lq.decodeRawTransaction(signed.hex);
+ feeRate = Math.round((tx.fee * SATS * 1000) / decoded.vsize);
+ l.info("estimated", asset, feeRate);
- decoded = await lq.decodeRawTransaction(signed.hex);
- feeRate = Math.round((tx.fee * SATS * 1000) / decoded.vsize);
- l.info("estimated", asset, feeRate);
+ return { feeRate, tx };
+};
- res.send({ feeRate, tx });
+module.exports = ah(async (req, res) => {
+ try {
+ res.send(await liquidTx({ ...req.body, user: req.user }));
} catch (e) {
l.error("error estimating liquid fee", e.message);
return res.status(500).send(e.message);