Skip to content
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

Merged

Conversation

jkczyz
Copy link
Contributor

@jkczyz jkczyz commented Apr 24, 2024

Currently, Offer::description and Refund::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

@codecov-commenter
Copy link

codecov-commenter commented Apr 24, 2024

Codecov Report

Attention: Patch coverage is 95.18600% with 22 lines in your changes are missing coverage. Please review.

Project coverage is 90.54%. Comparing base (2c0fcf2) to head (e61001f).
Report is 45 commits behind head on main.

Files Patch % Lines
lightning/src/offers/invoice.rs 95.12% 2 Missing and 4 partials ⚠️
lightning/src/offers/offer.rs 95.65% 4 Missing and 2 partials ⚠️
lightning/src/offers/refund.rs 90.90% 5 Missing ⚠️
lightning/src/offers/invoice_request.rs 96.70% 3 Missing ⚠️
lightning/src/ln/channelmanager.rs 87.50% 2 Missing ⚠️

❗ 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.
📢 Have feedback on the report? Share it here.

@jkczyz jkczyz marked this pull request as ready for review April 24, 2024 22:42
@jkczyz jkczyz requested a review from TheBlueMatt April 25, 2024 14:08
@TheBlueMatt TheBlueMatt added this to the 0.0.123 milestone Apr 25, 2024
@TheBlueMatt
Copy link
Collaborator

Dont we need to update to the new spec that allows an actually-empty description with no amount?

@jkczyz
Copy link
Contributor Author

jkczyz commented Apr 26, 2024

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 offer_description to a complete description of the purpose of the payment." So it may depend on how strict you want to interpret that.

@jkczyz
Copy link
Contributor Author

jkczyz commented Apr 26, 2024

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 offer_description to a complete description of the purpose of the payment." So it may depend on how strict you want to interpret that.

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.
@jkczyz jkczyz force-pushed the 2024-04-optional-description branch from 1814a22 to db7e696 Compare April 26, 2024 23:14
@TheBlueMatt
Copy link
Collaborator

Don't we need to drop this failure?

None => return Err(Bolt12SemanticError::MissingDescription),

@jkczyz
Copy link
Contributor Author

jkczyz commented Apr 29, 2024

Don't we need to drop this failure?

None => return Err(Bolt12SemanticError::MissingDescription),

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.

@TheBlueMatt
Copy link
Collaborator

Right, it seems like we should go ahead and do that here?

Copy link
Contributor

@valentinewallace valentinewallace left a 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

lightning/src/offers/offer.rs Outdated Show resolved Hide resolved
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.
@jkczyz
Copy link
Contributor Author

jkczyz commented May 2, 2024

Alright, description is now an Option and will be set to Some(String::new()) in OfferBuilder if an amount is not set. Parsing also updated.

@valentinewallace
Copy link
Contributor

LGTM once Matt takes a look!

TheBlueMatt
TheBlueMatt previously approved these changes May 3, 2024
Copy link
Collaborator

@TheBlueMatt TheBlueMatt left a 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.

@jkczyz jkczyz dismissed TheBlueMatt’s stale review May 3, 2024 19:52

The merge-base changed after approval.

Copy link
Collaborator

@TheBlueMatt TheBlueMatt left a 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...

@TheBlueMatt TheBlueMatt merged commit a27088d into lightningdevkit:main May 3, 2024
16 checks passed
TheBlueMatt added a commit to TheBlueMatt/rust-lightning that referenced this pull request May 6, 2024
…description

Optional description for `Offer` and `Refund`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants