diff options
| author | Adam Soltys <[email protected]> | 2021-06-02 12:47:29 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2021-06-09 16:07:31 -0700 |
| commit | 95b44666041ca5ad5b07a13a5c1a36e4bd596fe8 (patch) | |
| tree | eb274750d0cf8088965bf87d78f98b7cecf00078 /routes | |
| parent | 8b51586af1d7ed02660df880587d574ee591f0e6 (diff) | |
| download | coinos-server-95b44666041ca5ad5b07a13a5c1a36e4bd596fe8.tar.gz coinos-server-95b44666041ca5ad5b07a13a5c1a36e4bd596fe8.zip | |
remove atomic swap code
Diffstat (limited to 'routes')
| -rw-r--r-- | routes/swaps.js | 356 |
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 }) => { |
