Merge pull request #1840 from valentinewallace/2022-11-htlc-intercept-prefactor
[rust-lightning] / lightning / src / ln / channelmanager.rs
index 9e087785b537985714ddfee30e9da54e76df36cb..7f9531331b448239bb89db06d68ed397d6092afb 100644 (file)
@@ -113,6 +113,7 @@ pub(super) struct PendingHTLCInfo {
        pub(super) incoming_shared_secret: [u8; 32],
        payment_hash: PaymentHash,
        pub(super) amt_to_forward: u64,
+       pub(super) amt_incoming: Option<u64>, // Added in 0.0.113
        pub(super) outgoing_cltv_value: u32,
 }
 
@@ -2196,6 +2197,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
                        routing,
                        payment_hash,
                        incoming_shared_secret: shared_secret,
+                       amt_incoming: Some(amt_msat),
                        amt_to_forward: amt_msat,
                        outgoing_cltv_value: hop_data.outgoing_cltv_value,
                })
@@ -2292,6 +2294,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
                                        },
                                        payment_hash: msg.payment_hash.clone(),
                                        incoming_shared_secret: shared_secret,
+                                       amt_incoming: Some(msg.amount_msat),
                                        amt_to_forward: next_hop_data.amt_to_forward,
                                        outgoing_cltv_value: next_hop_data.outgoing_cltv_value,
                                })
@@ -2310,7 +2313,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
                                                None => { // unknown_next_peer
                                                        // Note that this is likely a timing oracle for detecting whether an scid is a
                                                        // phantom.
-                                                       if fake_scid::is_valid_phantom(&self.fake_scid_rand_bytes, *short_channel_id) {
+                                                       if fake_scid::is_valid_phantom(&self.fake_scid_rand_bytes, *short_channel_id, &self.genesis_hash) {
                                                                None
                                                        } else {
                                                                break Some(("Don't have available channel for forwarding as requested.", 0x4000 | 10, None));
@@ -3155,7 +3158,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
                                                                                prev_short_channel_id, prev_htlc_id, prev_funding_outpoint,
                                                                                forward_info: PendingHTLCInfo {
                                                                                        routing, incoming_shared_secret, payment_hash, amt_to_forward,
-                                                                                       outgoing_cltv_value
+                                                                                       outgoing_cltv_value, amt_incoming: _
                                                                                }
                                                                        }) => {
                                                                                macro_rules! failure_handler {
@@ -3199,7 +3202,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
                                                                                }
                                                                                if let PendingHTLCRouting::Forward { onion_packet, .. } = routing {
                                                                                        let phantom_secret_res = self.keys_manager.get_node_secret(Recipient::PhantomNode);
-                                                                                       if phantom_secret_res.is_ok() && fake_scid::is_valid_phantom(&self.fake_scid_rand_bytes, short_chan_id) {
+                                                                                       if phantom_secret_res.is_ok() && fake_scid::is_valid_phantom(&self.fake_scid_rand_bytes, short_chan_id, &self.genesis_hash) {
                                                                                                let phantom_shared_secret = SharedSecret::new(&onion_packet.public_key.unwrap(), &phantom_secret_res.unwrap()).secret_bytes();
                                                                                                let next_hop = match onion_utils::decode_next_payment_hop(phantom_shared_secret, &onion_packet.hop_data, onion_packet.hmac, payment_hash) {
                                                                                                        Ok(res) => res,
@@ -3262,7 +3265,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
                                                                                prev_short_channel_id, prev_htlc_id, prev_funding_outpoint ,
                                                                                forward_info: PendingHTLCInfo {
                                                                                        incoming_shared_secret, payment_hash, amt_to_forward, outgoing_cltv_value,
-                                                                                       routing: PendingHTLCRouting::Forward { onion_packet, .. },
+                                                                                       routing: PendingHTLCRouting::Forward { onion_packet, .. }, amt_incoming: _,
                                                                                },
                                                                        }) => {
                                                                                log_trace!(self.logger, "Adding HTLC from short id {} with payment_hash {} to channel with short id {} after delay", prev_short_channel_id, log_bytes!(payment_hash.0), short_chan_id);
@@ -6470,7 +6473,8 @@ impl_writeable_tlv_based!(PendingHTLCInfo, {
        (2, incoming_shared_secret, required),
        (4, payment_hash, required),
        (6, amt_to_forward, required),
-       (8, outgoing_cltv_value, required)
+       (8, outgoing_cltv_value, required),
+       (9, amt_incoming, option),
 });
 
 
@@ -6669,7 +6673,7 @@ impl Writeable for HTLCSource {
                                        (1, payment_id_opt, option),
                                        (2, first_hop_htlc_msat, required),
                                        (3, payment_secret, option),
-                                       (4, path, vec_type),
+                                       (4, *path, vec_type),
                                        (5, payment_params, option),
                                 });
                        }