Add a new address type for lightning address (in valueRecipient) #576
Replies: 23 comments 55 replies
-
I like this implementation. Re additional HTTP requests, if that's really a huge problem, podcast players can cache the |
Beta Was this translation helpful? Give feedback.
-
This is less problematic than full LNurl which would require multiple http calls per wallet lookup. So that’s alright. Two things, however: 1). This introduces DNS into the mix, whereas pure node pub keys avoid that. For app devs that could now mean a new source of customer support requests if a payment fails because the podcaster’s wallet provider’s domain is blocked by a corporate firewall, pihole, etc. 2). Feeds with lots of splits will get even slower payments. Currently a serverless app like Castamatic can take 2 to 3 seconds per split to make a payment. This would increase that even more because of the http lookups. Some feeds have as many as 20 splits. I’m not against this. We just need to discuss possible ways to solve or reduce the impact of these issues because they are real. |
Beta Was this translation helpful? Give feedback.
-
This is true - but in my opinion the downsides are worth it given the pain of updating pubkeys in feeds across potentially dozens of hosting companies. Also if --
I think the caching approach @joksas suggested makes a lot of sense - especially with streaming payments. App developers could resolve the Lightning Address when the user starts playing an episode and then cache for all the actual streaming payments. Feeds with 20 splits are going to be slow either way. If the app is making the payments in series then from a users perspective 20s or 40s feels the same - it's really slow and from a ux perspective shouldn't be behind a loading state - instead the payments should resolve in the ui 1 by 1. |
Beta Was this translation helpful? Give feedback.
-
This isn't an idea I'm against, but it only solves issue for wallet hosters changing their internal infrastructure. If a guest who appeared on multiple podcasts were to change his wallet from xxx@fountain.fm to xxx@getalby.com, the same issue of needing to update every feed that person appears in remains. Probably a separate issue to open, but one possible solution is each person has their own personal RSS feed with their name, image, person:guid, and Lightning Address, and the podcast:value references the persons personal RSS feed. Instead of making a call to the lnurlp, a call is made to the persons feed to get their current address. Within their personal feed can be either a pubkey or lnurlp. |
Beta Was this translation helpful? Give feedback.
-
I see. This occurred to me back when splits were first introduced, I don't think remote item was even a thing then. Remote item personal identity feeds seems like an idea worthy of exploration. |
Beta Was this translation helpful? Give feedback.
-
What's prompting this concern @MerryOscar ? Is there a wallet provider moving things around in a way that they would lose their current pubkey? My understanding is that LND allows for importing a public key to the default wallet. I know larger infrastructure might use LDK or c-lightning but surely that functionality would also exist there. Just trying to understand what prompted the immediate concern. |
Beta Was this translation helpful? Give feedback.
-
While custodial wallets are certainly important and an easy onboarding path, non-custodial solutions are not far off and all stakeholders must be taken into account, not just the biggest. Perhaps you can detail the new ideas you are experimenting with so all parties can put their thinking caps on? There may be more than one way to solve your forward thinking ideas. Experimentation in this project has always been open. |
Beta Was this translation helpful? Give feedback.
-
Got it.
Ah, I didn't understand it as optional. All good then, to be discussed in the boardroom! |
Beta Was this translation helpful? Give feedback.
-
I would think implementing the lighting address in addition to the node address instead of replacing it makes more sense. If the payment to the node address fails, then lookup the keysend lightning address info for sending the payment.
|
Beta Was this translation helpful? Give feedback.
-
@MerryOscar @bumi Can we call this something other than lnurlp since the lnurl people haven't ratified this type of address lookup? Maybe "keysendaddr" or something? |
Beta Was this translation helpful? Give feedback.
-
PeerTube's latest build example value block
|
Beta Was this translation helpful? Give feedback.
-
So I think we're all agreed we should make this change - the last question is what the new lightning address attribute should be named?
The last two I added as options because this is all relevant to keysend payments rather than the broader lightning / ln My vote would probably just be to go with |
Beta Was this translation helpful? Give feedback.
-
I absolutely don't agree the lookup should have priority, for serverless stacks this would mean making more network calls and worsening battery drain. 30 years of internet history teaches us that relying on web server configuration for cache expiration times is pure utopia. |
Beta Was this translation helpful? Give feedback.
-
I'm going to agree with @MerryOscar and say let's call the attribute |
Beta Was this translation helpful? Give feedback.
-
1 if address is available with pubkey , try that. most boosts, no lookup required, just 1 keysend transaction. if the first boost fails, a lookup and another keysend are required. This should be a tiny fraction of payments requiring 3 transactions Compared to every transaction requiring lookup first then a keysend average transactions 1.01 vs 2 |
Beta Was this translation helpful? Give feedback.
-
One request for the sake of clarity: the term "Lightning Address" strongly implies the LNURL static ids spec. I think there should be a clearer distinction made here that the addresses used are not lud16 addresses. I was confused by this in the proposal until recently. I would imagine others would be as well. Edit: lud16 not lud06 |
Beta Was this translation helpful? Give feedback.
-
Is the |
Beta Was this translation helpful? Give feedback.
-
I'd really love to get this into the spec, but need @bumi or @MoritzKa to weigh in on whether the Alby API has a way to resolve these addresses during payment or if the clients will need to pre-resolve. |
Beta Was this translation helpful? Give feedback.
-
@kingonly you mentioned there are some bolt12 plans. (assuming this happens before it's all rainbows and unicorns) |
Beta Was this translation helpful? Give feedback.
-
I'm confused as to why the apps would be expected to do a lookup for the lightning_address using the ln_urlp. If I'm using Fountain for my wallet, and I boost to a value block that has steven@getalby.com as the keysend, then why can't the Fountain wallet do the lookup for steven@getalby.com, then route the payment to the appropriate address. @francosolerio has a concern about battery usage doing all of the lookups on the client side, and it's a valid one. Since this primarily benefits the wallet providers, it seems like the wallet providers doing the lookup on the server side would satisfy their desire to have the ln_urlp as a way to define an address in the value block, and satisfy the app devs that want to minimize the amount of network traffic and conserve battery life. |
Beta Was this translation helpful? Give feedback.
-
I'm working right now on my own implementation of the Alby Wallet API https://guides.getalby.com/developer-guide/v/alby-wallet-api I presume this is the way all the apps send payments right now: Make multiple keysend payments in 1 request All that would need to happen would be for there to be an optional Lightning Address option in the Keysend payment body which if present would resolve at the server to whatever the result of the well-known lookup is. From my point of view, as a provider of this Wallet service, I would easily be able to lookup at payment time and resolve a lightning address. I would not want to make the payment via LNURL though, only Keysend to the looked up address and customKey customValue pair. |
Beta Was this translation helpful? Give feedback.
-
As @daveajones asked - I thought I'd try and provide a summary of where we're at on this: Agreement on Issue:I think everyone is in agreement that having an option to remove the I think everyone is also agreed that a new optional field should be added to the Open Questions:1. What should the new attribute be called?Two options have been proposed:
Personally since there is starting to be more talk about Bolt12 I agree with @kingonly that the second option with a generic 2. Should apps or wallet api providers do the lookup?Should wallet api providers allow just sending the lightning address in the api calls to save app developers from having to do this every time the user wants to make a payment? In my view the wallet api providers probably should offer this as it's relatively trivial for them - but I don't think having wallet providers agree to do this should be a blocker on us adding the new attribute. If wallet API providers want to offer this they can and that might be something that influences app developers choice on which wallet provider to use. Anyway hopefully that's a helpful summary - I think it would be great specifically if some people from the lnurl spec community could comment on this - please tag them if you know them @kingonly @bumi @andrerfneves |
Beta Was this translation helpful? Give feedback.
-
I don't think keysend is a good name, because keysend is actually what it is doing right now with the pubkey of node. The keysend RPC command attempts to find a route to the given destination, and send the specified amount to it. Unlike the pay RPC command the keysend command does not require an invoice, instead it uses the destination node ID, and amount to find a route to the specified node. Core Lightning documentation - but similar terminology is used in other Lightning implementations. We are going to use LN Address, not keysend. The underlying mechanism after the address is resolved might be a keysend, but that does not differentiate it to "node" keysend, which we use right now. So let's call it lnAddress, lightningAddr or something similar, which makes it actually different to "node" type (which is a keysend to the node). |
Beta Was this translation helpful? Give feedback.
-
Having the pubkey listed in the value block in the RSS feed complicates things massively for service providers enabling value for value.
If a service provider wants to change their underlying infrastructure, their pubkey is likely to change too, and therefore all feeds that reference the original pubkey will need to update their value blocks. This is infeasible because of the nature of podcasting having so many distributed hosting providers and also self-hosting options. It's fine now as value for value is still small but if we're serious about onboarding more podcasters and hosting providers we need to solve this problem.
Both Fountain and Alby support the keysend lnurlp lookup format:
Therefore I suggest that we modify the
<podcast:valueRecipient>
spec so that theaddress
field can either be the keysend pubkey OR a Lightning Address. We can use the existingtype
field to signify that the address iskeysend
rather than a node pubkey:The argument against doing this has always been that it's an extra http request in the payment flow. In my view this is no way near a good enough reason to accept this glaringly obvious flaw with the spec that effectively blocks all infrastructure migration for service providers. The extra http request is worth solving this problem.
Lets do this now before value for value grows any further and we'll save ourselves massive amounts of headaches!
cc @daveajones @bumi @joksas @blastshielddown @jamescridland
Beta Was this translation helpful? Give feedback.
All reactions