aboutsummaryrefslogtreecommitdiffstats
path: root/routes
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2021-06-02 12:47:29 -0700
committerAdam Soltys <[email protected]>2021-06-09 16:07:31 -0700
commit95b44666041ca5ad5b07a13a5c1a36e4bd596fe8 (patch)
treeeb274750d0cf8088965bf87d78f98b7cecf00078 /routes
parent8b51586af1d7ed02660df880587d574ee591f0e6 (diff)
downloadcoinos-server-95b44666041ca5ad5b07a13a5c1a36e4bd596fe8.tar.gz
coinos-server-95b44666041ca5ad5b07a13a5c1a36e4bd596fe8.zip
remove atomic swap code
Diffstat (limited to 'routes')
-rw-r--r--routes/swaps.js356
1 files changed, 0 insertions, 356 deletions
diff --git a/routes/swaps.js b/routes/swaps.js
index 9d0f9929..a220a1fc 100644
--- a/routes/swaps.js
+++ b/routes/swaps.js
@@ -1,9 +1,6 @@
const axios = require("axios");
const crypto = require("crypto");
-const level = require("level");
const fs = require("fs");
-const { spawn } = require("child_process");
-const leveldb = level("leveldb");
const getAccount = require("../lib/account");
const { Op, col } = require("sequelize");
const uuidv4 = require("uuid/v4");
@@ -23,105 +20,8 @@ const assets = {
"4eebe36eb0819e6daa5dd3c97733251ff4eb728c810d949365d6dacaad5ef6e8": "tether"
};
-const swapsdir = "swaps/";
-if (!fs.existsSync(swapsdir)) {
- fs.mkdirSync(swapsdir);
-}
-
const timeout = 20000;
-const cli = (...args) => {
- const params = ["--regtest", "-c", config.liquid.conf, ...args];
- if (config.liquid.network !== "regtest") params.shift();
- l.info("spawning liquidswap-cli with params:", params);
- return spawn("liquidswap-cli", params);
-};
-
-const getInfo = filename =>
- new Promise((resolve, reject) => {
- const proc = cli("info", swapsdir + filename);
-
- proc.stdout.on("data", data => {
- resolve(data.toString());
- });
-
- proc.stderr.on("data", err => {
- l.error("info error", err.toString());
- reject(err.toString());
- });
-
- proc.on("close", (code, signal) => {
- let msg = (code && code.toString()) || (signal && signal.toString());
- reject(new Error(`Liquid swap tool process closed unexpectedly: ${msg}`));
- });
-
- proc.on("exit", (code, signal) => {
- let msg = (code && code.toString()) || (signal && signal.toString());
- reject(new Error(`Liquid swap tool process exited unexpectedly: ${msg}`));
- });
-
- setTimeout(
- () => reject(new Error("Liquid swap tool timed out"), proc),
- timeout
- );
- });
-
-app.post(
- "/propose",
- auth,
- ah(async (req, res) => {
- const { a1, v1, a2, v2 } = req.body;
-
- const text = await new Promise((resolve, reject) => {
- l.info(
- "running liquid-cli tool %s %s %s %s %s",
- config.liquid.conf,
- a1,
- v1,
- a2,
- v2
- );
- const proc = cli(
- "propose",
- a1,
- (v1 / SATS).toFixed(8),
- a2,
- (v2 / SATS).toFixed(8)
- );
-
- proc.stdout.on("data", data => {
- resolve(data.toString());
- });
-
- proc.stderr.on("error", err => {
- l.error("order error", err.toString());
- reject(err.toString());
- });
-
- proc.on("close", (code, signal) => {
- let msg = (code && code.toString()) || (signal && signal.toString());
- reject(
- new Error(`Liquid swap tool process closed unexpectedly: ${msg}`)
- );
- });
-
- proc.on("exit", (code, signal) => {
- let msg = (code && code.toString()) || (signal && signal.toString());
- reject(
- new Error(`Liquid swap tool process exited unexpectedly: ${msg}`)
- );
- });
-
- setTimeout(
- () => reject(new Error("Liquid swap tool timed out"), proc),
- timeout
- );
- });
-
- res.send(text);
- })
-);
-
const swap = async (user, { a1, a2, v1, v2 }) => {
if (!parseInt(v1) || v1 < 0 || !parseInt(v2) || v2 < 0)
throw new Error("Invalid amount");
@@ -461,245 +361,6 @@ app.post(
})
);
-app.post(
- "/accept",
- optionalAuth,
- ah(async (req, res) => {
- try {
- const { text } = req.body;
- const { user } = req;
- const id = uuidv4();
-
- if (text) {
- const filename = `acceptance-${id}.txt`;
- fs.writeFileSync(swapsdir + filename, text);
-
- let info = JSON.parse(await getInfo(filename));
- let [fee, rate, asset] = parse(info);
- let { tx, u_address_p, u_address_r } = JSON.parse(
- Buffer.from(text, "base64").toString()
- );
- const sha256 = crypto.createHash("sha256");
- sha256.update(tx);
- const hash = sha256.digest("hex");
-
- const leg1 = info.legs.find(leg => !leg.incoming);
- const leg2 = info.legs.find(leg => leg.incoming);
-
- let orders = await db.Order.findAll({
- where: {
- rate: { [Op.lte]: leg2.amount / leg1.amount },
- accepted: false,
- "$acc1.asset$": leg1.asset,
- "$acc2.asset$": leg2.asset
- },
- attributes: {
- include: [
- [col("acc1.asset"), "a1"],
- [col("acc2.asset"), "a2"]
- ]
- },
- order: [["rate", "DESC"]],
- include: [
- {
- model: db.User,
- as: "user"
- },
- {
- model: db.Account,
- as: "acc1",
- attributes: []
- },
- {
- model: db.Account,
- as: "acc2",
- attributes: []
- }
- ]
- });
-
- let total = orders.reduce((a, b) => a + b.v1, 0);
- let remaining = Math.round(leg1.amount * SATS);
- if (total < remaining)
- throw new Error("Not enough coins for sale at that price");
-
- await db.transaction(async transaction => {
- for (let i = 0; i < orders.length; i++) {
- let order = orders[i];
- const account = await getAccount(
- leg1.asset,
- order.user,
- transaction
- );
-
- let { v1: amount } = order;
- if (remaining >= amount) {
- remaining -= amount;
-
- await db.Invoice.create({
- user_id: order.user_id,
- text: u_address_p,
- address: u_address_p,
- unconfidential: u_address_p,
- currency: order.user.currency,
- memo: "Atomic Swap",
- rate: app.get("rates")[order.user.currency],
- amount,
- tip: 0,
- network: "liquid",
- account_id: account.id
- });
-
- addresses[u_address_p] = order.user.username;
-
- order.accepted = true;
- order.completedAt = new Date();
- await order.save({ transaction });
-
- order = order.get({ plain: true });
- order.a1 = leg2.asset;
- order.a2 = leg1.asset;
- order.rate = order.v2 / order.v1;
-
- broadcast("order", shallow(order));
- } else {
- await db.Invoice.create({
- user_id: order.user_id,
- text: u_address_p,
- address: u_address_p,
- unconfidential: u_address_p,
- currency: order.user.currency,
- memo: "Atomic Swap",
- rate: app.get("rates")[order.user.currency],
- amount: remaining,
- tip: 0,
- network: "liquid",
- account_id: account.id
- });
-
- addresses[u_address_p] = order.user.username;
-
- order.decrement(
- {
- v1: remaining,
- v2: Math.round((order.v2 * remaining) / amount)
- },
- { transaction }
- );
- await order.save({ transaction });
- await order.reload({ transaction });
-
- order = order.get({ plain: true });
- order.a1 = leg2.asset;
- order.a2 = leg1.asset;
- order.rate = order.v2 / order.v1;
-
- broadcast("order", shallow(order));
- }
- }
-
- await finalize(filename);
- });
-
- res.send(info);
- } else {
- throw new Error("No acceptance provided");
- }
- } catch (e) {
- l.error(e.message, e.stack);
- res.status(500).send(e.message);
- }
- })
-);
-
-app.post(
- "/acceptance",
- ah(async (req, res) => {
- const { acceptance: text } = req.body;
- l.info("acceptance received");
-
- fs.writeFile(swapsdir + "accepted.txt", text, async err => {
- if (err) {
- return res.status(500).send(err);
- }
-
- try {
- let info = JSON.parse(
- await new Promise((resolve, reject) => {
- const proc = cli("info", swapsdir + "accepted.txt");
-
- proc.stdout.on("data", data => {
- resolve(data.toString());
- });
-
- proc.stderr.on("data", err => {
- reject(err.toString());
- });
-
- setTimeout(
- () => reject(new Error("Liquid swap tool timed out"), proc),
- timeout
- );
- })
- );
-
- const time = Math.floor(new Date()).toString();
- const [fee, rate, asset] = parse(info);
- if (!asset) throw new Error("Unsupported asset");
- l.info("accepted", info, rate, asset);
-
- leveldb.put(time, JSON.stringify({ text, info, rate, asset }));
- l.info({ text, info, rate, asset });
-
- res.send({ info, rate });
- } catch (e) {
- l.error(e);
- res.status(500).send(e.message);
- }
- });
- })
-);
-
-const parse = info => {
- const fee = info.legs[0].fee;
- return [
- fee,
- (info.legs[1].amount / (info.legs[0].amount + fee)).toFixed(8),
- assets[info.legs[0].asset]
- ];
-};
-
-const finalize = (filename = "finalized.txt", text) => {
- if (text) fs.writeFileSync(swapsdir + filename, text);
-
- return new Promise((resolve, reject) => {
- const proc = cli("finalize", swapsdir + filename, "-s");
-
- proc.stdout.on("data", data => {
- resolve(data.toString());
- });
-
- proc.stderr.on("data", err => {
- reject(new Error(err.toString()));
- });
-
- proc.on("close", (code, signal) => {
- let msg = (code && code.toString()) || (signal && signal.toString());
- reject(new Error(`Liquid swap tool process closed unexpectedly: ${msg}`));
- });
-
- proc.on("exit", (code, signal) => {
- let msg = (code && code.toString()) || (signal && signal.toString());
- reject(new Error(`Liquid swap tool process exited unexpectedly: ${msg}`));
- });
-
- setTimeout(
- () => reject(new Error("Liquid swap tool timed out"), proc),
- timeout
- );
- });
-};
-
app.get(
"/orders",
optionalAuth,
@@ -738,23 +399,6 @@ app.get(
})
);
-app.post(
- "/publish",
- auth,
- ah(async (req, res) => {
- try {
- const { id } = req.body;
- await db.Order.update(
- { public: true },
- { where: { id, user_id: req.user.id } }
- );
- res.end();
- } catch (e) {
- res.status(500).send(e.message);
- }
- })
-);
-
if (config.maker) {
debug('setup maker account...')
config.maker.map(({ amount, c1, c2, currency, askMultiplier, bidMultiplier }) => {