New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optional description for Offer
and Refund
#3018
Optional description for Offer
and Refund
#3018
Conversation
Codecov ReportAttention: Patch coverage is
❗ Your organization needs to install the Codecov GitHub app to enable full functionality. Additional details and impacted files@@ Coverage Diff @@
## main #3018 +/- ##
==========================================
+ Coverage 89.13% 90.54% +1.40%
==========================================
Files 118 117 -1
Lines 97492 100470 +2978
Branches 97492 100470 +2978
==========================================
+ Hits 86903 90971 +4068
+ Misses 8349 7009 -1340
- Partials 2240 2490 +250 ☔ View full report in Codecov by Sentry. |
Dont we need to update to the new spec that allows an actually-empty description with no amount? |
Guessing no since a zero-length TLV is valid. The spec says a writer "MUST set |
Err... may have misinterpreted your comment. Spec has been updated as, AFAICT: lightning/bolts@f150782 |
If an Offer contains a path, the blinded_node_id of the path's final hop can be used as the signing pubkey. Make Offer::signing_pubkey and OfferContents::signing_pubkey return an Option to support this. Upcoming commits will implement this behavior.
If an offer has at least one path, it may omit the signing pubkey and use the blinded node id of the last hop of a path to sign an invoice. Allow parsing such offers but not yet creating them.
Instead of reusing OfferTlvStream::paths, add a dedicated paths TLV to InvoiceRequestTlvStream such that it can be used in Refund. This allows for an Offer without a signing_pubkey and still be able to differentiate whether an invoice is for an offer or a refund.
When parsing a Bolt12Invoice use both the Offer's signing_pubkey and paths to determine if it is for an Offer or a Refund. Previously, an Offer was required to have a signing_pubkey. But now that it is optional, the Offers paths can be used to make the determination. Additionally, check that the invoice matches one of the blinded node ids from the paths' last hops.
Offers currently require a description, though this may change to be optional. Remove the description requirement from the API, setting and empty string by default.
Refunds currently require a description, though this may change to be optional. Remove the description requirement from the API, setting and empty string by default.
1814a22
to
db7e696
Compare
Don't we need to drop this failure? rust-lightning/lightning/src/offers/offer.rs Line 1087 in 2b14cc4
|
This PR just changes the API. We still require at least a non-empty string. Though in the latest spec it seems we can drop the error if the amount is also empty. |
Right, it seems like we should go ahead and do that here? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM after Matt's feedback
The spec was changed to allow excluding an offer description if the offer doesn't have an amount. However, it is still required when the amount is set.
Alright, |
LGTM once Matt takes a look! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Treating @valentinewallace's "LGTM" as an ACK and merging.
The merge-base changed after approval.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure why github is insistent that my review doesn't count...
…description Optional description for `Offer` and `Refund`
Currently,
Offer::description
andRefund::description
are required in the spec, but this may be relaxed. Instead of requiring these in the public API, default to using an empty string and expose a method in the builders to set them.Based on #3017