I'm currently in the process of building the Lightning Network payout
feature which will allow users to purchase bitcoins with fiat and have the
coins sent to the via LN rather than on-chain. The main issue I'm facing is
ensuring that recipients generate the correct Bolt11 invoice.

Having the "d" and "h" fields mandatory creates a UX issue for Bitcoin
services that are performing payouts/withdrawals (in the absence of a
widely adopted payment protocol).

It seems to me that the design of Bolt11 may have been biased towards
merchants, because normally merchants, as recipients, decide on what the
invoice is going to be and the sender doesn't have a choice but to conform
(since the recipient is the service provider).

But for LN payouts (e.g. withdrawal from an exchange or a poker site), the
Sender is the services provider, and it is the Sender who will be creating
(most likely programatically) the terms of the payment. However, this means
that the Sender must be able to communicate to his end-user exactly what
type of Bolt11 invoice he wants the user to create. This means, in most
cases, that the user will have to manually enter some fields in his wallet.
And if the content doesnt match, there will be a payment failure.

Here is how I picture the ux issues taking place.

   1. User goes on my app to buy Bitcoin with fiat, and opts to be paid out
   via LN rather than on-chain BTC.
   2. My app will tell him: "make an invoice with the following: msatoshi,
   3. He will go in his wallet and type msatoshi, description.
   4. It's likey he won't pay too much attention, make a typo in
   description, leave it blank, write his own description, etc.
   5. When my app tries to pay, we of course have to decode his bolt11
   6. We have to have some logic that will compare the "h" or "d" that we
   instructed him to create and the "h" or "d" that we got from the decoded
   bolt 11 (which is an extra hassle for devs)
   7. In the cases there they are not the same, we need to instruct the
   user to create a new bolt 11 invoice because the one he created was not

What this ends up doing is create a situation where the service provider
depends on his user to create a correct invoice before sending him the
funds, and creates an added (unecessary) requirement for communication, and
lower payment success rates, and likely higher abandonment rate.

Question: what is the logic behind making "d" and "h" mandatory? I think
business logic should be left to Bitcoin businesses.

Can we simply not make "d" or "h" mandatory without breaking anything?

TL;DR users already have troube entering the correct amount of BTC when
paying invoices that aren't BIP21, so I am afraid that there will be tons
of issues with them writing down the correct description.

P.s. I'm using c-lightning right now and would like to not have to switch

P.s.s. this will likely be fixed with a standardised payment protocol but
addressing this issue seems a lower hanging fruit.

Issue: https://github.com/lightningnetwork/lightning-rfc/issues/541

Thanks is for your time,

Lightning-dev mailing list

Reply via email to