From 49ea9a18972f4847fc13c0f7af9b40c62cfc3d5a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sat, 29 Feb 2020 17:59:06 -0500 Subject: lnrpc woes --- package.json | 5 +++ queryRoutes.js | 22 +++++++++++-- sendPayment.js | 102 +++++++++++++++++++++++++++++++++------------------------ users.js | 2 +- yarn.lock | 3 ++ 5 files changed, 88 insertions(+), 46 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); - - let total = parseInt(m.payment_route.total_amt); - let fee = m.payment_route.total_fees; - - user.balance -= total - payreq.satoshis; - - 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 } - ); - - 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, {}); - - /* eslint-disable-next-line */ - let { payment_request } = invoice; - /* eslint-disable-next-line */ - payback.write({ payment_request }); - } - - seen.push(hash); - res.send(payment); + }, 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; + + user.balance -= total - payreq.satoshis; + + 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 } + ); + + 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, {}); + + /* eslint-disable-next-line */ + let { payment_request } = invoice; + /* eslint-disable-next-line */ + payback.write({ payment_request }); + } + + 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 -- cgit v1.2.3