-
Notifications
You must be signed in to change notification settings - Fork 339
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
Add a new RecipientOnionFields
and replace PaymentSecret
with it
#2139
Add a new RecipientOnionFields
and replace PaymentSecret
with it
#2139
Conversation
855e240
to
3323137
Compare
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.
Looks good after CI is fixed and tnull takes a look
lightning/src/ln/channelmanager.rs
Outdated
/// If you do not have one, the [`Route`] you pay over must not contain multiple paths as | ||
/// multi-path payments require a recipient-provided secret. |
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.
Just checking, do we still plan to do #1222? I may have recently suggested it to a new contributor
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.
I do not, but someone totally should!
Oops, broke bench like always lol. The other issues are upstream cause futures broke us. |
9ee94f2
to
c86099c
Compare
Codecov ReportPatch coverage:
📣 This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more Additional details and impacted files@@ Coverage Diff @@
## main #2139 +/- ##
==========================================
+ Coverage 91.35% 91.60% +0.25%
==========================================
Files 102 102
Lines 49909 52715 +2806
Branches 49909 52715 +2806
==========================================
+ Hits 45592 48289 +2697
- Misses 4317 4426 +109
... and 11 files with indirect coverage changes Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. ☔ View full report in Codecov by Sentry. |
c86099c
to
c77a59d
Compare
Rebased. |
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.
Generally looks good, only a few nits after a first pass.
CI is still sad though.
lightning/src/ln/channelmanager.rs
Outdated
@@ -226,6 +226,38 @@ impl Readable for PaymentId { | |||
} | |||
} | |||
|
|||
/// Information which is provided, encrypted, to the payment recipient when sending HTLCs. | |||
/// | |||
/// This should generally be constructed with data communicated to us from the recipient (via some |
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.
This sentence is very vague and I'm actually not sure what it tries to tell me. How is which data communicated to us? What forms of invoices are there and which should I expect..?
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.
BOLT11 or BOLT12?
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.
I don't know. Maybe the sentence can even be dropped, but in its current form I don't find it to add any value: "something might happen sometimes in a variety of ways, possibly".
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.
We could make it stronger, I mean the point is that you're definitely getting the info from an invoice unless you're doing something super custom (or some "extension" protocol).
lightning/src/ln/channelmanager.rs
Outdated
/// form of invoice). | ||
#[derive(Clone)] | ||
pub struct RecipientOnionFields { | ||
/// The [`PaymentSecret`] which is an arbitrary 32 bytes provided by the recipient for us to |
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.
nit: "(..) which consists of 32 random bytes that were provided by the recipient and should be included in the onion."
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.
There's nothing that says it has to be random? In fact its not in LDK.
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.
Fair enough, still the sentence could use some restructuring and "an 32 bytes provided" is simply missing a word, no?
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.
Ah, right, needed to drop which
.
fb26548
to
f129e9a
Compare
Oops, realized there were some small fixups from the parent PR that didnt end up here, pushed those. CI should fail on the each-commit-builds test but should pass after squash. |
fa3c946
to
f368f80
Compare
LGTM, will give it a final round after squash. |
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 squash
Many of the fields in `HTLCSource::OutboundRoute` are used to rebuild the pending-outbound-payment map on reload if the `ChannelManager` was not serialized though `ChannelMonitor`(s) were after an HTLC was sent. As of 0.0.114, however, such payments are not retryable without allowing them to fail and doing a full, fresh, send. Thus, some of the fields can be safely removed - we only really care about having enough information to provide the user a failure event, not being able to retry. Here we drop one such field - the `payment_secret`, making our `ChannelMonitorUpdate`s another handful of bytes smaller.
This moves the public payment sending API from passing an explicit `PaymentSecret` to a new `RecipientOnionFields` struct (which currently only contains the `PaymentSecret`). This gives us substantial additional flexibility as we look at add both `PaymentMetadata`, a new (well, year-or-two-old) BOLT11 invoice extension to provide additional data sent to the recipient. In the future, we should also add the ability to add custom TLV entries in the `RecipientOnionFields` struct.
While most lightning nodes don't (currently) support providing a payment secret or payment metadata for spontaneous payments, there's no specific technical reason why we shouldn't support sending those fields to a recipient. Further, when we eventually move to allowing custom TLV entries in the recipient's onion TLV stream, we'll want to support it for spontaneous payments as well. Here we simply add the new `RecipientOnionFields` struct as an argument to the spontaneous payment send methods. We don't yet plumb it through the payment sending logic, which will come when we plumb the new struct through the sending logic to replace the existing payment secret arguments.
This passes the new `RecipientOnionFields` through the internal sending APIs, ensuring we have access to the full struct when we go to construct the sending onion so that we can include any new fields added there.
f368f80
to
36235c3
Compare
Squashed and added one commit to correct events docs. |
This is the bulk of #2127 by LoC changes, but none of the actual work - it imply adds the
RecipientOnionFields
struct and pipes it through all the send calls. #2127 will then be relatively simple in just adding the metadata feature/field and putting it in the onion.