diff --git a/lightning/src/ln/channel.rs b/lightning/src/ln/channel.rs index 758cd2785a2..da0d0b5f4fa 100644 --- a/lightning/src/ln/channel.rs +++ b/lightning/src/ln/channel.rs @@ -11442,6 +11442,7 @@ where commitment_feerate_sat_per_1000_weight: self.context.feerate_per_kw as u32, to_self_delay: self.funding.get_holder_selected_contest_delay(), max_accepted_htlcs: self.context.holder_max_accepted_htlcs, + channel_reserve_satoshis: self.funding.holder_selected_channel_reserve_satoshis, funding_pubkey: keys.funding_pubkey, revocation_basepoint: keys.revocation_basepoint.to_public_key(), payment_basepoint: keys.payment_point, @@ -11978,6 +11979,7 @@ where commitment_feerate_sat_per_1000_weight: self.context.feerate_per_kw, to_self_delay: self.funding.get_holder_selected_contest_delay(), max_accepted_htlcs: self.context.holder_max_accepted_htlcs, + channel_reserve_satoshis: self.funding.holder_selected_channel_reserve_satoshis, funding_pubkey: keys.funding_pubkey, revocation_basepoint: keys.revocation_basepoint.to_public_key(), payment_basepoint: keys.payment_point, diff --git a/lightning/src/ln/channel_acceptance_tests.rs b/lightning/src/ln/channel_acceptance_tests.rs index c0ab1d31ff5..d9b31e3013b 100644 --- a/lightning/src/ln/channel_acceptance_tests.rs +++ b/lightning/src/ln/channel_acceptance_tests.rs @@ -225,11 +225,16 @@ fn do_test_manual_inbound_accept_with_override( nodes[2].node.handle_open_channel(node_a, &open_channel_msg); let events = nodes[2].node.get_and_clear_pending_events(); - match events[0] { - Event::OpenChannelRequest { temporary_channel_id, .. } => nodes[2] - .node - .accept_inbound_channel(&temporary_channel_id, &node_a, 23, config_overrides) - .unwrap(), + match &events[0] { + Event::OpenChannelRequest { temporary_channel_id, params, .. } => { + // Test that channel_reserve_satoshis is properly exposed in Event::OpenChannelRequest + assert_eq!(params.channel_reserve_satoshis, open_channel_msg.channel_reserve_satoshis); + + nodes[2] + .node + .accept_inbound_channel(temporary_channel_id, &node_a, 23, config_overrides) + .unwrap() + }, _ => panic!("Unexpected event"), } get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, node_a) diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index 2cf7e109eb1..f60e74e5dc7 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -224,6 +224,8 @@ pub struct CommonOpenChannelFields { pub to_self_delay: u16, /// The maximum number of inbound HTLCs towards channel initiator pub max_accepted_htlcs: u16, + /// The minimum value unencumbered by HTLCs for the counterparty to keep in the channel + pub channel_reserve_satoshis: u64, /// The channel initiator's key controlling the funding transaction pub funding_pubkey: PublicKey, /// Used to derive a revocation key for transactions broadcast by counterparty @@ -259,6 +261,7 @@ impl CommonOpenChannelFields { commitment_feerate_sat_per_1000_weight: self.commitment_feerate_sat_per_1000_weight, to_self_delay: self.to_self_delay, max_accepted_htlcs: self.max_accepted_htlcs, + channel_reserve_satoshis: self.channel_reserve_satoshis, } } } @@ -282,6 +285,8 @@ pub struct ChannelParameters { pub to_self_delay: u16, /// The maximum number of pending HTLCs towards the channel initiator. pub max_accepted_htlcs: u16, + /// The minimum value unencumbered by HTLCs for the counterparty to keep in the channel + pub channel_reserve_satoshis: u64, } /// An [`open_channel`] message to be sent to or received from a peer. @@ -3016,6 +3021,7 @@ impl LengthReadable for OpenChannel { commitment_feerate_sat_per_1000_weight, to_self_delay, max_accepted_htlcs, + channel_reserve_satoshis, funding_pubkey, revocation_basepoint, payment_basepoint, @@ -3072,6 +3078,7 @@ impl LengthReadable for OpenChannelV2 { let dust_limit_satoshis: u64 = Readable::read(r)?; let max_htlc_value_in_flight_msat: u64 = Readable::read(r)?; let htlc_minimum_msat: u64 = Readable::read(r)?; + let channel_reserve_satoshis: u64 = Readable::read(r)?; let to_self_delay: u16 = Readable::read(r)?; let max_accepted_htlcs: u16 = Readable::read(r)?; let locktime: u32 = Readable::read(r)?; @@ -3103,6 +3110,7 @@ impl LengthReadable for OpenChannelV2 { commitment_feerate_sat_per_1000_weight, to_self_delay, max_accepted_htlcs, + channel_reserve_satoshis, funding_pubkey, revocation_basepoint, payment_basepoint, @@ -4708,6 +4716,7 @@ mod tests { commitment_feerate_sat_per_1000_weight: 821716, to_self_delay: 49340, max_accepted_htlcs: 49340, + channel_reserve_satoshis: 8665828695742877976, funding_pubkey: pubkey_1, revocation_basepoint: pubkey_2, payment_basepoint: pubkey_3, @@ -4816,6 +4825,7 @@ mod tests { htlc_minimum_msat: 2316138423780173, to_self_delay: 49340, max_accepted_htlcs: 49340, + channel_reserve_satoshis: 8665828695742877976, funding_pubkey: pubkey_1, revocation_basepoint: pubkey_2, payment_basepoint: pubkey_3,