Hello Matt, can you clarify what you mean with this particular paragraph?:

But for some reason those pesky users keep wanting to use lightning for
> tips, or at least accept
> payment on their phones without keeping them unlocked with the lightning
> app open on the foreground
> 24/7.


So the use case here is more narrow? You mean that the recipient is a
mobile user that has his phone locked?
Just so I understand better what the problem is.


On Wed, 13 Oct 2021 at 12:44, Matt Corallo <lf-li...@mattcorallo.com> wrote:

> I'm sure most of y'all are familiar with this problem by now - a lightning
> user on a phone trying to
> pay another lightning user on a phone requires some amount of coordination
> to ensure the sender and
> recipient are, roughly, online at the same time.
>
> Invoices provide this somewhat today by requiring the recipient provide
> some live-ish data to the
> sender with their phone in their hand.
>
> But for some reason those pesky users keep wanting to use lightning for
> tips, or at least accept
> payment on their phones without keeping them unlocked with the lightning
> app open on the foreground
> 24/7.
>
> There's a few things live today which make progress towards this goal, but
> don't quite get there
> (and mostly aren't trying to solve this problem, but are worth mentioning):
>
>   * just have the recipient use a custodial product/run a full lightning
> node at home on an RPi.
>     Obviously this has some pretty substantial drawbacks, I'm not sure I
> even need to list them, but
> the "just require the recipient use a custodial service" is what Twitter
> ended up shipping with for
> lightning tipping, and we should all probably feel ashamed that they felt
> the need to do that.
>
>   * Blockstream Greenlight.
>     This change the online-requirements model - with the keys on your
> phone/elsewhere you still have
> to have your phone online with the same requirements as running a full
> lightning node. It just means
> fewer resources on that device.
>
>   * use keysend/AMP/whatever.
>     This is great for tips, but only half the story. Sender goes to send a
> keysend payment, gets to
> one hop before the recipient, and then a day later the recipient comes
> online to find the payment
> long-since timed out and failed backwards. Or you could use a long CLTV on
> the payment to make sure
> the recipient has time to claim it, which is basically a DoS on the
> lightning network's capacity,
> one that may eventually be fixed, breaking your payments, and which is
> just generally antisocial.
> Still, my understanding is some folks do this today cause its the only
> option for a mobile device.
>
>   * lnurl
>     ...is a great way to get an invoice, presumably from a trusted LSP for
> the recipient, trusting
> them to not give the same invoice twice, but doesn't help the recipient
> receive the payment, they
> still need to be online, unless...
>
>   * have a fully-trusted LSP that accepts payments and forwards them later
>     this is also fine, where its practical, I guess, but I'd hope we can
> do better. Worse, as far as
> I understand the places where this is practical are becoming fewer and
> fewer as the regulatory
> uncertainty clears and everyone realizes the regulatory overhead of this
> is...well you might as well
> start applying for that banking charter now.
>
>   * have an untrusted LSP that sends you a notification to open the app
> when a payment is received
>     Several lightning apps do this today, and its somewhat of a stop-gap
> but does help. On platforms
> where the app gets some meager CPU time in response to a notification,
> this can even fully solve the
> problem by claiming the HTLC in response to the notification pushed
> out-of-band. Sadly, the refrain
> I've heard repeatedly is, these days, on both Android and especially iOS,
> you can't even rely on a
> microsecond of CPU time in response to a notification. The OS fully
> expects your app to run code
> only when its on and in the foreground, unless you're a VoIP app you're
> screwed. Relying on the user
> to open the app immediately when they receive a notification is...fine, I
> guess, absent a better
> idea it seems like the best we've got today, but I'm not sure you'd find a
> UX designer who would
> *suggest* this :).
>
>
> But what would it take to do better? What follows is a simple straw-man,
> but something that's
> borderline practical today and may at least generate a few ideas. It comes
> in two variants
>
> If we accept the lnurl trust model of "a third-party I can give a list of
> pre-signed invoices, which
> I trust to never provide an invoice twice, but otherwise is untrusted",
> then we could do something
> like this:
>
> Step 1. Tipper gets an invoice from the lnurl endpoint they wish to pay,
> which contains some
> "recipient is behind an LSP and rarely online, act accordingly" flag.
>
> Step 2. Tipper sender sends a HTLC with a long CLTV timeout to their own
> LSP with instructions
> saying "when you get an onion message telling you nonce B, forward this
> HTLC, until then, just sit
> on it". The LSP accepts this HTLC but does not forward it and is generally
> okay with the long CLTV
> delta because it would otherwise just be the users' balance anyway - if
> they want to encumber their
> own funds forever, no harm done.
>    Note that if tipper is online regularly they can skip this step and
> move on.
>
> Step 3. The Tipper sends an onion message to recipient's LSP saying "hey,
> when recipient is online
> again, use the included reply path to send nonce B to my LSP".
>
> - sender can now safely go offline -
>
> Step 4. When the Recipient comes online, their LSP sends the reply to the
> Tipper's LSP,
>
> Step 5. causing the Tipper's LSP to (finally) forward the original HTLC,
> which the Recipient receives.
>
> You'll note that this solution, unlike simply sending a high-CLTV HTLC,
> does not encumber funds for
> any extended period of time except for the original sender, who wants to
> send the funds off
> elsewhere anyway. Nor does it rely on any parties who can at any point run
> away with the funds (or
> reasonably be construed as custodians for the funds). Further, this
> solution does not rely on the
> sender deanonymizing themselves to the recipient (or even informing the
> recipient who the senders'
> LSP is).
>
> Note that lnurl here could be replaced with BOLT 12 if BOLT 12 gets some
> flag indicating the Tipper
> should ask an LSP for the invoice.
>
> But, okay, so the lnurl model of a trusted party not reusing invoices so
> that the Recipient's LSP
> cannot just steal all funds after the first claim kinda really sucks, how
> do we do better?
>
> The Obvious (tm) solution here is PTLCs - just have the sender always add
> some random nonce * G to
> the PTLC they're paying and send the recipient a random nonce in the
> onion. I'd generally suggest we
> just go ahead and do this for every PTLC payment, cause why not? Now the
> sender and the lnurl
> endpoint have to collude to steal the funds, but, like, the sender could
> always just give the lnurl
> endpoint the money. I'd love suggestions for fixing this short of PTLCs,
> but its not immediately
> obvious to me that this is possible.
>
> Thanks to Steve for pushing on the "how does a let users get tips in
> lightning" issue, various
> people for giving him feedback and the relayed to me, AJ for the PTLC
> proposal, and Rusty for
> tireless drum-beating on onion messages and BOLT 12.
>
> Matt
> _______________________________________________
> Lightning-dev mailing list
> Lightning-dev@lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
>
_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to