aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-02-28 10:54:01 -0800
committerAdam Soltys <[email protected]>2020-02-28 10:54:01 -0800
commit24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22 (patch)
tree994cc84a61a11402ad909c96417f7ff304074f69
parent453856c0ae0124a3735b0204fd0a58f31bca8a0b (diff)
downloadcoinos-server-24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22.tar.gz
coinos-server-24cc1b02b768b21ff013b52cb5b4e9e4a3fe4a22.zip
query routes and send to route
-rw-r--r--lib/createLnrpc.js2
-rw-r--r--package.json2
-rw-r--r--payments.js5
-rw-r--r--queryRoutes.js12
-rw-r--r--sendLiquid.js2
-rw-r--r--sendPayment.js92
-rw-r--r--yarn.lock4
7 files changed, 67 insertions, 52 deletions
diff --git a/lib/createLnrpc.js b/lib/createLnrpc.js
index 661440bb..e32f6be3 100644
--- a/lib/createLnrpc.js
+++ b/lib/createLnrpc.js
@@ -23,7 +23,7 @@ module.exports = async ({ server, tls, macaroon, channelpeers }) => {
let fn;
if (streaming) {
- if (key === "sendPayment") {
+ if (key === "sendPayment" || key === "sendToRoute") {
fn = params => method.call(lnrpc, target.meta, params);
} else {
fn = params => method.call(lnrpc, params, target.meta);
diff --git a/package.json b/package.json
index c08f1a2d..d558f398 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"grpc": "^1.23.3",
"http-proxy-middleware": "^0.20.0",
"jsonwebtoken": "^8.5.1",
- "lnrpc": "^0.6.1",
+ "lnrpc": "^0.6.2",
"lodash": "^4.17.13",
"mailgun-js": "^0.22.0",
"moment": "^2.24.0",
diff --git a/payments.js b/payments.js
index 9866d244..d34b53f1 100644
--- a/payments.js
+++ b/payments.js
@@ -10,6 +10,11 @@ module.exports = async (app, auth, addresses, bc, db, emit, seen, payments) => {
require("./lightningPayments")(app, db, lna, lnb, emit, payments);
app.post(
+ "/queryRoutes",
+ auth,
+ require("./queryRoutes")(app, db, emit, seen, lna, lnb)
+ );
+ app.post(
"/sendPayment",
auth,
require("./sendPayment")(app, db, emit, seen, lna, lnb)
diff --git a/queryRoutes.js b/queryRoutes.js
new file mode 100644
index 00000000..0bdd76d7
--- /dev/null
+++ b/queryRoutes.js
@@ -0,0 +1,12 @@
+const bolt11 = require("bolt11");
+const config = require("./config");
+
+const l = console.log;
+
+module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
+ let hash = req.body.payreq;
+ let payreq = bolt11.decode(hash);
+ l(payreq);
+ const routes = await lna.queryRoutes({ "pub_key": payreq.payeeNodeKey, "amt": payreq.satoshis });
+ res.send(routes);
+};
diff --git a/sendLiquid.js b/sendLiquid.js
index b9261493..1008f014 100644
--- a/sendLiquid.js
+++ b/sendLiquid.js
@@ -59,7 +59,7 @@ module.exports = (app, db, emit) => async (req, res) => {
try {
if (config.liquid.walletpass)
- await bc.walletPassphrase(config.bitcoin.walletpass, 300);
+ await bc.walletPassphrase(config.liquid.walletpass, 300);
rawtx = (await bc.signRawTransactionWithWallet(hex)).hex;
let txid = await bc.sendRawTransaction(rawtx);
diff --git a/sendPayment.js b/sendPayment.js
index ff5b9609..1bc8b99a 100644
--- a/sendPayment.js
+++ b/sendPayment.js
@@ -6,6 +6,7 @@ const l = console.log;
module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
let hash = req.body.payreq;
let payreq = bolt11.decode(hash);
+ let { route } = req.body;
let { user } = req;
l("sending lightning", user.username, payreq.satoshis);
@@ -36,60 +37,57 @@ module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
return res.status(500).send("Not enough satoshis");
}
- const stream = lna.sendPayment(lna.meta, {});
- stream.write({ payment_request: req.body.payreq });
-
- stream.on("data", async m => {
- if (m.payment_error) {
- res.status(500).send(m.payment_error);
- } else {
- if (seen.includes(m.payment_preimage)) return;
- seen.push(m.payment_preimage);
-
- let total = parseInt(m.payment_route.total_amt);
- let fee = m.payment_route.total_fees;
+ let m;
+ try {
+ let paymentHash = payreq.tags.find(t => t.tagName === 'payment_hash').data;
+ m = await lna.sendToRouteSync({
+ "payment_hash": Buffer.from(paymentHash, 'hex'),
+ route
+ });
- user.balance -= total - payreq.satoshis;
+ if (seen.includes(m.payment_preimage)) return;
+ seen.push(m.payment_preimage);
- await db.transaction(async transaction => {
- await user.save({ transaction });
+ let total = parseInt(m.payment_route.total_amt);
+ let fee = m.payment_route.total_fees;
- const payment = await db.Payment.create(
- {
- amount: -total,
- fee,
- user_id: user.id,
- hash,
- rate: app.get("rates")[user.currency],
- currency: user.currency,
- confirmed: true,
- asset: 'LNBTC',
- },
- { transaction }
- );
+ user.balance -= total - payreq.satoshis;
- emit(user.username, "payment", payment);
- emit(user.username, "user", user);
+ await db.transaction(async transaction => {
+ await user.save({ transaction });
- if (payreq.payeeNodeKey === config.lnb.id) {
- let invoice = await lna.addInvoice({ value: payreq.satoshis });
- let payback = lnb.sendPayment(lnb.meta, {});
+ const payment = await db.Payment.create(
+ {
+ amount: -total,
+ fee,
+ user_id: user.id,
+ hash,
+ rate: app.get("rates")[user.currency],
+ currency: user.currency,
+ confirmed: true,
+ asset: 'LNBTC',
+ },
+ { transaction }
+ );
- /* eslint-disable-next-line */
- let { payment_request } = invoice;
- /* eslint-disable-next-line */
- payback.write({ payment_request });
- }
+ emit(user.username, "payment", payment);
+ emit(user.username, "user", user);
- seen.push(hash);
- res.send(payment);
- });
- }
- });
+ if (payreq.payeeNodeKey === config.lnb.id) {
+ let invoice = await lna.addInvoice({ value: payreq.satoshis });
+ let payback = lnb.sendPayment(lnb.meta, {});
- stream.on("error", e => {
- let msg = e.message;
+ /* eslint-disable-next-line */
+ let { payment_request } = invoice;
+ /* eslint-disable-next-line */
+ payback.write({ payment_request });
+ }
- res.status(500).send(msg);
- });
+ seen.push(hash);
+ res.send(payment);
+ });
+ } catch (e) {
+ l(e);
+ return res.status(500).send(e);
+ }
};
diff --git a/yarn.lock b/yarn.lock
index f67af1b9..d2c1ce3a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1925,7 +1925,7 @@ __metadata:
grpc: ^1.23.3
http-proxy-middleware: ^0.20.0
jsonwebtoken: ^8.5.1
- lnrpc: ^0.6.1
+ lnrpc: ^0.6.2
lodash: ^4.17.13
mailgun-js: ^0.22.0
moment: ^2.24.0
@@ -5019,7 +5019,7 @@ fsevents@~2.1.2:
languageName: node
linkType: hard
-"lnrpc@npm:^0.6.1":
+"lnrpc@npm:^0.6.2":
version: 0.6.2
resolution: "lnrpc@npm:0.6.2"
dependencies: