From 4f25e328965e8079327600c14e3d5f27a2a42ca4 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 21 May 2020 20:26:14 -0700 Subject: create raw transaction --- package.json | 5 +++ routes/liquid/fee.js | 111 ++++++++++++++++++++++++++++++-------------------- routes/liquid/send.js | 2 +- yarn.lock | 3 ++ 4 files changed, 75 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 04795fcc..045b9fcb 100644 --- a/package.json +++ b/package.json @@ -47,5 +47,10 @@ "pino-pretty": "^3.6.1", "pm2": "^4.4.0", "prettier": "^1.18.2" + }, + "dependenciesMeta": { + "bitcoin-core": { + "unplugged": true + } } } diff --git a/routes/liquid/fee.js b/routes/liquid/fee.js index 659d9a25..0e52bf1e 100644 --- a/routes/liquid/fee.js +++ b/routes/liquid/fee.js @@ -24,66 +24,87 @@ module.exports = async (req, res) => { if (feeRate) params.feeRate = (feeRate / SATS).toFixed(8); let info = await lq.getAddressInfo(address); - l.info(info); - tx = await lq.walletCreateFundedPsbt( + tx = await lq.createRawTransaction( [], { - [address]: value, + [address]: (amount / SATS).toFixed(8), }, 0, - params + false, + { + [address]: asset, + } ); - let decoded = await lq.decodePsbt(tx.psbt); - - let { - tx: { vin, vout }, - } = decoded; + tx = await lq.fundRawTransaction(tx, params); + + /* + let psbt; + if (asset === config.liquid.btcasset) { + psbt = await lq.convertToPsbt(tx.hex); + let decoded = await lq.decodePsbt(psbt); + + let { + tx: { vin, vout }, + } = decoded; + + let change, fee; + for (let i = 0; i < vout.length; i++) { + if (vout[i].scriptPubKey) { + if (vout[i].scriptPubKey.type === "fee") fee = vout.splice(i, 1)[0]; + else if ( + !vout[i].scriptPubKey.addresses.includes(info.unconfidential) + ) + change = vout[i]; + } + } - l.info(decoded); - let change, fee; - for (let i = 0; i < vout.length; i++) { - l.info("vout", vout[i]); - if (vout[i].scriptPubKey) { - if (vout[i].scriptPubKey.type === "fee") fee = vout.splice(i, 1)[0]; - else if (!(vout[i].scriptPubKey.addresses.includes(info.unconfidential))) - change = vout[i]; + if (!change) { + change = { + value: 0, + scriptPubKey: { + addresses: [ + (await lq.getAddressInfo(await lq.getNewAddress())) + .unconfidential, + ], + }, + }; } - } - if (!change) { - change = { - value: 0, - scriptPubKey: - { addresses: [(await lq.getAddressInfo(await lq.getNewAddress())).unconfidential] }, - } - } - - let psbt = await lq.createPsbt( - vin.map((input) => ({ - txid: input.txid, - vout: input.vout, - sequence: input.sequence, - })), - [ + psbt = await lq.createPsbt( + vin.map((input) => ({ + txid: input.txid, + vout: input.vout, + sequence: input.sequence, + })), + [ + { + [change.scriptPubKey.addresses[0]]: ( + change.value + fee.value + ).toFixed(8), + }, + { [address]: value }, + ], + 0, + false, { - [change.scriptPubKey.addresses[0]]: ( - change.value + fee.value - ).toFixed(8), - }, - { [address]: value }, - ] - ); + [address]: asset, + [change.scriptPubKey.addresses[0]]: asset, + fee: config.liquid.btcasset, + } + ); + } + */ - let blinded = await lq.blindPsbt(tx.psbt); - let signed = await lq.walletSignPsbt(blinded); + let blinded = await lq.blindRawTransaction(tx.hex); + let signed = await lq.signRawTransaction(blinded); - decoded = await lq.decodePsbt(signed.psbt); - feeRate = Math.round((decoded.fees.bitcoin * SATS * 1000) / decoded.tx.vsize); + decoded = await lq.decodeRawTransaction(signed.hex); + feeRate = Math.round((tx.fee * SATS * 1000) / decoded.vsize); l.info("estimated", asset, feeRate); - res.send({ feeRate, tx, psbt }); + res.send({ feeRate, tx, /* psbt */ }); } catch (e) { l.error("error estimating liquid fee", e.message); return res.status(500).send(e.message); diff --git a/routes/liquid/send.js b/routes/liquid/send.js index 89e9d8b7..a0d2c232 100644 --- a/routes/liquid/send.js +++ b/routes/liquid/send.js @@ -9,7 +9,7 @@ module.exports = async (req, res) => { const isChange = async address => (await lq.getAddressInfo(address)).ismine && - (!Object.keys(addresses).includes(address) || address === user.liquid); + (!Object.keys(addresses).includes(address) || address === user.liquid || address === user.confidential); let decoded = await lq.decodePsbt(psbt); diff --git a/yarn.lock b/yarn.lock index e1d14e67..ad64b94c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1352,6 +1352,9 @@ __metadata: uuid: ^3.3.2 ws: ^7.1.2 zeromq: ^5.1.0 + dependenciesMeta: + bitcoin-core: + unplugged: true languageName: unknown linkType: soft -- cgit v1.2.3