Allow channel update for accept_underpaying_htlcs

Extends partial channel updates to optionally include the
accept_underpaying_htlcs flag.
This commit is contained in:
Joost Jager 2025-02-19 13:13:53 +01:00
parent b05402ae78
commit 2a3e0021a3
2 changed files with 23 additions and 1 deletions

View file

@ -15759,10 +15759,12 @@ mod tests {
let new_fee = user_config.channel_config.forwarding_fee_proportional_millionths + 100; let new_fee = user_config.channel_config.forwarding_fee_proportional_millionths + 100;
nodes[0].node.update_partial_channel_config(&channel.counterparty.node_id, &[channel.channel_id], &ChannelConfigUpdate { nodes[0].node.update_partial_channel_config(&channel.counterparty.node_id, &[channel.channel_id], &ChannelConfigUpdate {
forwarding_fee_proportional_millionths: Some(new_fee), forwarding_fee_proportional_millionths: Some(new_fee),
accept_underpaying_htlcs: Some(true),
..Default::default() ..Default::default()
}).unwrap(); }).unwrap();
assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().cltv_expiry_delta, new_cltv_expiry_delta); assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().cltv_expiry_delta, new_cltv_expiry_delta);
assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().forwarding_fee_proportional_millionths, new_fee); assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().forwarding_fee_proportional_millionths, new_fee);
assert_eq!(nodes[0].node.list_channels()[0].config.unwrap().accept_underpaying_htlcs, true);
let events = nodes[0].node.get_and_clear_pending_msg_events(); let events = nodes[0].node.get_and_clear_pending_msg_events();
assert_eq!(events.len(), 1); assert_eq!(events.len(), 1);
match &events[0] { match &events[0] {

View file

@ -601,6 +601,9 @@ impl ChannelConfig {
{ {
self.force_close_avoidance_max_fee_satoshis = force_close_avoidance_max_fee_satoshis; self.force_close_avoidance_max_fee_satoshis = force_close_avoidance_max_fee_satoshis;
} }
if let Some(accept_underpaying_htlcs) = update.accept_underpaying_htlcs {
self.accept_underpaying_htlcs = accept_underpaying_htlcs;
}
} }
} }
@ -674,14 +677,30 @@ impl crate::util::ser::Readable for ChannelConfig {
} }
/// A parallel struct to [`ChannelConfig`] to define partial updates. /// A parallel struct to [`ChannelConfig`] to define partial updates.
#[allow(missing_docs)]
#[derive(Default)] #[derive(Default)]
pub struct ChannelConfigUpdate { pub struct ChannelConfigUpdate {
/// Amount (in millionths of a satoshi) charged per satoshi for payments forwarded outbound over the channel. See
/// [`ChannelConfig::forwarding_fee_proportional_millionths`].
pub forwarding_fee_proportional_millionths: Option<u32>, pub forwarding_fee_proportional_millionths: Option<u32>,
/// Amount (in milli-satoshi) charged for payments forwarded outbound over the channel. See
/// [`ChannelConfig::forwarding_fee_base_msat`].
pub forwarding_fee_base_msat: Option<u32>, pub forwarding_fee_base_msat: Option<u32>,
/// The difference in the CLTV value between incoming HTLCs and an outbound HTLC forwarded over the channel this
/// config applies to. See [`ChannelConfig::cltv_expiry_delta`].
pub cltv_expiry_delta: Option<u16>, pub cltv_expiry_delta: Option<u16>,
/// The total exposure we are willing to allow to dust HTLCs. See [`ChannelConfig::max_dust_htlc_exposure`].
pub max_dust_htlc_exposure_msat: Option<MaxDustHTLCExposure>, pub max_dust_htlc_exposure_msat: Option<MaxDustHTLCExposure>,
/// The additional fee we're willing to pay to avoid waiting for the counterparty's `to_self_delay` to reclaim
/// funds. See [`ChannelConfig::force_close_avoidance_max_fee_satoshis`].
pub force_close_avoidance_max_fee_satoshis: Option<u64>, pub force_close_avoidance_max_fee_satoshis: Option<u64>,
/// If set, allows this channel's counterparty to skim an additional fee off this node's inbound HTLCs. See
/// [`ChannelConfig::accept_underpaying_htlcs`].
pub accept_underpaying_htlcs: Option<bool>,
} }
impl From<ChannelConfig> for ChannelConfigUpdate { impl From<ChannelConfig> for ChannelConfigUpdate {
@ -696,6 +715,7 @@ impl From<ChannelConfig> for ChannelConfigUpdate {
force_close_avoidance_max_fee_satoshis: Some( force_close_avoidance_max_fee_satoshis: Some(
config.force_close_avoidance_max_fee_satoshis, config.force_close_avoidance_max_fee_satoshis,
), ),
accept_underpaying_htlcs: Some(config.accept_underpaying_htlcs),
} }
} }
} }