diff options
| author | Adam Soltys <[email protected]> | 2021-02-19 21:46:21 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2021-02-19 21:46:21 -0800 |
| commit | fb2a1a9f7262c58636b62fe1eee1b95e88a481c8 (patch) | |
| tree | fc05ad9ac87f402ec48e08d8792e44df72631d23 /routes/liquid/fee.js | |
| parent | 035afbbbc1c00f15d3956dbd21adb3a9c82c223e (diff) | |
| download | coinos-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.js | 89 |
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); |
