Skip to content

Commit 8e562be

Browse files
committed
Remove PaymentContext from OnionPayload
PaymentContext is already stored in ClaimablePayment via PaymentPurpose, so there is no need to repeat it in each ClaimableHTLC via OnionPayload. This avoids cloning the PaymentContext each time an HTLC is received, other than for the first HTLC for a payment.
1 parent d690072 commit 8e562be

File tree

1 file changed

+17
-27
lines changed

1 file changed

+17
-27
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,6 @@ enum OnionPayload {
357357
/// This is only here for backwards-compatibility in serialization, in the future it can be
358358
/// removed, breaking clients running 0.0.106 and earlier.
359359
_legacy_hop_data: Option<msgs::FinalOnionHopData>,
360-
/// The context of the payment included by the recipient in a blinded path, or `None` if a
361-
/// blinded path was not used.
362-
///
363-
/// Used in part to determine the [`events::PaymentPurpose`].
364-
payment_context: Option<PaymentContext>,
365360
},
366361
/// Contains the payer-provided preimage.
367362
Spontaneous(PaymentPreimage),
@@ -5346,7 +5341,7 @@ where
53465341
}
53475342
}) => {
53485343
let blinded_failure = routing.blinded_failure();
5349-
let (cltv_expiry, onion_payload, payment_data, phantom_shared_secret, mut onion_fields) = match routing {
5344+
let (cltv_expiry, onion_payload, payment_data, payment_context, phantom_shared_secret, mut onion_fields) = match routing {
53505345
PendingHTLCRouting::Receive {
53515346
payment_data, payment_metadata, payment_context,
53525347
incoming_cltv_expiry, phantom_shared_secret, custom_tlvs,
@@ -5355,8 +5350,8 @@ where
53555350
let _legacy_hop_data = Some(payment_data.clone());
53565351
let onion_fields = RecipientOnionFields { payment_secret: Some(payment_data.payment_secret),
53575352
payment_metadata, custom_tlvs };
5358-
(incoming_cltv_expiry, OnionPayload::Invoice { _legacy_hop_data, payment_context },
5359-
Some(payment_data), phantom_shared_secret, onion_fields)
5353+
(incoming_cltv_expiry, OnionPayload::Invoice { _legacy_hop_data },
5354+
Some(payment_data), payment_context, phantom_shared_secret, onion_fields)
53605355
},
53615356
PendingHTLCRouting::ReceiveKeysend {
53625357
payment_data, payment_preimage, payment_metadata,
@@ -5368,7 +5363,7 @@ where
53685363
custom_tlvs,
53695364
};
53705365
(incoming_cltv_expiry, OnionPayload::Spontaneous(payment_preimage),
5371-
payment_data, None, onion_fields)
5366+
payment_data, None, None, onion_fields)
53725367
},
53735368
_ => {
53745369
panic!("short_channel_id == 0 should imply any pending_forward entries are of type Receive");
@@ -5530,7 +5525,7 @@ where
55305525
match payment_secrets.entry(payment_hash) {
55315526
hash_map::Entry::Vacant(_) => {
55325527
match claimable_htlc.onion_payload {
5533-
OnionPayload::Invoice { ref payment_context, .. } => {
5528+
OnionPayload::Invoice { .. } => {
55345529
let payment_data = payment_data.unwrap();
55355530
let (payment_preimage, min_final_cltv_expiry_delta) = match inbound_payment::verify(payment_hash, &payment_data, self.highest_seen_timestamp.load(Ordering::Acquire) as u64, &self.inbound_payment_key, &self.logger) {
55365531
Ok(result) => result,
@@ -5550,7 +5545,7 @@ where
55505545
let purpose = events::PaymentPurpose::from_parts(
55515546
payment_preimage,
55525547
payment_data.payment_secret,
5553-
payment_context.clone(),
5548+
payment_context,
55545549
);
55555550
check_total_value!(purpose);
55565551
},
@@ -5561,13 +5556,10 @@ where
55615556
}
55625557
},
55635558
hash_map::Entry::Occupied(inbound_payment) => {
5564-
let payment_context = match claimable_htlc.onion_payload {
5565-
OnionPayload::Spontaneous(_) => {
5566-
log_trace!(self.logger, "Failing new keysend HTLC with payment_hash {} because we already have an inbound payment with the same payment hash", &payment_hash);
5567-
fail_htlc!(claimable_htlc, payment_hash);
5568-
},
5569-
OnionPayload::Invoice { ref payment_context, .. } => payment_context,
5570-
};
5559+
if let OnionPayload::Spontaneous(_) = claimable_htlc.onion_payload {
5560+
log_trace!(self.logger, "Failing new keysend HTLC with payment_hash {} because we already have an inbound payment with the same payment hash", &payment_hash);
5561+
fail_htlc!(claimable_htlc, payment_hash);
5562+
}
55715563
let payment_data = payment_data.unwrap();
55725564
if inbound_payment.get().payment_secret != payment_data.payment_secret {
55735565
log_trace!(self.logger, "Failing new HTLC with payment_hash {} as it didn't match our expected payment secret.", &payment_hash);
@@ -5580,7 +5572,7 @@ where
55805572
let purpose = events::PaymentPurpose::from_parts(
55815573
inbound_payment.get().payment_preimage,
55825574
payment_data.payment_secret,
5583-
payment_context.clone(),
5575+
payment_context,
55845576
);
55855577
let payment_claimable_generated = check_total_value!(purpose);
55865578
if payment_claimable_generated {
@@ -10815,11 +10807,11 @@ impl_writeable_tlv_based!(HTLCPreviousHopData, {
1081510807

1081610808
impl Writeable for ClaimableHTLC {
1081710809
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), io::Error> {
10818-
let (payment_data, keysend_preimage, payment_context) = match &self.onion_payload {
10819-
OnionPayload::Invoice { _legacy_hop_data, payment_context } => {
10820-
(_legacy_hop_data.as_ref(), None, payment_context.as_ref())
10810+
let (payment_data, keysend_preimage) = match &self.onion_payload {
10811+
OnionPayload::Invoice { _legacy_hop_data } => {
10812+
(_legacy_hop_data.as_ref(), None)
1082110813
},
10822-
OnionPayload::Spontaneous(preimage) => (None, Some(preimage), None),
10814+
OnionPayload::Spontaneous(preimage) => (None, Some(preimage)),
1082310815
};
1082410816
write_tlv_fields!(writer, {
1082510817
(0, self.prev_hop, required),
@@ -10831,7 +10823,6 @@ impl Writeable for ClaimableHTLC {
1083110823
(6, self.cltv_expiry, required),
1083210824
(8, keysend_preimage, option),
1083310825
(10, self.counterparty_skimmed_fee_msat, option),
10834-
(11, payment_context, option),
1083510826
});
1083610827
Ok(())
1083710828
}
@@ -10849,7 +10840,6 @@ impl Readable for ClaimableHTLC {
1084910840
(6, cltv_expiry, required),
1085010841
(8, keysend_preimage, option),
1085110842
(10, counterparty_skimmed_fee_msat, option),
10852-
(11, payment_context, option),
1085310843
});
1085410844
let payment_data: Option<msgs::FinalOnionHopData> = payment_data_opt;
1085510845
let value = value_ser.0.unwrap();
@@ -10870,7 +10860,7 @@ impl Readable for ClaimableHTLC {
1087010860
}
1087110861
total_msat = Some(payment_data.as_ref().unwrap().total_msat);
1087210862
}
10873-
OnionPayload::Invoice { _legacy_hop_data: payment_data, payment_context }
10863+
OnionPayload::Invoice { _legacy_hop_data: payment_data }
1087410864
},
1087510865
};
1087610866
Ok(Self {
@@ -12106,7 +12096,7 @@ where
1210612096
return Err(DecodeError::InvalidValue);
1210712097
}
1210812098
let purpose = match &htlcs[0].onion_payload {
12109-
OnionPayload::Invoice { _legacy_hop_data, payment_context: _ } => {
12099+
OnionPayload::Invoice { _legacy_hop_data } => {
1211012100
if let Some(hop_data) = _legacy_hop_data {
1211112101
events::PaymentPurpose::Bolt11InvoicePayment {
1211212102
payment_preimage: match pending_inbound_payments.get(&payment_hash) {

0 commit comments

Comments
 (0)