aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/samples/index.sample.js22
-rw-r--r--config/samples/lnurl.sample.js17
-rw-r--r--routes/swaps.js307
3 files changed, 174 insertions, 172 deletions
diff --git a/config/samples/index.sample.js b/config/samples/index.sample.js
index aef2c1be..9ab7f42a 100644
--- a/config/samples/index.sample.js
+++ b/config/samples/index.sample.js
@@ -7,6 +7,10 @@ try {
l.warn("lnurl config not found");
}
+const btcasset = "5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225";
+const cadasset = "e749f7326d0ba155ec1d878e23458bc3f740a38bf91bbce955945ee10d6ab523";
+const usdtasset = "4dddd1d0d0beeaee17df7722b512906cc5bc660c81225083b72b05820ecd3d91";
+
module.exports = {
lnurl,
clientVersion: "x11111xx11xx11x11x11111111xx1111111xx111",
@@ -25,6 +29,7 @@ module.exports = {
specialFriend: '10102176487832944',
},
bitcoin: {
+ masterkey: 'tprv8ZgxMBicQKsPfBhnpvyFH3PxL7sWhT3bVzk4WE77QRoARn2xxzisfQph34Vv25RnJ5kpoDZunJvy7dSGSSRBkTDkqqVH12W8ikKtWfyj1zw', // get from bitcoin-cli dumpwallet "walletfile"
username: "user",
password: "password",
network: "regtest",
@@ -33,6 +38,9 @@ module.exports = {
zmqrawtx: "tcp://127.0.0.1:18507"
},
liquid: {
+ masterkey: 'tprv8ZgxMBicQKsPe2qXQ8U9qMQKGE5M3qTKbacCG5nrjsBYCB4AbNeRiJR2rPm86S7UoVLd9ubEmHSVtnZqSrJc76BzKrkhuiPYReNWiFzWWVR', // get from elements-cli dumpwallet "walletfile"
+ blindkey: '0e66557c1dfa0c7daa371314ffd763979d3f7c5db69380e5c15ea72b85453c2e',
+ wallet: "coinos",
username: "user",
password: "password",
network: "regtest",
@@ -46,4 +54,18 @@ module.exports = {
tls: '/home/user/.lnd.testa/tls.cert',
macaroon: '/home/user/.lnd.testa/data/chain/bitcoin/testnet/admin.macaroon',
},
+ maker: [ // special account with username "maker" places orders on the exchange
+ {
+ c1: btcasset,
+ c2: cadasset,
+ currency: "CAD".
+ amount: 0.001,
+ },
+ {
+ c1: btcasset,
+ c2: usdtasset,
+ currency: 'USD',
+ amount: 0.001,
+ }
+ ],
}
diff --git a/config/samples/lnurl.sample.js b/config/samples/lnurl.sample.js
index d4cfe410..6de87c11 100644
--- a/config/samples/lnurl.sample.js
+++ b/config/samples/lnurl.sample.js
@@ -19,16 +19,13 @@ module.exports = {
macaroon: "/home/user/.lnd.sima/data/chain/bitcoin/regtest/admin.macaroon"
}
},
- store: {
- backend: "knex",
+ store: {
+ backend: 'knex',
config: {
- client: "mysql",
+ client: 'sqlite3',
connection: {
- host: "localhost",
- user: "root",
- password: "password",
- database: "coinos"
- }
- }
- }
+ filename: './lnurl-server.sqlite3',
+ },
+ },
+ },
};
diff --git a/routes/swaps.js b/routes/swaps.js
index 2fbe10c1..feaa2ad2 100644
--- a/routes/swaps.js
+++ b/routes/swaps.js
@@ -755,80 +755,25 @@ app.post(
})
);
-[
- /*
- {
- c1: config.liquid.btcasset,
- c2: config.liquid.cadasset,
- currency: "CAD"
- },
- {
- c1: config.liquid.btcasset,
- c2: config.liquid.usdtasset,
- currency: 'USD',
- }
- */
-].map(({ c1, c2, currency }) => {
- setInterval(async () => {
- if (!app.get("rates")) return;
- const amount =
- {
- [config.liquid.cadasset]: 0.01,
- [config.liquid.usdtasset]: 0.0001,
- }[c2];
-
- const user = await db.User.findOne({
- where: {
- username: "maker"
- }
- });
+if (config.maker)
+ config.maker.map(({ amount, c1, c2, currency }) => {
+ setInterval(async () => {
+ if (!app.get("rates")) return;
- await db.transaction(async transaction => {
- let order = await db.Order.findOne(
- {
- where: {
- user_id: user.id,
- "$acc1.asset$": c1,
- "$acc2.asset$": c2,
- accepted: false
- },
- include: [
- {
- model: db.Account,
- as: "acc1"
- },
- {
- model: db.Account,
- as: "acc2"
- }
- ]
- },
- { transaction }
- );
-
- let params = {
- a1: c1,
- a2: c2,
- v1: amount * SATS,
- v2: Math.round(
- amount *
- SATS *
- (((app.get("ask") * app.get("rates")[currency]) /
- app.get("rates")["USD"]) *
- 1.01)
- )
- };
+ const user = await db.User.findOne({
+ where: {
+ username: "maker"
+ }
+ });
- if (order) {
- let bestBid = await db.Order.findOne(
+ await db.transaction(async transaction => {
+ let order = await db.Order.findOne(
{
where: {
- "$acc1.asset$": c2,
- "$acc2.asset$": c1,
- accepted: false,
- id: {
- [Op.ne]: order.id
- }
+ user_id: user.id,
+ "$acc1.asset$": c1,
+ "$acc2.asset$": c2,
+ accepted: false
},
include: [
{
@@ -839,80 +784,80 @@ app.post(
model: db.Account,
as: "acc2"
}
- ],
- order: [["rate", "DESC"]],
- limit: 1
+ ]
},
{ transaction }
);
- if (
- !bestBid ||
- (params.v2 / params.v1 > bestBid.rate &&
- order.acc2.balance >= params.v2)
- ) {
- order.v1 = params.v1;
- order.v2 = params.v2;
- await order.save();
- order = order.get({ plain: true });
- order.a1 = params.a1;
- order.a2 = params.a2;
- order.rate = order.v2 / order.v1;
- broadcast("order", shallow(order));
- }
- } else {
- try {
- await swap(user, params);
- } catch (e) {
- l.warn("Failed to make ask", e.message);
- }
- }
+ let params = {
+ a1: c1,
+ a2: c2,
+ v1: amount * SATS,
+ v2: Math.round(
+ amount *
+ SATS *
+ (((app.get("ask") * app.get("rates")[currency]) /
+ app.get("rates")["USD"]) *
+ 1.01)
+ )
+ };
- order = await db.Order.findOne(
- {
- where: {
- user_id: user.id,
- "$acc1.asset$": c2,
- "$acc2.asset$": c1,
- accepted: false
- },
- include: [
+ if (order) {
+ let bestBid = await db.Order.findOne(
{
- model: db.Account,
- as: "acc1"
+ where: {
+ "$acc1.asset$": c2,
+ "$acc2.asset$": c1,
+ accepted: false,
+ id: {
+ [Op.ne]: order.id
+ }
+ },
+ include: [
+ {
+ model: db.Account,
+ as: "acc1"
+ },
+ {
+ model: db.Account,
+ as: "acc2"
+ }
+ ],
+ order: [["rate", "DESC"]],
+ limit: 1
},
- {
- model: db.Account,
- as: "acc2"
- }
- ]
- },
- { transaction }
- );
+ { transaction }
+ );
+ if (
+ !bestBid ||
+ (params.v2 / params.v1 > bestBid.rate &&
+ order.acc2.balance >= params.v2)
+ ) {
+ order.v1 = params.v1;
+ order.v2 = params.v2;
+ await order.save();
+ order = order.get({ plain: true });
+ order.a1 = params.a1;
+ order.a2 = params.a2;
+ order.rate = order.v2 / order.v1;
- params = {
- a1: c2,
- a2: c1,
- v1: Math.round(
- amount *
- SATS *
- ((app.get("bid") * app.get("rates")[currency]) /
- app.get("rates")["USD"]) *
- 0.99
- ),
- v2: amount * SATS
- };
+ broadcast("order", shallow(order));
+ }
+ } else {
+ try {
+ await swap(user, params);
+ } catch (e) {
+ l.warn("Failed to make ask", e.message);
+ }
+ }
- if (order) {
- let bestAsk = await db.Order.findOne(
+ order = await db.Order.findOne(
{
where: {
- "$acc1.asset$": c1,
- "$acc2.asset$": c2,
- accepted: false,
- id: {
- [Op.ne]: order.id
- }
+ user_id: user.id,
+ "$acc1.asset$": c2,
+ "$acc2.asset$": c1,
+ accepted: false
},
include: [
{
@@ -923,39 +868,77 @@ app.post(
model: db.Account,
as: "acc2"
}
- ],
- order: [["rate", "ASC"]],
- limit: 1
+ ]
},
{ transaction }
);
- if (bestAsk)
- if (
- !bestAsk ||
- (params.v1 / params.v2 < bestAsk.rate &&
- order.acc1.balance >= params.v1)
- ) {
- order.v1 = params.v1;
- order.v2 = params.v2;
- await order.save();
- order = order.get({ plain: true });
- order.a1 = params.a1;
- order.a2 = params.a2;
- order.rate = order.v2 / order.v1;
+ params = {
+ a1: c2,
+ a2: c1,
+ v1: Math.round(
+ amount *
+ SATS *
+ ((app.get("bid") * app.get("rates")[currency]) /
+ app.get("rates")["USD"]) *
+ 0.99
+ ),
+ v2: amount * SATS
+ };
+
+ if (order) {
+ let bestAsk = await db.Order.findOne(
+ {
+ where: {
+ "$acc1.asset$": c1,
+ "$acc2.asset$": c2,
+ accepted: false,
+ id: {
+ [Op.ne]: order.id
+ }
+ },
+ include: [
+ {
+ model: db.Account,
+ as: "acc1"
+ },
+ {
+ model: db.Account,
+ as: "acc2"
+ }
+ ],
+ order: [["rate", "ASC"]],
+ limit: 1
+ },
+ { transaction }
+ );
+
+ if (bestAsk)
+ if (
+ !bestAsk ||
+ (params.v1 / params.v2 < bestAsk.rate &&
+ order.acc1.balance >= params.v1)
+ ) {
+ order.v1 = params.v1;
+ order.v2 = params.v2;
+ await order.save();
+ order = order.get({ plain: true });
+ order.a1 = params.a1;
+ order.a2 = params.a2;
+ order.rate = order.v2 / order.v1;
- broadcast("order", shallow(order));
+ broadcast("order", shallow(order));
+ } else {
+ broadcast("removeOrder", order.id);
+ await order.destroy({ transaction });
+ }
} else {
- broadcast("removeOrder", order.id);
- await order.destroy({ transaction });
- }
- } else {
- try {
- await swap(user, params);
- } catch (e) {
- l.warn("Failed to make bid", e.message);
+ try {
+ await swap(user, params);
+ } catch (e) {
+ l.warn("Failed to make bid", e.message);
+ }
}
- }
- });
- }, 5000);
-});
+ });
+ }, 5000);
+ });