aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json5
-rw-r--r--queryRoutes.js22
-rw-r--r--sendPayment.js86
-rw-r--r--users.js2
-rw-r--r--yarn.lock3
5 files changed, 80 insertions, 38 deletions
diff --git a/package.json b/package.json
index d558f398..89aa56c0 100644
--- a/package.json
+++ b/package.json
@@ -62,5 +62,10 @@
"pm2": "^4.2.3",
"prettier": "^1.18.2",
"sequelize-automate": "^1.1.1"
+ },
+ "dependenciesMeta": {
+ "lnrpc": {
+ "unplugged": true
+ }
}
}
diff --git a/queryRoutes.js b/queryRoutes.js
index 068027e7..43079819 100644
--- a/queryRoutes.js
+++ b/queryRoutes.js
@@ -1,11 +1,29 @@
const bolt11 = require("bolt11");
const config = require("./config");
+var fs = require('fs');
+var grpc = require('grpc');
+var lnrpc = grpc.load('/root/grpc/rpc.proto').lnrpc;
+process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA'
+var lndCert = fs.readFileSync('/root/.lnda/tls.cert');
+var sslCreds = grpc.credentials.createSsl(lndCert);
+var macaroonCreds = grpc.credentials.createFromMetadataGenerator(function(args, callback) {
+ var macaroon = fs.readFileSync("/root/.lnda/data/chain/bitcoin/mainnet/admin.macaroon").toString('hex');
+ var metadata = new grpc.Metadata()
+ metadata.add('macaroon', macaroon);
+ callback(null, metadata);
+ });
+var creds = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);
+var lightning = new lnrpc.Lightning('localhost:10001', creds);
+
+
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);
- const routes = await lna.queryRoutes({ "pub_key": payreq.payeeNodeKey, "amt": payreq.satoshis });
- res.send(routes);
+ const request = { "pub_key": payreq.payeeNodeKey, "amt": payreq.satoshis };
+ lightning.queryRoutes(request, function(err, response) {
+ res.send(response);
+ })
};
diff --git a/sendPayment.js b/sendPayment.js
index 1bc8b99a..ef90f8bb 100644
--- a/sendPayment.js
+++ b/sendPayment.js
@@ -3,6 +3,21 @@ const config = require("./config");
const l = console.log;
+var fs = require('fs');
+var grpc = require('grpc');
+var lnrpc = grpc.load('/root/grpc/rpc.proto').lnrpc;
+process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA'
+var lndCert = fs.readFileSync('/root/.lnda/tls.cert');
+var sslCreds = grpc.credentials.createSsl(lndCert);
+var macaroonCreds = grpc.credentials.createFromMetadataGenerator(function(args, callback) {
+ var macaroon = fs.readFileSync("/root/.lnda/data/chain/bitcoin/mainnet/admin.macaroon").toString('hex');
+ var metadata = new grpc.Metadata()
+ metadata.add('macaroon', macaroon);
+ callback(null, metadata);
+ });
+var creds = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);
+var lightning = new lnrpc.Lightning('localhost:10001', creds);
+
module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
let hash = req.body.payreq;
let payreq = bolt11.decode(hash);
@@ -40,51 +55,52 @@ module.exports = (app, db, emit, seen, lna, lnb) => async (req, res) => {
let m;
try {
let paymentHash = payreq.tags.find(t => t.tagName === 'payment_hash').data;
- m = await lna.sendToRouteSync({
+ m = lightning.sendToRouteSync({
"payment_hash": Buffer.from(paymentHash, 'hex'),
route
- });
-
- if (seen.includes(m.payment_preimage)) return;
- seen.push(m.payment_preimage);
+ }, async function(err, m) {
+ if (m.payment_error) return res.status(500).send(m.payment_error);
+ 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 total = parseInt(m.payment_route.total_amt);
+ let fee = m.payment_route.total_fees;
- user.balance -= total - payreq.satoshis;
+ user.balance -= total - payreq.satoshis;
- await db.transaction(async transaction => {
- await user.save({ transaction });
+ await db.transaction(async transaction => {
+ await user.save({ transaction });
- 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 }
- );
+ 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 }
+ );
- emit(user.username, "payment", payment);
- emit(user.username, "user", user);
+ emit(user.username, "payment", payment);
+ emit(user.username, "user", user);
- if (payreq.payeeNodeKey === config.lnb.id) {
- let invoice = await lna.addInvoice({ value: payreq.satoshis });
- let payback = lnb.sendPayment(lnb.meta, {});
+ if (payreq.payeeNodeKey === config.lnb.id) {
+ let invoice = await lna.addInvoice({ value: payreq.satoshis });
+ let payback = lnb.sendPayment(lnb.meta, {});
- /* eslint-disable-next-line */
- let { payment_request } = invoice;
- /* eslint-disable-next-line */
- payback.write({ payment_request });
- }
+ /* eslint-disable-next-line */
+ let { payment_request } = invoice;
+ /* eslint-disable-next-line */
+ payback.write({ payment_request });
+ }
- seen.push(hash);
- res.send(payment);
+ seen.push(hash);
+ res.send(payment);
+ });
});
} catch (e) {
l(e);
diff --git a/users.js b/users.js
index 8575bf25..db2168c1 100644
--- a/users.js
+++ b/users.js
@@ -88,7 +88,7 @@ module.exports = (addresses, auth, app, bc, db, emit) => {
GB: "GBP"
};
- if (ip === "127.0.0.1") user.currency = "CAD";
+ if (ip.startsWith('127') || ip.startsWith('192')) user.currency = "CAD";
else {
let info = await axios.get(`http://api.ipstack.com/${ip}?access_key=${config.ipstack}`);
user.currency = countries[info.data.country_code] || "USD";
diff --git a/yarn.lock b/yarn.lock
index d2c1ce3a..2316b802 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1953,6 +1953,9 @@ __metadata:
uuid: ^3.3.2
ws: ^7.1.2
zeromq: ^5.1.0
+ dependenciesMeta:
+ lnrpc:
+ unplugged: true
languageName: unknown
linkType: soft