Add failure mode info to BlindedForward struct.
authorValentine Wallace <vwallace@protonmail.com>
Mon, 18 Dec 2023 19:36:57 +0000 (14:36 -0500)
committerValentine Wallace <vwallace@protonmail.com>
Tue, 16 Jan 2024 22:46:39 +0000 (17:46 -0500)
See added docs.

lightning/src/ln/channelmanager.rs
lightning/src/ln/onion_payment.rs

index 9a13d19f3b81e5732aa80a2a8ae40a6aaf1cc222..fb49fe568ce9868e82263a5271488adcb28f203d 100644 (file)
@@ -202,7 +202,9 @@ pub struct BlindedForward {
        /// onion payload if we're the introduction node. Useful for calculating the next hop's
        /// [`msgs::UpdateAddHTLC::blinding_point`].
        pub inbound_blinding_point: PublicKey,
-       // Another field will be added here when we support forwarding as a non-intro node.
+       /// If needed, this determines how this HTLC should be failed backwards, based on whether we are
+       /// the introduction node.
+       pub failure: BlindedFailure,
 }
 
 impl PendingHTLCRouting {
@@ -9500,6 +9502,7 @@ impl_writeable_tlv_based!(PhantomRouteHints, {
 
 impl_writeable_tlv_based!(BlindedForward, {
        (0, inbound_blinding_point, required),
+       (1, failure, (default_value, BlindedFailure::FromIntroductionNode)),
 });
 
 impl_writeable_tlv_based_enum!(PendingHTLCRouting,
index 06dc7719b2ef63c2250bf9863a7d18fa4c2d60b9..00843d5e4e93d0ec11feb609e9d5009c98e85203 100644 (file)
@@ -12,7 +12,7 @@ use crate::blinded_path;
 use crate::blinded_path::payment::{PaymentConstraints, PaymentRelay};
 use crate::chain::channelmonitor::{HTLC_FAIL_BACK_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS};
 use crate::ln::PaymentHash;
-use crate::ln::channelmanager::{BlindedForward, CLTV_FAR_FAR_AWAY, HTLCFailureMsg, MIN_CLTV_EXPIRY_DELTA, PendingHTLCInfo, PendingHTLCRouting};
+use crate::ln::channelmanager::{BlindedFailure, BlindedForward, CLTV_FAR_FAR_AWAY, HTLCFailureMsg, MIN_CLTV_EXPIRY_DELTA, PendingHTLCInfo, PendingHTLCRouting};
 use crate::ln::features::BlindedHopFeatures;
 use crate::ln::msgs;
 use crate::ln::onion_utils;
@@ -106,7 +106,12 @@ pub(super) fn create_fwd_pending_htlc_info(
                        onion_packet: outgoing_packet,
                        short_channel_id,
                        blinded: intro_node_blinding_point.or(msg.blinding_point)
-                               .map(|bp| BlindedForward { inbound_blinding_point: bp }),
+                               .map(|bp| BlindedForward {
+                                       inbound_blinding_point: bp,
+                                       failure: intro_node_blinding_point
+                                               .map(|_| BlindedFailure::FromIntroductionNode)
+                                               .unwrap_or(BlindedFailure::FromBlindedNode),
+                               }),
                },
                payment_hash: msg.payment_hash,
                incoming_shared_secret: shared_secret,