aboutsummaryrefslogtreecommitdiffstats
path: root/sendPayment.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2020-02-29 17:59:06 -0500
committerAdam Soltys <[email protected]>2020-02-29 17:59:06 -0500
commit49ea9a18972f4847fc13c0f7af9b40c62cfc3d5a (patch)
tree13a7fd6f9174adb2d8b64ce2179844d7a62b9615 /sendPayment.js
parent77158ce5f155b90a67c28489202330cef5efd1f4 (diff)
downloadcoinos-server-49ea9a18972f4847fc13c0f7af9b40c62cfc3d5a.tar.gz
coinos-server-49ea9a18972f4847fc13c0f7af9b40c62cfc3d5a.zip
lnrpc woes
Diffstat (limited to 'sendPayment.js')
-rw-r--r--sendPayment.js86
1 files changed, 51 insertions, 35 deletions
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);