From 4c51b9c966656fa9d61bcdb0abe565db97594b29 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 1 Mar 2022 11:13:07 -0600 Subject: [PATCH 1/3] Allow comments for LNURL-PAY invoices Allows senders to add a short message to payments, which will be stored as invoice memo by LND/LndHub. --- app/controllers/lnurlpay_controller.rb | 16 ++++++++++++++-- app/services/lndhub.rb | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/controllers/lnurlpay_controller.rb b/app/controllers/lnurlpay_controller.rb index f042919..067ba2b 100644 --- a/app/controllers/lnurlpay_controller.rb +++ b/app/controllers/lnurlpay_controller.rb @@ -3,6 +3,7 @@ class LnurlpayController < ApplicationController MIN_SATS = 100 MAX_SATS = 1_000_000 + MAX_COMMENT_CHARS = 100 def index render json: { @@ -12,22 +13,29 @@ class LnurlpayController < ApplicationController maxSendable: MAX_SATS * 1000, # msat minSendable: MIN_SATS * 1000, # msat metadata: metadata(@user.address), - commentAllowed: 0 + commentAllowed: MAX_COMMENT_CHARS } end def invoice amount = params[:amount].to_i / 1000 # msats address = params[:address] + comment = params[:comment] if !valid_amount?(amount) render json: { status: "ERROR", reason: "Invalid amount" } return end + if !valid_comment?(comment) + render json: { status: "ERROR", reason: "Comment too long" } + return + end + payment_request = @user.ln_create_invoice({ amount: amount, # we create invoices in sats - description_hash: Digest::SHA2.hexdigest(metadata(address)) + description_hash: Digest::SHA2.hexdigest(metadata(address)), + memo: comment }) render json: { @@ -57,4 +65,8 @@ class LnurlpayController < ApplicationController amount_in_sats <= MAX_SATS && amount_in_sats >= MIN_SATS end + def valid_comment?(comment) + comment.length <= MAX_COMMENT_CHARS + end + end diff --git a/app/services/lndhub.rb b/app/services/lndhub.rb index 5706148..15fae8e 100644 --- a/app/services/lndhub.rb +++ b/app/services/lndhub.rb @@ -49,7 +49,8 @@ class Lndhub def addinvoice(payload) invoice = post "addinvoice", { amt: payload[:amount], - description_hash: payload[:description_hash] + description_hash: payload[:description_hash], + memo: payload[:memo] } invoice["payment_request"] From 990368353685112871cdca88e390b304102dce02 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 1 Mar 2022 13:26:21 -0600 Subject: [PATCH 2/3] Remove desc hash, always add memo to invoices --- app/controllers/lnurlpay_controller.rb | 8 +++++--- app/services/lndhub.rb | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/controllers/lnurlpay_controller.rb b/app/controllers/lnurlpay_controller.rb index 067ba2b..3f0d67f 100644 --- a/app/controllers/lnurlpay_controller.rb +++ b/app/controllers/lnurlpay_controller.rb @@ -20,7 +20,7 @@ class LnurlpayController < ApplicationController def invoice amount = params[:amount].to_i / 1000 # msats address = params[:address] - comment = params[:comment] + comment = params[:comment] || "" if !valid_amount?(amount) render json: { status: "ERROR", reason: "Invalid amount" } @@ -32,10 +32,12 @@ class LnurlpayController < ApplicationController return end + memo = "Sats for #{address}" + memo = "#{memo}: \"#{comment}\"" if comment.present? + payment_request = @user.ln_create_invoice({ amount: amount, # we create invoices in sats - description_hash: Digest::SHA2.hexdigest(metadata(address)), - memo: comment + memo: memo }) render json: { diff --git a/app/services/lndhub.rb b/app/services/lndhub.rb index 15fae8e..ad606cc 100644 --- a/app/services/lndhub.rb +++ b/app/services/lndhub.rb @@ -49,7 +49,6 @@ class Lndhub def addinvoice(payload) invoice = post "addinvoice", { amt: payload[:amount], - description_hash: payload[:description_hash], memo: payload[:memo] } From 4c70600d1f1bd08b6a67e28489b8c506b3da12d0 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 1 Mar 2022 13:53:22 -0600 Subject: [PATCH 3/3] Re-add description_hash Necessary for lnurlpay-enabled wallets --- app/controllers/lnurlpay_controller.rb | 3 ++- app/services/lndhub.rb | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/lnurlpay_controller.rb b/app/controllers/lnurlpay_controller.rb index 3f0d67f..1ee4044 100644 --- a/app/controllers/lnurlpay_controller.rb +++ b/app/controllers/lnurlpay_controller.rb @@ -37,7 +37,8 @@ class LnurlpayController < ApplicationController payment_request = @user.ln_create_invoice({ amount: amount, # we create invoices in sats - memo: memo + memo: memo, + description_hash: Digest::SHA2.hexdigest(metadata(address)), }) render json: { diff --git a/app/services/lndhub.rb b/app/services/lndhub.rb index ad606cc..01f7abf 100644 --- a/app/services/lndhub.rb +++ b/app/services/lndhub.rb @@ -49,7 +49,8 @@ class Lndhub def addinvoice(payload) invoice = post "addinvoice", { amt: payload[:amount], - memo: payload[:memo] + memo: payload[:memo], + description_hash: payload[:description_hash] } invoice["payment_request"]