From 3ba8fb6dd44da2e2fee1e6923323f6926598803d Mon Sep 17 00:00:00 2001 From: benthecarman Date: Fri, 7 Jan 2022 09:56:40 -0600 Subject: [PATCH] Allow creating invoices with description hash (#3966) --- .../bitcoins/lnd/rpc/LndRpcClientTest.scala | 16 +++++++++++++ .../org/bitcoins/lnd/rpc/LndRpcClient.scala | 24 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/lnd-rpc-test/src/test/scala/org/bitcoins/lnd/rpc/LndRpcClientTest.scala b/lnd-rpc-test/src/test/scala/org/bitcoins/lnd/rpc/LndRpcClientTest.scala index 8514c5e5fc..b1d5d1fa69 100644 --- a/lnd-rpc-test/src/test/scala/org/bitcoins/lnd/rpc/LndRpcClientTest.scala +++ b/lnd-rpc-test/src/test/scala/org/bitcoins/lnd/rpc/LndRpcClientTest.scala @@ -5,6 +5,7 @@ import org.bitcoins.core.currency.Satoshis import org.bitcoins.core.protocol.ln.LnInvoice import org.bitcoins.core.protocol.ln.currency._ import org.bitcoins.core.protocol.script.P2WPKHWitnessSPKV0 +import org.bitcoins.crypto.CryptoUtil import org.bitcoins.testkit.fixtures.LndFixture import scala.concurrent.Future @@ -31,6 +32,21 @@ class LndRpcClientTest extends LndFixture { } } + it must "create an invoice using a description hash" in { lnd => + val memo = "this is my memo" + val hash = CryptoUtil.sha256(memo) + val amount = Satoshis(1000) + + for { + invoiceResult <- lnd.addInvoice(hash, amount, 1000) + } yield { + val invoice = invoiceResult.invoice + + assert(invoice.lnTags.descriptionHash.exists(_.hash == hash)) + assert(invoice.amount.map(_.toSatoshis).contains(amount)) + } + } + it must "create an invoice using msats" in { lnd => val memo = "this is my memo" val amount = MilliSatoshis(1000) diff --git a/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala b/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala index ef1aaf60cb..a01a1a22dc 100644 --- a/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala +++ b/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala @@ -195,6 +195,18 @@ class LndRpcClient(val instance: LndInstance, binaryOpt: Option[File] = None)( addInvoice(invoice) } + def addInvoice( + descriptionHash: Sha256Digest, + value: Satoshis, + expiry: Long): Future[AddInvoiceResult] = { + val invoice: Invoice = + Invoice(value = value.toLong, + expiry = expiry, + descriptionHash = descriptionHash.bytes) + + addInvoice(invoice) + } + def addInvoice( memo: String, value: MilliSatoshis, @@ -205,6 +217,18 @@ class LndRpcClient(val instance: LndInstance, binaryOpt: Option[File] = None)( addInvoice(invoice) } + def addInvoice( + descriptionHash: Sha256Digest, + value: MilliSatoshis, + expiry: Long): Future[AddInvoiceResult] = { + val invoice: Invoice = + Invoice(valueMsat = value.toLong, + expiry = expiry, + descriptionHash = descriptionHash.bytes) + + addInvoice(invoice) + } + def addInvoice(invoice: Invoice): Future[AddInvoiceResult] = { logger.trace("lnd calling addinvoice")