Repository navigation
Conversation
The cln-grpc node.proto is unchanged between v26.06.8 and v26.06.9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LUD-06 requires the invoice's description hash to equal sha256 of the metadata served at /.well-known/lnurlp. Invoices carried a plain description instead, so wallets that check it (Zeus, Phoenix, Breez) rejected them. Build the metadata in one place and use it for both the well-known response and the invoice: CLN gets it as the description with deschashonly, LND as the description hash. The LUD-12 comment no longer goes in the description; CLN keeps it in the invoice label and LND drops it. The metadata now includes the LUD-16 text/identifier entry and is serialized as JSON instead of interpolated. Usernames outside the LUD-16 charset return 404 and the rest are lowercased. On CLN, verify only answers for invoices labeled lnaddress-, so it no longer exposes other invoices on the node. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the protocol bugs found while deploying v0.1.0 against Core Lightning.
1. Invoices didn't commit to the metadata (LUD-06, high)
LUD-06 requires the invoice's
htag to equalsha256(utf8(metadata)), wheremetadatais the exact string served at/.well-known/lnurlp/<username>. v0.1.0 putpayment for <username>(or the comment) in the plain description, so strict wallets (Zeus, Phoenix, Breez) rejected the invoices.Helpers/LnUrlMetadatabuilds the metadata once. The well-known response and the callback both use it.Description = metadata,Deschashonly = true.DescriptionHash = sha256(metadata), noMemo.lnaddress-<user>-<id>: <comment>), so it shows in RTL; LND drops it.2. LUD-16 metadata (medium)
["text/identifier","<user>@<domain>"](domain lowercased, port stripped) and is serialized with System.Text.Json instead of string interpolation.[a-z0-9-_.], case-insensitive and served lowercase. Anything else returns404 {"status":"ERROR","reason":"Not found"}from both well-known and callback, without calling the node.3. Verify only covers LnAddress invoices on CLN
/lnurl/verify/<hash>now returnsNot foundfor CLN invoices whose label doesn't start withlnaddress-, so invoices created by RTL, Zeus and other apps aren't exposed. LND has no label to check; the README now limits the "use a dedicated node" warning to LND.Tests
.well-knownis exactly what the callback passes to the backend (with mixed-case host and port).lightning-cli decodereportsdescription_hash == sha256(metadata); the comment lands in the label and leaves the hash unchanged; a foreign invoice created on the node returns null from lookup.DecodePayReqreportsdescription_hash == sha256(metadata), with and without a comment.node.protois byte-identical between the two.Behavior changes for deployments
Paying user@domain) instead ofpayment for user.[a-z0-9-_.]now get 404; mixed case is lowercased./health.Merges cleanly with #13, #14 and #15.
🤖 Generated with Claude Code