aboutsummaryrefslogtreecommitdiffstats
path: root/routes/bitcoin/sweep.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-01-08 21:05:34 -0800
committerAdam Soltys <[email protected]>2023-01-08 21:05:34 -0800
commitdce07aa93b3c2f47aca0c24cea6adde9ec37f1a7 (patch)
tree6c6b8930ebe9c2cc5b8d1f759e61260f509fdd7a /routes/bitcoin/sweep.js
parentf7b844883506a8072213245b9b8a2b988694e4f5 (diff)
downloadcoinos-server-dce07aa93b3c2f47aca0c24cea6adde9ec37f1a7.tar.gz
coinos-server-dce07aa93b3c2f47aca0c24cea6adde9ec37f1a7.zip
tech debt jubilee
Diffstat (limited to 'routes/bitcoin/sweep.js')
-rw-r--r--routes/bitcoin/sweep.js87
1 files changed, 0 insertions, 87 deletions
diff --git a/routes/bitcoin/sweep.js b/routes/bitcoin/sweep.js
deleted file mode 100644
index 49fb1f04..00000000
--- a/routes/bitcoin/sweep.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import config from "$config";
-import { prod } from "$lib/utils";
-import axios from "axios";
-import bitcoin from "bitcoinjs-lib";
-import coinselect from "coinselect";
-import split from "coinselect/split";
-
-const api = prod ? "https://blockstream.info/api" : config.bitcoin.electrs;
-const SATS = 100000000;
-const network = prod
- ? bitcoin.networks["bitcoin"]
- : bitcoin.networks["regtest"];
-
-export default async (req, res) => {
- let { address: from, amount, feeRate, target } = req.body;
- let utxos;
- if (!feeRate) feeRate = (await bc.estimateSmartFee(6)).feerate * SATS;
- feeRate = Math.round(feeRate / 1000);
- l("sweeping", req.user.username, from, amount, feeRate);
-
- try {
- let {
- data: {
- chain_stats: { funded_txo_sum: funded, spent_txo_sum: spent }
- }
- } = await axios.get(`${api}/address/${from}`);
- let balance = funded - spent;
- console.log("boom");
-
- try {
- console.log("fetching utxo");
- ({ data: utxos } = await axios.get(`${api}/address/${from}/utxo`));
- console.log("got utxos", utxos);
- } catch (e) {
- err("problem fetching utxos", e.message);
- }
-
- let targets = [
- {
- address: target,
- value: amount
- }
- ];
-
- let { inputs, outputs, fee } = coinselect(utxos, targets, feeRate);
-
- if (balance === amount) {
- delete targets[0].value;
- ({ inputs, outputs, fee } = split(utxos, targets, feeRate));
- l("split", inputs, outputs, fee);
- }
-
- if (!inputs || !outputs)
- return res
- .code(500)
- .send("Unable to construct sweep transaction, try a lower fee rate?");
-
- let psbt = new bitcoin.Psbt({ network });
- let total = 0;
-
- outputs.map(({ address, value }) => {
- total += value;
- psbt = psbt.addOutput({
- address: address || from,
- value
- });
- });
-
- for (let i = 0; i < inputs.length; i++) {
- let { txid, vout } = inputs[i];
- let nonWitnessUtxo = Buffer.from(await bc.getRawTransaction(txid), "hex");
- psbt = psbt.addInput({
- hash: txid,
- index: vout,
- nonWitnessUtxo
- });
- }
-
- feeRate = Math.round(feeRate * 1000);
- psbt = psbt.toBase64();
-
- if (balance !== amount) total = 0;
- res.send({ feeRate, psbt, total });
- } catch (e) {
- err("problem getting address stats", from, e.message);
- }
-};