@@ -80,7 +80,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, Responder, Res
8080use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
8181use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
8282use crate::sign::ecdsa::EcdsaChannelSigner;
83- use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
83+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelConfigOverrides, UserConfig };
8484use crate::util::wakers::{Future, Notifier};
8585use crate::util::scid_utils::fake_scid;
8686use crate::util::string::UntrustedString;
@@ -1875,6 +1875,7 @@ where
18751875/// ```
18761876/// # use bitcoin::secp256k1::PublicKey;
18771877/// # use lightning::ln::channelmanager::AChannelManager;
1878+ /// # use lightning::util::config::InboundChannelConfigOverrides;
18781879/// # use lightning::events::{Event, EventsProvider};
18791880/// #
18801881/// # fn is_trusted(counterparty_node_id: PublicKey) -> bool {
@@ -1900,7 +1901,7 @@ where
19001901///
19011902/// let user_channel_id = 43;
19021903/// match channel_manager.accept_inbound_channel(
1903- /// &temporary_channel_id, &counterparty_node_id, user_channel_id
1904+ /// &temporary_channel_id, &counterparty_node_id, user_channel_id, None
19041905/// ) {
19051906/// Ok(()) => println!("Accepting channel {}", temporary_channel_id),
19061907/// Err(e) => println!("Error accepting channel {}: {:?}", temporary_channel_id, e),
@@ -7722,8 +7723,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77227723 ///
77237724 /// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77247725 /// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7725- pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7726- self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id)
7726+ pub fn accept_inbound_channel(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides> ) -> Result<(), APIError> {
7727+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, false, user_channel_id, config_overrides )
77277728 }
77287729
77297730 /// Accepts a request to open a channel after a [`events::Event::OpenChannelRequest`], treating
@@ -7744,15 +7745,23 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77447745 ///
77457746 /// [`Event::OpenChannelRequest`]: events::Event::OpenChannelRequest
77467747 /// [`Event::ChannelClosed::user_channel_id`]: events::Event::ChannelClosed::user_channel_id
7747- pub fn accept_inbound_channel_from_trusted_peer_0conf(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128) -> Result<(), APIError> {
7748- self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id)
7748+ pub fn accept_inbound_channel_from_trusted_peer_0conf(&self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides> ) -> Result<(), APIError> {
7749+ self.do_accept_inbound_channel(temporary_channel_id, counterparty_node_id, true, user_channel_id, config_overrides )
77497750 }
77507751
77517752 /// TODO(dual_funding): Allow contributions, pass intended amount and inputs
77527753 fn do_accept_inbound_channel(
77537754 &self, temporary_channel_id: &ChannelId, counterparty_node_id: &PublicKey, accept_0conf: bool,
7754- user_channel_id: u128,
7755+ user_channel_id: u128, config_overrides: Option<ChannelConfigOverrides>
77557756 ) -> Result<(), APIError> {
7757+
7758+ let mut config = self.default_configuration.clone();
7759+
7760+ // Apply configuration overrides.
7761+ if let Some(overrides) = config_overrides {
7762+ config.apply(&overrides);
7763+ };
7764+
77567765 let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(*temporary_channel_id), None);
77577766 let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
77587767
@@ -7782,7 +7791,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
77827791 InboundV1Channel::new(
77837792 &self.fee_estimator, &self.entropy_source, &self.signer_provider, *counterparty_node_id,
77847793 &self.channel_type_features(), &peer_state.latest_features, &open_channel_msg,
7785- user_channel_id, &self.default_configuration , best_block_height, &self.logger, accept_0conf
7794+ user_channel_id, &config , best_block_height, &self.logger, accept_0conf
77867795 ).map_err(|err| MsgHandleErrInternal::from_chan_no_close(err, *temporary_channel_id)
77877796 ).map(|mut channel| {
77887797 let logger = WithChannelContext::from(&self.logger, &channel.context, None);
@@ -7802,7 +7811,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
78027811 self.get_our_node_id(), *counterparty_node_id,
78037812 &self.channel_type_features(), &peer_state.latest_features,
78047813 &open_channel_msg,
7805- user_channel_id, &self.default_configuration , best_block_height,
7814+ user_channel_id, &config , best_block_height,
78067815 &self.logger,
78077816 ).map_err(|_| MsgHandleErrInternal::from_chan_no_close(
78087817 ChannelError::Close(
@@ -14540,17 +14549,17 @@ mod tests {
1454014549 use crate::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, ClosureReason};
1454114550 use crate::ln::types::ChannelId;
1454214551 use crate::types::payment::{PaymentPreimage, PaymentHash, PaymentSecret};
14543- use crate::ln::channelmanager::{create_recv_pending_htlc_info, HTLCForwardInfo, inbound_payment , PaymentId, RecipientOnionFields, InterceptId };
14552+ use crate::ln::channelmanager::{create_recv_pending_htlc_info, inbound_payment, ChannelConfigOverrides, HTLCForwardInfo, InterceptId , PaymentId, RecipientOnionFields};
1454414553 use crate::ln::functional_test_utils::*;
14545- use crate::ln::msgs::{self, ErrorAction};
14554+ use crate::ln::msgs::{self, AcceptChannel, ErrorAction};
1454614555 use crate::ln::msgs::ChannelMessageHandler;
1454714556 use crate::ln::outbound_payment::Retry;
1454814557 use crate::prelude::*;
1454914558 use crate::routing::router::{PaymentParameters, RouteParameters, find_route};
1455014559 use crate::util::errors::APIError;
1455114560 use crate::util::ser::Writeable;
1455214561 use crate::util::test_utils;
14553- use crate::util::config::{ChannelConfig, ChannelConfigUpdate};
14562+ use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate };
1455414563 use crate::sign::EntropySource;
1455514564
1455614565 #[test]
@@ -15299,7 +15308,7 @@ mod tests {
1529915308 // Test the API functions.
1530015309 check_not_connected_to_peer_error(nodes[0].node.create_channel(unkown_public_key, 1_000_000, 500_000_000, 42, None, None), unkown_public_key);
1530115310
15302- check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42), unkown_public_key);
15311+ check_unkown_peer_error(nodes[0].node.accept_inbound_channel(&channel_id, &unkown_public_key, 42, None ), unkown_public_key);
1530315312
1530415313 check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
1530515314
@@ -15330,7 +15339,7 @@ mod tests {
1533015339 let error_message = "Channel force-closed";
1533115340
1533215341 // Test the API functions.
15333- check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
15342+ check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42, None ));
1533415343
1533515344 check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
1533615345
@@ -15521,7 +15530,7 @@ mod tests {
1552115530 let events = nodes[1].node.get_and_clear_pending_events();
1552215531 match events[0] {
1552315532 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15524- nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23).unwrap();
15533+ nodes[1].node.accept_inbound_channel(&temporary_channel_id, &random_pk, 23, None ).unwrap();
1552515534 }
1552615535 _ => panic!("Unexpected event"),
1552715536 }
@@ -15539,7 +15548,7 @@ mod tests {
1553915548 let events = nodes[1].node.get_and_clear_pending_events();
1554015549 match events[0] {
1554115550 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15542- match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23) {
15551+ match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &last_random_pk, 23, None ) {
1554315552 Err(APIError::APIMisuseError { err }) =>
1554415553 assert_eq!(err, "Too many peers with unfunded channels, refusing to accept new ones"),
1554515554 _ => panic!(),
@@ -15555,7 +15564,7 @@ mod tests {
1555515564 let events = nodes[1].node.get_and_clear_pending_events();
1555615565 match events[0] {
1555715566 Event::OpenChannelRequest { temporary_channel_id, .. } => {
15558- nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23).unwrap();
15567+ nodes[1].node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &last_random_pk, 23, None ).unwrap();
1555915568 }
1556015569 _ => panic!("Unexpected event"),
1556115570 }
@@ -15635,6 +15644,33 @@ mod tests {
1563515644
1563615645 #[test]
1563715646 fn test_inbound_anchors_manual_acceptance() {
15647+ test_inbound_anchors_manual_acceptance_with_override(None);
15648+ }
15649+
15650+ #[test]
15651+ fn test_inbound_anchors_manual_acceptance_overridden() {
15652+ let overrides = ChannelConfigOverrides {
15653+ handshake_overrides: Some(ChannelHandshakeConfigUpdate {
15654+ max_inbound_htlc_value_in_flight_percent_of_channel: Some(5),
15655+ htlc_minimum_msat: Some(1000),
15656+ minimum_depth: Some(2),
15657+ to_self_delay: Some(200),
15658+ max_accepted_htlcs: Some(5),
15659+ channel_reserve_proportional_millionths: Some(20000),
15660+ }),
15661+ update_overrides: None,
15662+ };
15663+
15664+ let accept_message = test_inbound_anchors_manual_acceptance_with_override(Some(overrides));
15665+ assert_eq!(accept_message.common_fields.max_htlc_value_in_flight_msat, 5_000_000);
15666+ assert_eq!(accept_message.common_fields.htlc_minimum_msat, 1_000);
15667+ assert_eq!(accept_message.common_fields.minimum_depth, 2);
15668+ assert_eq!(accept_message.common_fields.to_self_delay, 200);
15669+ assert_eq!(accept_message.common_fields.max_accepted_htlcs, 5);
15670+ assert_eq!(accept_message.channel_reserve_satoshis, 2_000);
15671+ }
15672+
15673+ fn test_inbound_anchors_manual_acceptance_with_override(config_overrides: Option<ChannelConfigOverrides>) -> AcceptChannel {
1563815674 // Tests that we properly limit inbound channels when we have the manual-channel-acceptance
1563915675 // flag set and (sometimes) accept channels as 0conf.
1564015676 let mut anchors_cfg = test_default_channel_config();
@@ -15671,10 +15707,10 @@ mod tests {
1567115707 let events = nodes[2].node.get_and_clear_pending_events();
1567215708 match events[0] {
1567315709 Event::OpenChannelRequest { temporary_channel_id, .. } =>
15674- nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23).unwrap(),
15710+ nodes[2].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23, config_overrides ).unwrap(),
1567515711 _ => panic!("Unexpected event"),
1567615712 }
15677- get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
15713+ get_event_msg!(nodes[2], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id())
1567815714 }
1567915715
1568015716 #[test]
0 commit comments