X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Fconfig.rs;h=8f1f77b32aadd2f29b76be8fb6efc6290f2cb55a;hb=25a707314f70fc2f59488d4de34facb1428fc06d;hp=fef5338ce6f7973fb14c1f74cb8349502367faf8;hpb=749ae12e2230ff2a9d34ec767bdc4623a2649ca7;p=rust-lightning diff --git a/lightning/src/util/config.rs b/lightning/src/util/config.rs index fef5338c..8f1f77b3 100644 --- a/lightning/src/util/config.rs +++ b/lightning/src/util/config.rs @@ -399,6 +399,27 @@ pub struct ChannelConfig { pub force_close_avoidance_max_fee_satoshis: u64, } +impl ChannelConfig { + /// Applies the given [`ChannelConfigUpdate`] as a partial update to the [`ChannelConfig`]. + pub fn apply(&mut self, update: &ChannelConfigUpdate) { + if let Some(forwarding_fee_proportional_millionths) = update.forwarding_fee_proportional_millionths { + self.forwarding_fee_proportional_millionths = forwarding_fee_proportional_millionths; + } + if let Some(forwarding_fee_base_msat) = update.forwarding_fee_base_msat { + self.forwarding_fee_base_msat = forwarding_fee_base_msat; + } + if let Some(cltv_expiry_delta) = update.cltv_expiry_delta { + self.cltv_expiry_delta = cltv_expiry_delta; + } + if let Some(max_dust_htlc_exposure_msat) = update.max_dust_htlc_exposure_msat { + self.max_dust_htlc_exposure_msat = max_dust_htlc_exposure_msat; + } + if let Some(force_close_avoidance_max_fee_satoshis) = update.force_close_avoidance_max_fee_satoshis { + self.force_close_avoidance_max_fee_satoshis = force_close_avoidance_max_fee_satoshis; + } + } +} + impl Default for ChannelConfig { /// Provides sane defaults for most configurations (but with zero relay fees!). fn default() -> Self { @@ -423,6 +444,40 @@ impl_writeable_tlv_based!(ChannelConfig, { (10, force_close_avoidance_max_fee_satoshis, required), }); +/// A parallel struct to [`ChannelConfig`] to define partial updates. +#[allow(missing_docs)] +pub struct ChannelConfigUpdate { + pub forwarding_fee_proportional_millionths: Option, + pub forwarding_fee_base_msat: Option, + pub cltv_expiry_delta: Option, + pub max_dust_htlc_exposure_msat: Option, + pub force_close_avoidance_max_fee_satoshis: Option, +} + +impl Default for ChannelConfigUpdate { + fn default() -> ChannelConfigUpdate { + ChannelConfigUpdate { + forwarding_fee_proportional_millionths: None, + forwarding_fee_base_msat: None, + cltv_expiry_delta: None, + max_dust_htlc_exposure_msat: None, + force_close_avoidance_max_fee_satoshis: None, + } + } +} + +impl From for ChannelConfigUpdate { + fn from(config: ChannelConfig) -> ChannelConfigUpdate { + ChannelConfigUpdate { + forwarding_fee_proportional_millionths: Some(config.forwarding_fee_proportional_millionths), + forwarding_fee_base_msat: Some(config.forwarding_fee_base_msat), + cltv_expiry_delta: Some(config.cltv_expiry_delta), + max_dust_htlc_exposure_msat: Some(config.max_dust_htlc_exposure_msat), + force_close_avoidance_max_fee_satoshis: Some(config.force_close_avoidance_max_fee_satoshis), + } + } +} + /// Legacy version of [`ChannelConfig`] that stored the static /// [`ChannelHandshakeConfig::announced_channel`] and /// [`ChannelHandshakeConfig::commit_upfront_shutdown_pubkey`] fields.