From 3a4230f479b085bc88a727db8e63032d68c1f185 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Sun, 20 Dec 2020 21:14:08 -0600 Subject: [PATCH] Add option to create PTLC invoice with secret private key. (#1) --- .../fr/acinq/eclair/payment/receive/MultiPartHandler.scala | 4 ++-- .../scala/fr/acinq/eclair/payment/send/PaymentLifecycle.scala | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/payment/receive/MultiPartHandler.scala b/eclair-core/src/main/scala/fr/acinq/eclair/payment/receive/MultiPartHandler.scala index 4089036200..de2688c5da 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/payment/receive/MultiPartHandler.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/payment/receive/MultiPartHandler.scala @@ -67,9 +67,9 @@ class MultiPartHandler(nodeParams: NodeParams, register: ActorRef, db: IncomingP Some(PaymentRequest.PaymentRequestFeatures(f1 ++ f2 ++ f3: _*)) } val (paymentPreimage, paymentRequest) = if (allowPTLC) { - val paymentScalar = randomKey + val paymentPreimage = paymentPreimage_opt.getOrElse(randomKey.value) + val paymentScalar = PrivateKey(paymentPreimage) val paymentPoint = paymentScalar.publicKey - val paymentPreimage = paymentScalar.value (paymentPreimage, PaymentRequest(nodeParams.chainHash, amount_opt, paymentPoint, nodeParams.privateKey, desc, nodeParams.minFinalExpiryDelta, fallbackAddress_opt, expirySeconds = Some(expirySeconds), extraHops = extraHops, features = features)) } else { val paymentPreimage = paymentPreimage_opt.getOrElse(randomBytes32) diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/payment/send/PaymentLifecycle.scala b/eclair-core/src/main/scala/fr/acinq/eclair/payment/send/PaymentLifecycle.scala index 2fca8aead2..c3d5a862f5 100644 --- a/eclair-core/src/main/scala/fr/acinq/eclair/payment/send/PaymentLifecycle.scala +++ b/eclair-core/src/main/scala/fr/acinq/eclair/payment/send/PaymentLifecycle.scala @@ -146,6 +146,7 @@ class PaymentLifecycle(nodeParams: NodeParams, cfg: SendPaymentConfig, router: A case Event(RES_ADD_SETTLED(_, ptlc: UpdateAddPtlc, fulfill: HtlcResult.FulfillPtlc), d: WaitingForComplete) => Metrics.PaymentAttempt.withTag(Tags.MultiPart, value = false).record(d.failures.size + 1) val p = PartialPayment(id, d.c.finalPayload.amount, d.cmd.amount - d.c.finalPayload.amount, ptlc.channelId, Some(cfg.fullRoute(d.route))) + log.info(s"Add settled PTLC with preimage=${fulfill.paymentPreimage.value}.") onSuccess(d.c.replyTo, cfg.createPaymentSent(fulfill.paymentPreimage.value, p :: Nil)) myStop()