Accept and track counterparty inbound forwarding fees in Channel
[rust-lightning] / lightning / src / ln / channel.rs
index b0a6def47a1f1167ec4d1670d2a510e7466016e9..29f1a30a6de4a8a04d6638251faf77a348a49fe5 100644 (file)
@@ -5871,13 +5871,26 @@ impl<Signer: Sign> Channel<Signer> {
                }
                self.counterparty_forwarding_info = Some(CounterpartyForwardingInfo {
                        fee_base_msat: msg.contents.fee_base_msat,
+                       inbound_fee_base_msat: self.counterparty_forwarding_info.as_ref()
+                               .map(|info| info.inbound_fee_base_msat).unwrap_or(0),
                        fee_proportional_millionths: msg.contents.fee_proportional_millionths,
+                       inbound_fee_proportional_millionths: self.counterparty_forwarding_info.as_ref()
+                               .map(|info| info.inbound_fee_proportional_millionths).unwrap_or(0),
                        cltv_expiry_delta: msg.contents.cltv_expiry_delta
                });
 
                Ok(())
        }
 
+       pub fn inbound_fees_update(&mut self, msg: &msgs::InboundFeesUpdate) -> Result<(), ChannelError> {
+               if let Some(info) = &mut self.counterparty_forwarding_info {
+                       info.inbound_fee_base_msat = msg.inbound_forwarding_fee_base_msat;
+                       info.inbound_fee_proportional_millionths = msg.inbound_forwarding_fee_proportional_millionths;
+               }
+
+               Ok(())
+       }
+
        /// Begins the shutdown process, getting a message for the remote peer and returning all
        /// holding cell HTLCs for payment failure.
        pub fn get_shutdown<K: Deref>(&mut self, keys_provider: &K, their_features: &InitFeatures, target_feerate_sats_per_kw: Option<u32>)
@@ -6566,7 +6579,9 @@ impl<'a, K: Deref> ReadableArgs<(&'a K, u32)> for Channel<<K::Target as SignerPr
                        0 => None,
                        1 => Some(CounterpartyForwardingInfo {
                                fee_base_msat: Readable::read(reader)?,
+                               inbound_fee_base_msat: 0,
                                fee_proportional_millionths: Readable::read(reader)?,
+                               inbound_fee_proportional_millionths: 0,
                                cltv_expiry_delta: Readable::read(reader)?,
                        }),
                        _ => return Err(DecodeError::InvalidValue),