Bolt12 uses *other nodes* as a relay, problem is Bolt12 is unreliable because it mimics Tor and doesn't work in the browser.
Discussion
yeah that would be the main issue. clients would need gossip to properly make the request i think? also that complexity is huge
Right, between the poor performance/reliability/browser-incompatibility Bolt12 is a dead end... meanwhile, CLINK Offers work reliably today... including with blinded paths on LND so bolt12 can't even claim a privacy advantage
yeah but lightning folks are not going to care about nostr just for our specific usecase. best to build on top of bolt12 but maybe utilize relays as an ln proxy somehow. can just be a lightning node that is also a nostr relay that can make the request for you. not sure. will ponder.
They don't need to care about Nostr anymore than they cared about http to use LNURL, as long as it just works.
Bolt12 simply doesn't work, only a few privacy larps really cared, and they were completely wrong about blinded paths. It was always just astroturf by Spiral and minor implementations jealous of LND's market share.
The separation of concerns is key, not having to trust a nostr relay because of the encryption/signing already provides an instant transport network with the same accessibility of LNURL.
Nostr is also bi-directional, it's not just noffers, but ndebits and nmanage for offers. Offers themselves provide flexible arbitrary data payloads for product details. (t-shirt sizes, sku's, zap receipts etc)
nostr relays are pretty centralizing and not super private though. you could just subscribe to ephemeral events to monitor requests. we need to improve this.
I wouldn't say bolt12 is completely useless, i still like the idea of small idenitifier strings for payments not dependent on tls/web tech.
They're centralizing in social contexts because they're used for discovery and feed subscriptions, but as an RPC transport they're encoded in each noffer and only for ephemeral interactivity, not passively.
They're also not reliant on TLS since you can run a relay without SSL and just address it by IP
From a privacy standpoint, all the keys used in CLINK are wrapped as to not keep a social identity tied or hot on a service endpoint. A node can use as many as it wants for disparate offers/users.
The payloads themselves are encrypted so it's only the kind metadata viewable, but yea NIP42 would be a good add here, actually got a PR for that I need to review on our reference server.
Why? Let LN handle the LN stuff, nostr can do the nostr stuff. LN wallets are perfectly capable of paying a BOLT 12 offer using the built-in onion messages, and they can figure out reliability if there’s ever an issue with it. Don’t try to rebuild what LN already has.
we are not going to delegate to opening an app to fetch an invoice. noone uses nostr this way.
You delegate to the wallet to pay an offer. The fact that there’s a thing called an “invoice” exchanged is irrelevant (and an unfortunate naming mistake).
If you have a built-in wallet, you delegate to that. If you use NWC, the new spec is defined in terms of offers, not invoices. The payer has no need to ever see or think about that invoice, it’s entirely a lightning-internal thing.
with lnurl we include a nostr note in the invoice, that's how we get proof that someone initiated the zaps (but not necessarily proof they paid it)
we would need something similar for bolt12, which is why i asked about including data or signature when fetching the invoice from the offer. if we can't do that then we are stuck with lnurl and bolt11
the main unfortunate thing is that it is 2025 and we still have not figured out a good solution to payment flows that require preimages, a good chunk of software doesn't support them, nwc is still not widely adopted...
It's a solved problem if you don't outsource your thinking to Spiral

what is your beef with spiral? and didn't rusty initiate bolt12 not them? I don't get it.
i think it would be good if there was more "here are our use cases" discussions and see if we can map it into lightning instead of acting hostile toward lightning devs. why?
Rusty did afaik yes, while Spiral did much of the NGO-level astroturf. Both representing minor implementations focused on the mobile node fantasy.
I recall one such use-case in the repo discussion being Fedimint/Liquid related shitcoinery. Solving the transport of bolt11's would have been adequate if that wasn't their priority, not a whole new BOLT to poison the protocol-level.
The shit that comes out of the NGO's and Blockstream have been a reliable counter-signal in every regard.
Wallet connections are still pretty new and not every wallet supports them as I said, which makes it really hard to use *anything* that requires proofs.
Fortunately this isn't about wallet connections, its about getting invoices (and pre-images) to the web without every Lightning node needing to set up a web server.
Right, wallets should (though I don’t know about currently) support either setting the payer_note or signing a message with the payer-key as a part of generating proof-of-payment, both of which would suffice.
Definitely need to spec that part out and make sure wallet support it as a part of the BIP 353 payment proof logic, but I don’t think exposing BOLT 12 invoices outside of the LN wallet makes sense.
LN stuff is payments.
Bolt12 is arbitrary data on LN, may as well be jpegs on chain.
We'll let Nostr handle arbitrary data.
bolt12 is a lot of things, sounds like you don't like one aspect of it. from what I can tell that concern is pretty overblown due to limits on packet size? the benefit of fetching invoices behind nats natively on lightning without tls/web tech seems pretty useful.
I don't like many aspects, it was completely contrived from a lack of principles by the minor implementations pushing the mobile node fantasy.
Even if I didn't care about jpegs on Lightning:
- The performance/reliability are a non-starter
- It doesn't do bi-direction for commercial applications
- It puts the concern at the wrong layer, the payments layer protocol versus the Line-of-Business Application
- My underlying principle is that Lightning is the native money of the internet, so things MUST work in a browser
(but not reliant on on that web tech you can still QR code a noffer with just a relay ip and node pubkey)
- If you want to add functionality, the SDK doesn't touch your underlying node implementation or the BOLT specs and can work with any of them
Nostr offers checks all those boxes, with the added benefit of having an identity layer that can be optionally leveraged along side it.
1. what are the issues with performance and reliability? socket perf with noise is better than tls
2. bidirectional comms are supported via a persistent lightning connection and bidirectional packets. commando is and example of this
3. is this really a big deal
4. it does work in the browser, i have demos (like lnlink.org) that shows fetching invoices over lightning (bolt11 ironically)
i think nostr is cool, but making that a requirement for all lightning applications seems wrong
1) It mimics Tor, each hop is added latency and failure probability, whereas Nostr being a web server is the same performance people expect from any website
2/3) Bi-direction needs to be at the app layer if its to be used in commerce, payments often have additional context... you're not firing the zap receipt from Lightning for example
4) That appears to be a middleware plugin to talk websockets, since the browser requires websockets... nostr is just json and websockets already
The Lightning network already uses other nodes to route payments. Doesn't BOLT12 just extend this concept to also route messages?
It extends arbitrary data onto Lightning, which is as much of an attack as jpegs on the chain... payment traffic is naturally bonded
But all that aside, it's introducing 2 round trips across all those hops, each hop exponentially increasing failure probability and mean-time-to-payment