aboutsummaryrefslogtreecommitdiffstats
path: root/routes
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-05-21 13:09:12 -0700
committerAdam Soltys <[email protected]>2020-05-21 13:09:17 -0700
commit388c1b518f0f237d777ec010f294ee580024c22d (patch)
tree7b34fa75da606fb812f99b3db9064aba3469cb6c /routes
parent52baac0211ef1bbf9a2c1a40f485e5f72c19e46d (diff)
downloadcoinos-server-388c1b518f0f237d777ec010f294ee580024c22d.tar.gz
coinos-server-388c1b518f0f237d777ec010f294ee580024c22d.zip
export psbt with no fee
Diffstat (limited to 'routes')
-rw-r--r--routes/liquid/fee.js67
-rw-r--r--routes/liquid/send.js5
2 files changed, 50 insertions, 22 deletions
diff --git a/routes/liquid/fee.js b/routes/liquid/fee.js
index d43e6e9d..24e6ff73 100644
--- a/routes/liquid/fee.js
+++ b/routes/liquid/fee.js
@@ -11,39 +11,68 @@ module.exports = async (req, res) => {
if (recipient) emit(user.username, "to", recipient);
try {
+ if (config.liquid.walletpass)
+ await lq.walletPassphrase(config.liquid.walletpass, 300);
+
amount = parseInt(amount);
- tx = await lq.createRawTransaction(
+ let params = {
+ subtractFeeFromOutputs: amount === user.balance ? [0] : [],
+ };
+
+ let value = (amount / SATS).toFixed(8);
+ if (feeRate) params.feeRate = (feeRate / SATS).toFixed(8);
+
+ let info = await lq.getAddressInfo(address);
+
+ tx = await lq.walletCreateFundedPsbt(
[],
{
- [address]: (amount / SATS).toFixed(8)
+ [address]: value,
},
0,
- false,
- {
- [address]: asset,
- }
+ params
);
- let params = {
- subtractFeeFromOutputs: amount === user.balance ? [0] : [],
- };
+ let decoded = await lq.decodePsbt(tx.psbt);
- if (feeRate) params.feeRate = (feeRate / SATS).toFixed(8);
+ let {
+ tx: { vin, vout },
+ } = decoded;
- tx = await lq.fundRawTransaction(tx, params);
+ 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];
+ }
+ }
- if (config.liquid.walletpass)
- await lq.walletPassphrase(config.liquid.walletpass, 300);
+ let 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 },
+ ]
+ );
- 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);
+ let blinded = await lq.blindPsbt(tx.psbt);
+ let signed = await lq.walletSignPsbt(blinded);
- l.info("estimated", asset);
+ decoded = await lq.decodePsbt(signed.psbt);
+ feeRate = Math.round((decoded.fees * SATS * 1000) / decoded.vsize);
+ l.info("estimated", asset, feeRate );
- res.send({ feeRate, tx });
+ 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 5bfea060..aa2763d1 100644
--- a/routes/liquid/send.js
+++ b/routes/liquid/send.js
@@ -4,15 +4,14 @@ module.exports = async (req, res) => {
let { user } = req;
let {
address,
- tx: { hex }
+ tx: { psbt }
} = req.body;
const isChange = async address =>
(await lq.getAddressInfo(address)).ismine &&
(!Object.keys(addresses).includes(address) || address === user.liquid);
- const unblinded = await lq.unblindRawTransaction(hex);
- tx = await lq.decodeRawTransaction(unblinded.hex);
+ tx = await lq.decodePsbt(psbt);
let totals = {};
let change = {};